什么是数据卷容器?
命名的容器挂载数据卷,其他容器通过挂载这个(父容器)实现数据共享,挂在数据卷的容器,称为数据卷容器。
以我上一篇文章Docker_容器数据卷新建的lgz/centos镜像运行容器,并取名字mycentos01
测试命令:docker run -it --name mycentos01 lgz/centos:build01
[root@localhost myDocker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
lgz/tomcat build01 6ce2360a3c6c 2 hours ago 507MB
lgz/centos build01 0b71e009561a 2 hours ago 203MB
tomcat jdk8-openjdk c81106060722 2 days ago 507MB
centos 7 5e35e350aded 12 days ago 203MB
centos latest 0f3e07c0138f 7 weeks ago 220MB
[root@localhost myDocker]# docker run -it --name mycentos01 lgz/centos:build01
[root@3586d60e5c03 /]# ls
anaconda-post.log bin data1 data2 data3 dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
可以看到这个容器中自带有三个数据卷,data1 data2 data3。(具体怎么回事,请阅读上一篇文章Docker_容器数据卷)
运行另一个mycentos02容器,挂载mycentos01
命令格式:docker run -it --name [容器名称] --volumes-from [需要挂载的容器名称或者id] [镜像名[:TAG]]
测试命令:docker run -it --name mycentos02 --volumes-from 3586d60e5c03 lgz/centos:build01
[root@localhost myDocker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3586d60e5c03 lgz/centos:build01 "/bin/sh -c /bin/bash" 4 minutes ago Up 4 minutes mycentos01
[root@localhost myDocker]# docker run -it --name mycentos02 --volumes-from 3586d60e5c03 lgz/centos:build01
[root@df2b623b245e /]# ls
anaconda-post.log bin data1 data2 data3 dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
运行第三个容器,mycentos03,同样挂载mycentos01
[root@localhost myDocker]# docker run -it --name mycentos03 --volumes-from 3586d60e5c03 lgz/centos:build01
[root@04f891897f25 /]# ls
anaconda-post.log bin data1 data2 data3 dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[root@04f891897f25 /]#
三个容器同样带有data1 data2 data3 数据卷,因为他们都来自于同一个镜像。
现在来测试在mycentos01中的data1里面添加文件,其他两个容器里面是否会改变
[root@04f891897f25 /]# [root@localhost myDocker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
04f891897f25 lgz/centos:build01 "/bin/sh -c /bin/bash" 3 minutes ago Up 3 minutes mycentos03
df2b623b245e lgz/centos:build01 "/bin/sh -c /bin/bash" 8 minutes ago Up 8 minutes mycentos02
3586d60e5c03 lgz/centos:build01 "/bin/sh -c /bin/bash" 14 minutes ago Up 14 minutes mycentos01
#打开 mycentos01 并且新建centos01AddFile.txt文件
[root@localhost myDocker]# docker attach mycentos01
[root@3586d60e5c03 /]# cd /data1
[root@3586d60e5c03 data1]# ll
total 0
[root@3586d60e5c03 data1]# touch centos01AddFile.txt
[root@3586d60e5c03 data1]# ll
total 0
-rw-r--r--. 1 root root 0 Nov 24 14:14 centos01AddFile.txt
#打开 mycentos02
[root@localhost myDocker]# docker attach mycentos02
[root@df2b623b245e /]# cd data1
[root@df2b623b245e data1]# ll
total 0
-rw-r--r--. 1 root root 0 Nov 24 14:14 centos01AddFile.txt
#打开 mycentos03
[root@localhost myDocker]# docker attach mycentos03
[root@04f891897f25 /]# ls /data1 -l
total 0
-rw-r--r--. 1 root root 0 Nov 24 14:14 centos01AddFile.txt
可以看到,在mycentos01中创建文件,其他两个容器的data1数据卷中会同步共享这个文件。
现在来测试删除mycentos01容器后,对其他两个容器的数据卷会不会有影响
[root@localhost myDocker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
04f891897f25 lgz/centos:build01 "/bin/sh -c /bin/bash" 4 hours ago Up 4 hours mycentos03
df2b623b245e lgz/centos:build01 "/bin/sh -c /bin/bash" 4 hours ago Up 4 hours mycentos02
3586d60e5c03 lgz/centos:build01 "/bin/sh -c /bin/bash" 4 hours ago Up 4 hours mycentos01
[root@localhost myDocker]# docker rm -f mycentos01
mycentos01
[root@localhost myDocker]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
04f891897f25 lgz/centos:build01 "/bin/sh -c /bin/bash" 4 hours ago Up 4 hours mycentos03
df2b623b245e lgz/centos:build01 "/bin/sh -c /bin/bash" 4 hours ago Up 4 hours mycentos02
#打开mycentos02容器,并创建一个文件
[root@localhost myDocker]# docker attach mycentos02
[root@df2b623b245e data1]# ll
total 0
-rw-r--r--. 1 root root 0 Nov 24 14:14 centos01AddFile.txt
[root@df2b623b245e data1]# touch centos02AddFile.txt
[root@df2b623b245e data1]# ll
total 0
-rw-r--r--. 1 root root 0 Nov 24 14:14 centos01AddFile.txt
-rw-r--r--. 1 root root 0 Nov 24 14:23 centos02AddFile.txt
#打开mycentos03容器
[root@localhost myDocker]# docker attach mycentos03
[root@04f891897f25 /]# ls /data1 -l
total 0
-rw-r--r--. 1 root root 0 Nov 24 14:14 centos01AddFile.txt
-rw-r--r--. 1 root root 0 Nov 24 14:23 centos02AddFile.txt
可以看到,数据卷共享并没有因为删除mycentos01而失效,可以得出结论:容器之间配置信息的传递,数据卷的生命周期会一直持续到没有容器使用它为止。