docker容器的数据管理之二(数据卷容器)

在Docker的使用过程中往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,所以这就涉及到Docker容器的数据操作。 
容器中数据管理主要有两种方式:数据卷和数据卷容器。

数据卷(Data Volumes) ,是将容器内数据直接映射到本地宿主机。

数据卷容器(Data Volume Containers),则是使用特定容器来维护数据卷。

数据卷容器

命名的容器挂载数据卷,其他容器通过挂载这个父容器实现数据共享,挂载数据卷的这个容器称为数据卷容器。

1.启动dc01容器:docker run -it --name dc01 imageName

[root@izbp13m488196e5hna361rz ~]# docker run -it --name dc01 nick/centos 
[root@84db6b10578b /]# ls
bin  dataVolumeContainer1  dataVolumeContainer2  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

由于镜像nick/centos是通过dockerfile添加了数据卷,所以dc01中有dataVolumeContainer1和dataVolumeContainer2两个数据卷

2.启动dc02容器,继承自dc01:docker run -it --name dc02 --volumes-from dc01 imageName

启动dc03容器,继承自dc01:docker run -it --name dc03 --volumes-from dc01 imageName

[root@izbp13m488196e5hna361rz ~]# docker ps
CONTAINER ID   IMAGE         COMMAND                  CREATED         STATUS         PORTS     NAMES
4c5c595a66f1   nick/centos   "/bin/sh -c /bin/bash"   2 minutes ago   Up 2 minutes             dc03
14997363df5e   nick/centos   "/bin/sh -c /bin/bash"   2 minutes ago   Up 2 minutes             dc02
84db6b10578b   nick/centos   "/bin/sh -c /bin/bash"   9 minutes ago   Up 9 minutes             dc01
[root@izbp13m488196e5hna361rz ~]# docker exec -it 14997363df5e ls /
bin                   dev   lib         media  proc  sbin  tmp
dataVolumeContainer1  etc   lib64       mnt    root  srv   usr
dataVolumeContainer2  home  lost+found  opt    run   sys   var
[root@izbp13m488196e5hna361rz ~]# docker exec -it 84db6b10578b ls /
bin                   dev   lib         media  proc  sbin  tmp
dataVolumeContainer1  etc   lib64       mnt    root  srv   usr
dataVolumeContainer2  home  lost+found  opt    run   sys   var

可见,dc02和dc03由于继承了dc01,所以也有dataVolumeContainer1和dataVolumeContainer2两个数据卷。

3.在dc01、dc02、dc03的数据卷中随意修改其中一个,其余的两个都将同步

[root@izbp13m488196e5hna361rz ~]# docker ps
CONTAINER ID   IMAGE         COMMAND                  CREATED      STATUS          PORTS     NAMES
4c5c595a66f1   nick/centos   "/bin/sh -c /bin/bash"   2 days ago   Up 17 minutes             dc03
14997363df5e   nick/centos   "/bin/sh -c /bin/bash"   2 days ago   Up 17 minutes             dc02
84db6b10578b   nick/centos   "/bin/sh -c /bin/bash"   2 days ago   Up 18 minutes             dc01
[root@izbp13m488196e5hna361rz ~]# docker exec 4c5c595a66f1 touch /dataVolumeContainer2/dc03add
[root@izbp13m488196e5hna361rz ~]# docker exec 4c5c595a66f1 ls /dataVolumeContainer2/dc03add
/dataVolumeContainer2/dc03add
[root@izbp13m488196e5hna361rz ~]# docker exec 14997363df5e ls /dataVolumeContainer2/dc03add
/dataVolumeContainer2/dc03add
[root@izbp13m488196e5hna361rz ~]# docker exec 84db6b10578b ls /dataVolumeContainer2/dc03add
/dataVolumeContainer2/dc03add

4.删除dc01后,修改dc02,dc03还是同步dc02

[root@izbp13m488196e5hna361rz ~]# docker ps
CONTAINER ID   IMAGE         COMMAND                  CREATED      STATUS          PORTS     NAMES
4c5c595a66f1   nick/centos   "/bin/sh -c /bin/bash"   2 days ago   Up 23 minutes             dc03
14997363df5e   nick/centos   "/bin/sh -c /bin/bash"   2 days ago   Up 23 minutes             dc02
84db6b10578b   nick/centos   "/bin/sh -c /bin/bash"   2 days ago   Up 23 minutes             dc01
[root@izbp13m488196e5hna361rz ~]# docker rm -f 84db6b10578b
84db6b10578b
[root@izbp13m488196e5hna361rz ~]# docker exec -it 14997363df5e touch /dataVolumeContainer1/dc02add
[root@izbp13m488196e5hna361rz ~]# docker exec -it 14997363df5e ls /dataVolumeContainer1/dc02add
/dataVolumeContainer1/dc02add
[root@izbp13m488196e5hna361rz ~]# docker exec -it 4c5c595a66f1 ls /dataVolumeContainer1/dc02add
/dataVolumeContainer1/dc02add

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

原文地址:https://www.cnblogs.com/xulan0922/p/14339863.html