学习 Docker(5)-Docker 服务管理
Docker 容器的网络连接
Docker 客户端和守护进程
Docker 为 c/s 架构,客户端和守护进程支持以下三种 socket:
unix:///var/run/docker.sock
tcp://host:port
fd://socket
自定义的 Docker 客户端 可以通过 Remote API 与 Docker 守护进程进行通信。
Docker 客户端远程访问
Docker 守护进程使用 -H
—-host
选项指定 socket;
|
|
Docker 客户端使用 -H
—-host
选项
|
|
或者指定 DOCKER_HOST
环境变量指定 socket
|
|
Docker 容器的互联
Docker 容器使用虚拟网桥与宿主机通信,默认网段为 172.17.42.1/16
。
虽然同一宿主机上的 Docker 容器可以互相访问,但由于 Docker 容器的 IP 地址在容器启动时分配,所以容器间不能通过指定 IP 的方式互相连接。
要链接到其他容器,可以在容器启动时添加 —-link
参数:
|
|
ALIAS 是给被链接容器设置的别名,可以在容器中直接使用这个名字访问被链接容器。
如果要禁止容器的互相访问,设置 Docker 守护进程的 --icc
参数为 false。
如果只允许特定容器的互相访问:
- 守护进程设置参数
—-icc=false
(默认为 true)和--iptables=true
; - 相互访问的容器设置
—-link
参数。
Docker 容器的数据管理
数据卷
有两种方式挂载数据卷。
一种是,在 Dockerfile 构建文件中使用 VOLUME 命令创建数据卷。通过这种方式创建的数据卷,在容器启动时会被映射到宿主机上不存在的随机目录。不能用于不同容器之间的共享。
另一种是,使用 -v
,—-volume
参数在容器启动时挂载数据卷:
|
|
容器中目录必须为绝对路径
访问权限可以不指定,可选值为:
wr
读写(默认值);ro
只读;
数据卷容器
一个容器挂载数据卷,其他容器通过挂载这个容器实现数据共享。挂载数据卷的容器,被称之为数据卷容器。
其他容器通过 —volumes-from
指令在运行时挂载数据卷容器
|
|
下面是一个实例。
首先,我们新建一个 Dockerfile 文件,在文件中创建数据卷 /datavolume
。
|
|
使用该文件构建镜像 dv
|
|
新建一个数据卷容器 dv1,把数据卷 /datavolume
映射到宿主机 ~/Downloads
目录
|
|
此时该容器已经挂载了 /datavolume
数据卷,我们在数据卷中新建文件 dv1.txt,然后退出 dv1 的 shell,dv1 停止运行。
|
|
基于 Ubuntu 镜像新建容器 dv2,把 dv1 作为数据卷容器
|
|
基于 Ubuntu 镜像新建容器 dv3,把 dv1 作为数据卷容器
|
|
在 dv2 和 dv3 中访问 /datavolume
目录,都能看到我们新建的 dv1.txt 文件。
删除 dv1 容器
|
|
在 dv2 中删除文件 dv1.txt,宿主机中 ~/Downloads
目录中文件也已经被删除。
查看 dv2 容器的信息,可以看到 dv2 容器中 /datavolume
数据卷直接映射到了宿主机的 ~/Downloads
目录
|
|
该数据卷容器的作用仅仅在于传递配置信息(映射关系)。即使删除数据卷容器,容器与宿主机的映射关系仍然存在。
数据卷的备份和还原
- 使用
-—volumes-from
挂载数据卷容器 - 使用
-v
挂载备份目录 - 使用 tar 命令将数据卷容器目录打包放到备份目录,即实现了数据卷的备份。