回顾:绑定数据卷是将容器内产生的数据持久化的一个操作

什么是数据卷容器:

命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器

简单来说 ,硬盘上面挂载硬盘,实现数据的依赖

启动容器 名称为 zhy ,打开新的交互式窗口 ,指定主机路径和容器内路径的数据卷绑定 相当于挂载一个硬盘
docker run -it —name zhy -v /a1:/dataVolumeContainer1 -v /a2:/datavolumeContainer2 centos:1.1

多个数据依赖:

centos1.1是用dockerfile创建的包含两个数据卷的镜像文件
设置 zhy为父容器
docker run -it —name zhy centos:1.1
以相同的模板运行 zhy2
docker run -it —name zhy2 —volumes-from zhy centos:1.1
再以相同的模板运行 zhy2
docker run -it —name zhy3 —volumes-from zhy2 centos:1.1
无论在 zhy容器还是zhy2,zhy3任意一个容器中新增文件,另外两个容器都会同步更新文件
并且在已经形成的关系链中删除中间某个容器,其他的容器的数据共享功能不受影响。

创建多个容器形成数据共享

  1. [root@test 12345]# docker run -it --name zhy centos:1.1
  2. [root@test 12345]# docker run -it --name zhy2 --volumes-from zhy centos:1.1
  3. [root@294d3f8affb7 /]#
  4. [root@test 12345]#
  5. [root@test 12345]# docker run -it --name zhy3 --volumes-from zhy2 centos:1.1
  6. [root@109f696367a0 /]#
  7. [root@test 12345]# docker run -it --name zhy4 --volumes-from zhy3 centos:1.1

将链条中间某个容器删除也不会影响其他容器时间的数据共享

  1. [root@test 12345]# docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. d046741ebf31 centos:1.1 "/bin/sh -c /bin/bash" 3 minutes ago Up 3 minutes zhy4
  4. 109f696367a0 centos:1.1 "/bin/sh -c /bin/bash" 4 minutes ago Up 4 minutes zhy3
  5. 294d3f8affb7 centos:1.1 "/bin/sh -c /bin/bash" 21 hours ago Up 21 hours zhy2
  6. f1dff44fd34a centos:1.1 "/bin/sh -c /bin/bash" 21 hours ago Up 21 hours zhy
  7. [root@test 12345]# docker attach zhy4
  8. [root@d046741ebf31 /]# cd datavolumeContainer2/
  9. [root@d046741ebf31 datavolumeContainer2]# touch 1.rxr
  10. [root@d046741ebf31 datavolumeContainer2]# read escape sequence
  11. [root@test 12345]# docker attach zhy1
  12. Error: No such container: zhy1
  13. [root@test 12345]# docker attach zhy
  14. [root@f1dff44fd34a /]# cd datavolumeContainer2/
  15. [root@f1dff44fd34a datavolumeContainer2]# ls
  16. 1.rxr
  17. [root@f1dff44fd34a datavolumeContainer2]# read escape sequence
  18. [root@test 12345]# docker attach zhy3
  19. [root@109f696367a0 /]# cd datavolumeContainer2/
  20. [root@109f696367a0 datavolumeContainer2]# ls //容器zhy zhy3 zhy4中都共享了相同的文件
  21. 1.rxr
  22. [root@109f696367a0 datavolumeContainer2]# read escape sequence
  23. [root@test 12345]# docker rm zhy3
  24. Error response from daemon: You cannot remove a running container 109f696367a0b4ffc0158d80747d1889f10ffa702bce040946d48f52e945a35d. Stop the container before attempting removal or force remove
  25. [root@test 12345]# docker stop zhy3
  26. zhy3
  27. [root@test 12345]# docker start zhy3
  28. zhy3
  29. [root@test 12345]# docker rm -f zhy3 //强制删除运行中的容器
  30. zhy3
  31. [root@test 12345]# docker attach zhy2
  32. [root@294d3f8affb7 /]# cd datavolumeContainer2/
  33. [root@294d3f8affb7 datavolumeContainer2]# ls
  34. 1.rxr //容器zhy2种也有相同的文件
  35. [root@294d3f8affb7 datavolumeContainer2]# touch 2.txt
  36. [root@294d3f8affb7 datavolumeContainer2]# read escape sequence
  37. [root@test 12345]# docker attach zhy4
  38. [root@d046741ebf31 datavolumeContainer2]# ls
  39. 1.rxr 2.txt //容器zhy4种也产生了容器zhy2新建的文件
  40. [root@d046741ebf31 datavolumeContainer2]# read escape sequence
  41. [root@test 12345]# docker attach zhy
  42. [root@f1dff44fd34a datavolumeContainer2]# ls
  43. 1.rxr 2.txt
  44. //容器4继承容器3,但是3号容器被删除了,
  45. //但容器zhy2中新建的文件容器zhy4中也生成了,说明容器3,4之间虽然可以通过继承来创建
  46. //但容器2和容器4的数据共享也是互通的。
  47. [root@test 12345]# docker attach zhy4
  48. [root@d046741ebf31 datavolumeContainer2]# ls
  49. 1.rxr 2.txt

总结来说 ,容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止。