当前位置: 首页 > news >正文

容器docker 架构命令案例


文章目录

  • 前言
  • 一、docker
    • 1.1 为什么有docker
    • 1.2 docker架构
    • 1.3 docker 安装
    • 1.4 docker中央仓库
    • 1.5 docker 基本指令
    • 1.6 docker数据卷,挂载
      • 例:nginx 数据卷挂载
      • 例:mysql 本地持久化
    • 1.7 镜像制作
      • 镜像结构
      • dockerfile基础指令
      • 容器生成镜像
    • 1.8 docker 网络
    • 1.9 部署案例
      • 前端部署
      • 后端部署


前言

市电子信息产业链劳动和技能竞赛,以赛促学备战笔记,因对微服务容器框架不熟,浪费大多时间在找配置文件中.也荣幸获得三等奖

容器化
在这里插入图片描述
在这里插入图片描述


一、docker

考虑podman的生态不足,2024年7月重新整理docker
请参考2019年docker笔记 容器docker简介及基本命令

1.1 为什么有docker

在这里插入图片描述

1.2 docker架构

在这里插入图片描述

1.3 docker 安装

docker 官网:https://www.docker.com/ 点击doc文档
在这里插入图片描述

菜鸟教程:https://www.runoob.com/docker/centos-docker-install.html

# CentOS 7
# 移除旧版本docker
sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine# 配置docker yum源。
sudo yum install -y yum-utils # yum-utils是一个提供额外功能的工具集,#用于管理YUM(Yellowdog Updater, Modified)软件包管理器。sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo  
# 可在/etc/yum.repos.d/ 中查看增加的# 安装 最新 docker
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin# 启动& 开机启动docker; enable + start 二合一
systemctl enable docker --now# 配置加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://82m9ar63.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

docker info 查看使用registy仓库。
Docker中,默认情况下镜像和容器的存储位置是/var/lib/docker。
将默认的存储路径修改为新的存储路径:
vim /etc/docker/daemon.json。在配置文件中添加以下内容:{“data-root”:”/mnt/docker”}
在这里插入图片描述

centos 8 兼容按centos7安装
在这里插入图片描述

在centos8中,dnf install docker
在这里插入图片描述

1.4 docker中央仓库

在这里插入图片描述

1.docker的官方中央仓库:这个镜像是最全的,但是下载速度最慢。
https://hub.docker.com/
2.国内的镜像网站:网易数帆, daocloud, … http://c.163.com/hub
http://hub.daocloud.io/ 不需要登录 (推荐使用)

在这里插入图片描述在这里插入图片描述

1.5 docker 基本指令

在这里插入图片描述

我们来看一个案例,以提供感性认识并加深理解。

安装mysql容器案例,-e参数需到发布镜像网查看配置文档。

docker run -itd --name mysql-test -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 -e TZ=Asia/Shanghai mysql
#-i interactive交互,-t tty终端,-d detach
docker run -d --name nginx -p 801:80 nginx:1.14.1

在这里插入图片描述
在这里插入图片描述

虽然我们能快速掌握案例,但不应忽视厚积薄发的理念

在这里插入图片描述

镜像基本命令

docker pull nginx #拉取镜像
docker images # 查看镜像
# 镜像打包
docker save --help
docker save -o nginx.tar nginx:latest
# 删镜像
docker rmi nginx
# 压缩包加载镜像
docker load -i /opt/nginx.tar

容器基本命令

#创建容器
docker run -d --name nginx_r -p 801:80 nginx
#查看容器
docker ps -a
docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Names}}\t{{.Status}}"
#可在~./bashrc 中使用别名快捷
#容器交互 需要容器中/bin/bash
docker exec -it nginx /bin/bash
# 停容器nginx
docker stop nginx
# 重新启动容器nginx 
docker start nginx
#查看容器日志
docker logs nginx

1.6 docker数据卷,挂载

由于容器只包含应用程序和其依赖项,它们通常不包含一个完整的开发环境,例如文本编辑器vi或编译器。因此,如果你需要在容器中编辑文件,你需要使用数据卷(volume)来将主机系统上的文件或目录挂载到容器中。

在这里插入图片描述

在这里插入图片描述

例:nginx 数据卷挂载

#使用docker volume 创建,查看卷
docker volume --help
#!注意删掉容器,数据卷对应关系依然存在
# 创建run时 使用数据卷
docker run -d --name nginx -p 801:80 -v html:/usr/share/nginx/html nginx
docker run -d --name nginx -p 801:80 -v html:/usr/share/nginx/html -v config:/etc/nginx/  nginx#查看容器卷宿主机路径
docker volume inspect html
docker volume inspect html configcd /var/lib/docker/volumes/html/_data

在这里插入图片描述

宿主机目录和容器目录挂载,将宿主机目录改为数据卷名。

-v mysql:/var/lib/mysql # 识别为一个数据卷叫mysql
-v ./mysql:/var/lib/mysql #识别为当前目录下的mysql

在这里插入图片描述

例:mysql 本地持久化

官网文档:https://hub.docker.com/_/mysql查询镜像配置

$ docker run --name some-mysql -v /my/own/datadir:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tagdocker run -itd --name mysql_r -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 -e TZ=Asia/Shanghai \
-v /opt/mysql/data:/var/lib/mysql \
-v /opt/mysql/init:/docker-entrypoint-initdb.d \
-v /opt/mysql/conf:/etc/mysql/conf.d \
mysql

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

命令:

#从容器里面拷文件到宿主机
#docker cp testtomcat:/usr/local/tomcat/webapps /opt
#从宿主机拷文件到容器里面
docker cp activity.sql 8300a06b704b:/opt/
#使用source命令数据恢复
mysql -uroot -p123456
>source /opt/activity.sql ;
>exit;exit;
>#删容器
docker rm mysql -f
# 重新挂载,数据仍然存在
docker run -itd --name mysql_r -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 -e TZ=Asia/Shanghai \
-v /opt/mysql/data:/var/lib/mysql \
-v /opt/mysql/init:/docker-entrypoint-initdb.d \
-v /opt/mysql/conf:/etc/mysql/conf.d \
mysql
#重新挂载,数据仍然存在

1.7 镜像制作

在这里插入图片描述

镜像结构

在这里插入图片描述

dockerfile基础指令

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

 docker build -t imag:tag .

容器生成镜像

docker run -d -p 8081:8081  \
-v /home/xiaotang0711/Desktop/docker/hadoop.jar:/usr/hadoop.jar \
--name springboot java:8u111  \
java -jar /usr/hadoop.jar#或copy 从宿主机到容器
docker cp /opt/test.js testtomcat:/usr/local/tomcat/webapps/test/js
# 生成一个新的镜像
docker commit 4eb13e778da3 centos:7-ssh

1.8 docker 网络

在这里插入图片描述
因ip随机不稳定,通过自建网络,可以通过容器名连接.

在这里插入图片描述

#创建网络
network create lih
#查看网络
docker network ls
#查看容器网络
docker inspect 625ec79eee83 |grep IPAddress
#添加网络到容器
docker network  connect --help
docker network  connect lih 625ec79eee83
#再查看
docker inspect 625ec79eee83 |grep IPAddress#可以创建容器的时候添加网络

1.9 部署案例

# 生成基础镜像
docker load -i nginx.tar
#添加网络
docker network create lihnet

前端部署

需求:创建一个新的nginx容器,nginx.conf,html 目录与容器挂载。

#数据卷
#会自动本地生成目录文件
docker run -d --name nginx --network lihnet  -p 802:80 -v html:/usr/share/nginx/html -v config:/etc/nginx/  nginx
docker volume inspect  html config
#2或目录挂载
#!注意把赋值的nginx.conf到/home/nginx/html中注意把不存在的文件去掉
docker run -d --name nginx --network lihnet  -p 802:80 -v /home/nginx/html:/usr/share/nginx/html -v /home/nginx/config:/etc/nginx/  nginx#3或文件对文件推荐使用
docker run -d --name nginx --network lihnet  -p 802:80 -v /home/nginx/html:/usr/share/nginx/html -v /home/nginx/config/nginx.conf:/etc/nginx/nginx.conf  nginx#4或使用默认配置文件
docker run -d --name nginx --network lihnet  -p 802:80 -v /home/nginx/html:/usr/share/nginx/html nginxdocker exec -it nginx /bin/bash
#制作镜像
docker commit 78a96dd818af nignjingx
#重新生成
docker run -d -p 802:80 --name nginx2 --network lihnet nignjingx

dockerfile方式

vim dockerfile
......
# 基础镜像使用Nginx
FROM nginx
# 添加时区环境变量,亚洲,上海
ENV TimeZone=Asia/Shanghai
# 将前端dist文件中的内容复制到nginx目录
COPY dist  /usr/share/nginx/html/
# 用本地的nginx配置文件覆盖镜像的Nginx配置
COPY default.conf /etc/nginx/conf.d
# 暴露端口
EXPOSE 80
......

后端部署

应用程序
dockerfile方式

vim dockerfile
.....
FROM java:8
COPY *.jar /app.jar
EXPOSE 8080 #不使用expose指令,则镜像的用户无法从dockerfile直接了解到应用默认监听的端口
ENTRYPOINT ["java","-jar","app.jar"]
......
docker build -t api .
docker run -d --name javahtml -p 8080:8080 --network lihnet api

基础镜像java

#或基础镜像java生成容器docker run -d -p 8080:8080 -v /opt/depos.jar:/usr/depos.jar --name javajar java java -jar /usr/depos.jar 

mysql

docker run -itd --name mysql_r -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 -e TZ=Asia/Shanghai \
-v /opt/mysql/data:/var/lib/mysql \
-v /opt/mysql/init:/docker-entrypoint-initdb.d \
-v /opt/mysql/conf:/etc/mysql/conf.d \
mysql#mysql 
# 创建用户和密码
create user tom@'%' identified by 'ttt'; 
#赋予权限
grant all on *.* to root@'%' identified by '123456';create database shop;
use shop;
source /var/lib/mysql/book.sql;

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 文心快码——百度研发编码助手
  • 大模型/NLP/算法面试题总结3——BERT和T5的区别?
  • WindowsMac共享文件夹设置
  • MSPM0G3507(三十六)——超声波PID控制小车固定距离
  • 景联文科技以高质量多模态数据集赋能AI大模型,精准匹配提升模型性能
  • 通用型I2C接口的应用之综合应用(N32G45XVL-STB)
  • 强化学习编程实践-4-基于蒙特卡洛的方法
  • HQL案例大全之1. 查询没有学全所有课的学生的学号、姓名(特殊:应该先连接,在筛选)
  • 鸿蒙HarmonyOS应用开发为何选择ArkTS不是Java?
  • eNSP:防火墙设置模拟公司配置(二)
  • python入门基础知识·二
  • oslo_i18n学习小结
  • LocalAI离线安装部署
  • java八股文面试题
  • 智能家居装修怎么布线?智能家居网络与开关插座布置
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • Github访问慢解决办法
  • idea + plantuml 画流程图
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • JSDuck 与 AngularJS 融合技巧
  • Python_网络编程
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • Python学习之路13-记分
  • Redis字符串类型内部编码剖析
  • Selenium实战教程系列(二)---元素定位
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • 大主子表关联的性能优化方法
  • 高程读书笔记 第六章 面向对象程序设计
  • 关于 Cirru Editor 存储格式
  • 基于axios的vue插件,让http请求更简单
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 深度学习中的信息论知识详解
  • 微服务入门【系列视频课程】
  • 无服务器化是企业 IT 架构的未来吗?
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • ​queue --- 一个同步的队列类​
  • ​埃文科技受邀出席2024 “数据要素×”生态大会​
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • #NOIP 2014# day.2 T2 寻找道路
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (2)从源码角度聊聊Jetpack Navigator的工作流程
  • (C++20) consteval立即函数
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (精确度,召回率,真阳性,假阳性)ACC、敏感性、特异性等 ROC指标
  • (六)c52学习之旅-独立按键
  • (一)、python程序--模拟电脑鼠走迷宫
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • (转)人的集合论——移山之道
  • .bat批处理出现中文乱码的情况