命名的容器挂载数据卷,其他容器通过挂载这个父容器实现数据共享,挂载数据卷的容器,称之为数据卷容器。
下面我们以上一步新建的镜像lbb/centos为模板并运行容器dc01/dc02/dc03。
我们通过前面新建的镜像lbb/centos为模板,生成的容器是挂载着/dataVolumeContainer1和/dataVolumeContainer2两个数据卷
- 先启动一个父容器dc01,并在dataVolumeContainer2中新增内容
[root@t-docker lbb]# docker images lbb/centos
REPOSITORY TAG IMAGE ID CREATED SIZE
lbb/centos latest a37b96c1c7a7 3 hours ago 200MB
[root@t-docker lbb]# docker run -it --name dc01 lbb/centos
[root@b786166d80d7 /]# ls
dataVolumeContainer1 dataVolumeContainer2
[root@b786166d80d7 /]# cd dataVolumeContainer1
[root@b786166d80d7 dataVolumeContainer1]# touch dc01_add.txt
[root@t-docker lbb]#
[root@t-docker lbb]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b786166d80d7 lbb/centos "/bin/sh -c /bin/bash" 8 minutes ago Up 8 minutes dc01
- dc02/dc03继承dc01(--volumes-from参数)
dc02 继承 dc01
[root@t-docker lbb]# docker run -it --name dc02 --volumes-from dc01 lbb/centos
[root@e71e1991a17b /]# ls
anaconda-post.log dataVolumeContainer1 dev home lib64 mnt proc run srv tmp var
bin dataVolumeContainer2 etc lib media opt root sbin sys usr
[root@e71e1991a17b /]# cd dataVolumeContainer1
[root@e71e1991a17b dataVolumeContainer1]# ls
dc01_add.txt
[root@e71e1991a17b dataVolumeContainer1]# touch dc02_add.txt
[root@e71e1991a17b dataVolumeContainer1]# ls
dc01_add.txt dc02_add.txt
[root@t-docker lbb]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e71e1991a17b lbb/centos "/bin/sh -c /bin/bash" 3 minutes ago Up 3 minutes dc02
b786166d80d7 lbb/centos "/bin/sh -c /bin/bash" 14 minutes ago Up 14 minutes dc01
dc03 继承 dc01
[root@t-docker lbb]# docker run -it --name dc03 --volumes-from dc01 lbb/centos
[root@69c4c254cb0f /]# cd dataVolumeContainer1
[root@69c4c254cb0f dataVolumeContainer1]# ls
dc01_add.txt dc02_add.txt
[root@69c4c254cb0f dataVolumeContainer1]# touch dc03_add.txt
[root@69c4c254cb0f dataVolumeContainer1]# ls
dc01_add.txt dc02_add.txt dc03_add.txt
[root@t-docker lbb]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
69c4c254cb0f lbb/centos "/bin/sh -c /bin/bash" 2 minutes ago Up About a minute dc03
e71e1991a17b lbb/centos "/bin/sh -c /bin/bash" 7 minutes ago Up 7 minutes dc02
b786166d80d7 lbb/centos "/bin/sh -c /bin/bash" 18 minutes ago Up 18 minutes dc01
- 回到dc01可以看到dc02/dc03添加的数据
[root@t-docker lbb]# docker exec -it dc01 /bin/bash
[root@b786166d80d7 /]# ls
anaconda-post.log dataVolumeContainer1 dev home lib64 mnt proc run srv tmp var
bin dataVolumeContainer2 etc lib media opt root sbin sys usr
[root@b786166d80d7 /]# cd dataVolumeContainer1
[root@b786166d80d7 dataVolumeContainer1]# ls
dc01_add.txt dc02_add.txt dc03_add.txt
- 删除dc01,dc02修改后dc03可否访问
[root@t-docker lbb]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
69c4c254cb0f lbb/centos "/bin/sh -c /bin/bash" About an hour ago Up About an hour dc03
e71e1991a17b lbb/centos "/bin/sh -c /bin/bash" About an hour ago Up About an hour dc02
b786166d80d7 lbb/centos "/bin/sh -c /bin/bash" About an hour ago Up About an hour dc01
[root@t-docker lbb]#
[root@t-docker lbb]# docker rm -f dc01
dc01
[root@t-docker lbb]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
69c4c254cb0f lbb/centos "/bin/sh -c /bin/bash" About an hour ago Up About an hour dc03
e71e1991a17b lbb/centos "/bin/sh -c /bin/bash" About an hour ago Up About an hour dc02
[root@t-docker lbb]# docker attach dc02
[root@e71e1991a17b dataVolumeContainer1]# ls
dc01_add.txt dc02_add.txt dc03_add.txt
[root@e71e1991a17b dataVolumeContainer1]# touch dc02_update.txt
[root@e71e1991a17b dataVolumeContainer1]# ls
dc01_add.txt dc02_add.txt dc02_update.txt dc03_add.txt
- 删除dc02后,dc03仍然可以访问
- 新建dc04继承dc03后再删除dc03
[root@t-docker lbb]# docker run -it --name dc04 --volumes-from dc03 lbb/centos
[root@7b7f4dd0c965 /]# cd dataVolumeContainer1
[root@7b7f4dd0c965 dataVolumeContainer1]# ls
dc01_add.txt dc02_add.txt dc02_update.txt dc03_add.txt
总结:容器之间配置信息的传递。数据卷的生命周期一直持续到没有容器使用它为止。