Docker架构
-
docker进程(daemon)
-
镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
-
容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和对象一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
-
仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
配置Docker镜像加速器
默认情况下,将来从docker hub(Docker)上下载docker镜像,太慢。一般都会配置镜像加速器,有以下几种可选择:
• USTC:中科大镜像加速器(https://docker.mirrors.ustc.edu.cn)
• 阿里云
• 网易云
• 腾讯云
这里演示阿里云镜像加速器:
1、登录阿里云(阿里云-计算,为了无法计算的价值)网站(如下是2023年4的操作界面):选择产品》容器》容器镜像服务ACR
2、选择控制台
3、在镜像工具中选择镜像加速器,里面有操作文档参考
4、根据你的系统(Ubuntu/CentOS...)选择相应的操作文档,并更改里面的极速器地址,在linux中执行相应的命令即可
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://72dgbyuc.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
Docker命令
Docker进程相关命令:操作的是daemon
Docker镜像相关命令:操作的是images
Docker 容器相关命令:操作的是container
Docker进程相关命令
1、启动docker服务:
systemctl start docker
2、停止docker服务:
systemctl stop docker
3、重启docker服务:
systemctl restart docker
4、查看docker服务状态:
systemctl status docker
5、设置开机启动docker服务:
systemctl enable docker
Docker镜像相关命令
1、查看镜像: 查看本地所有的镜像
docker images
docker images –q # 查看所用镜像的id
2、搜索镜像:从网络中查找需要的镜像
docker search 镜像名称
3、拉取镜像:
从Docker仓库下载镜像到本地,镜像名称格式为 名称:版本号,如果版本号不指定则是最新的版本。
如果不知道镜像版本,可以去docker hub (Docker)搜索对应镜像查看。
docker pull 镜像名称
在dockerhub中查询redis有哪些镜像,步骤如下:
打开hub.docker.com网站》搜索redis》结果会有官方镜像(一般start数高)和非官方镜像》选择官方镜像,如下所示:
4、删除镜像: 删除本地镜像
docker rmi 镜像id # 删除指定本地镜像
docker rmi `docker images -q` # 删除所有本地镜像。docker images -q查看所用镜像的id
镜像id可能重复,只是TAG不一样,这时用 docker rmi 镜像id
就会报错,需要用docker rmi 名称:TAG
删除,如下:
Docker 容器相关命令
1、查看容器
docker ps # 查看正在运行的容器
docker ps -a # 查看所有容器
docker ps -aq # 查看所有容器id
2、创建并启动容器
参数说明:
-
-i:保持容器运行。通常与 -t 同时使用。加入it这两个参数后,容器创建后自动进入容器中,退出容器后(
exit
),容器自动关闭。 -
-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用。
-
-d:以守护(后台)模式运行容器。创建一个容器在后台运行,需要使用docker exec 进入容器。退出后,容器不会关闭。
-
-it 创建的容器一般称为交互式容器,-id 创建的容器一般称为守护式容器
-
--name:为创建的容器命名。
docker run 参数
这里的 /bin/bash表示进入容器的初始化指令,可省略。
3、进入容器
docker exec 参数
#如:
# 先创建一个c2容器在后台运行
docker run -id --name=c2 centos:7
# 进入c2容器,若容器没有启动是进入不了的
docker exec -it c2 /bin/bash
4、停止容器
docker stop 容器名称
5、启动容器
docker start 容器名称
6、删除容器:如果容器是运行状态则删除失败,需要停止容器才能删除
docker rm 容器名称/容器id
docker rm `docker ps -aq` #删除所有容器。docker ps -aq 显示所有容器id
7、查看容器信息:如容器网关、ip等等
docker inspect 容器名称
Docker 容器的数据卷
思考三个问题:
• Docker 容器删除后,在容器中产生的数据也会随之销毁
• Docker 容器和外部机器可以直接交换文件吗?
• 容器之间想要进行数据交互?
数据卷概念
数据卷
• 数据卷是宿主机中的一个目录或文件
• 当容器目录和数据卷目录绑定后,对方的修改会立即同步
• 一个数据卷可以被多个容器同时挂载
• 一个容器也可以被挂载多个数据卷
数据卷作用
• 容器数据持久化
• 外部机器和容器间接通信
• 容器之间数据交换
配置数据卷
创建启动容器时,使用 –v 参数设置数据卷:
docker run ... –v 宿主机目录(文件):容器内目录(文件) ...
注意事项:
-
目录必须是绝对路径
-
如果目录不存在,会自动创建
-
可以挂载多个数据卷
同理,在宿主机更改了对应的文件,容器中对应的文件也会对应更改。
当删除了这个容器的时候,这个宿主机中的文件(数据卷)不会被删除,还是存在的。
当重新创建了容器,并挂载了上面设置的数据卷,此时也是容器也是能使用这个数据卷内的文件的。
演示一个容器也可以被挂载多个数据卷:
如下创建名字为c2的容器,挂载两个数据卷(data2、data3)
反斜杠\表示输入多行,~表示宿主机的当前目录,因为在宿主机中执行的命令。但是在容器中不能这样写
docker run -it --name=c2 \
-v ~/data2:/root/data2 \
-v ~/data3:/root/data3 \
centos:7
数据卷容器
多容器进行数据交换
-
多个容器挂载同一个数据卷
-
数据卷容器
上图中,当数据卷容器被移除的时候,容器c1、c2也能正常访问数据卷
配置数据卷容器
-
创建启动c3数据卷容器,使用 –v 参数 设置数据卷
docker run -it --name=c3 -v /volume centos:7 /bin/bash #/volume表示容器中的目录,名字可以改变。这里没有设置宿主机目录,docker会给你自动分配一个目录
用docker inspect c3
命令查看c3容器相关信息:
-
创建启动 c1 c2 容器,使用 –-volumes-from 参数 设置数据卷
docker run -it --name=c1 --volumes-from c3 centos:7 /bin/bash #创建c1容器后,容器内部也有/volume目录
docker run -it --name=c2 --volumes-from c3 centos:7 /bin/bash #创建c2容器后,容器内部也有/volume目录,当c1容器中/volume目录中内容改变的时候c2中的也同样会改变
小结:
数据卷容器
• 创建一个容器,挂载一个目录,让其他容器继承自该容器( --volume-from )。
• 通过简单方式实现数据卷配置