Open bingoogolapple opened 7 years ago
命名的容器挂载数据卷,其他容器通过挂载这个容器实现数据共享,挂载数据卷的容器就叫做数据卷容器,数据卷容器可以不用运行
删除上一节中的所有容器,-v 参数表示同时删除容器对应的数据卷
docker rm -v $(docker ps -aq)
使用上一节中的 bga/tv 镜像来创建一个数据卷容器,里面包含了 /datavolume1 和 /datavolume2,并向其中各写入一个文件
➜ ~ docker run -it --name datacenter bga/tv
root@e2d5dba1b85c:/# touch /datavolume1/datacenter
root@e2d5dba1b85c:/# touch /datavolume2/datacenter
创建 tv1 容器,通过 --volumes-from 参数挂载 datacenter 这个数据卷容器,能看到 datacenter 中创建的文件,然后再各创建一个文件
➜ ~ docker run -it --name tv1 --volumes-from datacenter bingoogolapple/bga-ubuntu
root@a0ceefd8fc00:/# ls /datavolume1/
datacenter
root@a0ceefd8fc00:/# ls /datavolume2/
datacenter
root@a0ceefd8fc00:/# touch /datavolume1/tv1
root@a0ceefd8fc00:/# touch /datavolume2/tv1
创建 tv1 容器,通过 --volumes-from 参数挂载 datacenter 这个数据卷容器,能看到 datacenter 和 tv1 中创建的文件
➜ ~ docker run -it --name tv2 --volumes-from datacenter bingoogolapple/bga-ubuntu
root@cb0fdd92b4a9:/# ls /datavolume1/
datacenter tv1
root@cb0fdd92b4a9:/# ls /datavolume2/
datacenter tv1
通过 docker inspect 命令也能够看到他们是用的是相同的数据卷。使用数据卷容器来挂载数据卷时,在 inspect 信息中并不会直接反应数据卷容器的信息,而是直接返回了数据卷容器所挂载的数据卷目录
➜ ~ docker inspect -f {{.Mounts}} tv1
[{1f6a659a3d0c0720b9509fc202077251b44065791f55e120389e4b7219935a67 /var/lib/docker/volumes/1f6a659a3d0c0720b9509fc202077251b44065791f55e120389e4b7219935a67/_data /datavolume1 local true } {645c26bb0c19dc718f1cd5c58259f07458e1e1953d631316a5a87acf9672ca2a /var/lib/docker/volumes/645c26bb0c19dc718f1cd5c58259f07458e1e1953d631316a5a87acf9672ca2a/_data /datavolume2 local true }]
➜ ~ docker inspect -f {{.Mounts}} tv2
[{1f6a659a3d0c0720b9509fc202077251b44065791f55e120389e4b7219935a67 /var/lib/docker/volumes/1f6a659a3d0c0720b9509fc202077251b44065791f55e120389e4b7219935a67/_data /datavolume1 local true } {645c26bb0c19dc718f1cd5c58259f07458e1e1953d631316a5a87acf9672ca2a /var/lib/docker/volumes/645c26bb0c19dc718f1cd5c58259f07458e1e1953d631316a5a87acf9672ca2a/_data /datavolume2 local true }]
➜ ~ docker inspect -f {{.Mounts}} datacenter
[{1f6a659a3d0c0720b9509fc202077251b44065791f55e120389e4b7219935a67 /var/lib/docker/volumes/1f6a659a3d0c0720b9509fc202077251b44065791f55e120389e4b7219935a67/_data /datavolume1 local true } {645c26bb0c19dc718f1cd5c58259f07458e1e1953d631316a5a87acf9672ca2a /var/lib/docker/volumes/645c26bb0c19dc718f1cd5c58259f07458e1e1953d631316a5a87acf9672ca2a/_data /datavolume2 local true }]
➜ ~ docker run -it --name datacenter bga/tv
root@15d11ad3931b:/# touch /datavolume1/tv1
root@15d11ad3931b:/# touch /datavolume1/tv2
root@15d11ad3931b:/# touch /datavolume1/tv3
root@15d11ad3931b:/# exit
exit
➜ ~ docker run -it --name tv2 --volumes-from datacenter bingoogolapple/bga-ubuntu
root@f021f5386c9a:/# touch /datavolume1/haha1
root@f021f5386c9a:/# touch /datavolume1/haha2
root@f021f5386c9a:/# exit
exit
➜ ~ docker run --volumes-from tv2 -v ~/backup:/backup --name backup bingoogolapple/bga-ubuntu tar cvf /backup/tv2.tar /datavolume1
tar: Removing leading `/' from member names
/datavolume1/
/datavolume1/tv2
/datavolume1/tv1
/datavolume1/tv3
/datavolume1/haha2
/datavolume1/haha1
➜ ~ ls backup
tv2.tar
➜ ~ sudo tar xvf backup/tv2.tar -C backup
datavolume1/
datavolume1/tv2
datavolume1/tv1
datavolume1/tv3
datavolume1/haha2
datavolume1/haha1
➜ ~ ls backup/datavolume1
haha1 haha2 tv1 tv2 tv3
➜ ~ ls ~/backup
tv2.tar
docker run --volumes-from tv2 -v ~/backup:/backup --name backup bingoogolapple/bga-ubuntu tar xvf /backup/tv2.tar -C /
datavolume1/
datavolume1/tv2
datavolume1/tv1
datavolume1/tv3
datavolume1/haha2
datavolume1/haha1
➜ ~ docker restart tv2
tv2
➜ ~ docker attach tv2
root@411d531e0646:/#
root@411d531e0646:/# ls /datavolume1/
haha1 haha2 tv1 tv2 tv3
基础知识