Docker的那些事儿—Docker数据卷(二)(30)


上一篇:Docker的那些事儿—Docker数据卷(一)(29)


本节继续讨论docker数据卷的相关操作。

Dockerfile中的VOLUME指令等价于docker run -v /data

上一节我们曾使用docker run -itd -P -v /data --name myhttp httpd的形式启动容器,运行的结果是docker在/var/lib/docker/volumes下自动创建了一个目录xxx,并将/var/lib/docker/volumes/xxx/_data目录挂载到了容器的/data目录。我们在前面学习Dockerfile的时候,知道有一个VOLUME指令。关于这个VOLUME指令的用法可以去查看:Dockerfile常用指令章节。我们简单的写个Dockerfile,然后build镜像,并使用新的镜像启动一个容器。


FROM httpd

VOLUME ["/data"]

CMD [“/bin/bash”]


新的镜像为httpd:v1.0,docker run启动时未使用-v选项

Docker的那些事儿—Docker数据卷(二)(30)_第1张图片

Docker仍然创建了卷:

bd3883a57997ee16365fac702e4915fb6a43c8175b67d42413e182f7cad5e820,并且将/var/lib/docker/volumes/bd3883a57997ee16365fac702e4915fb6a43c8175b67d42413e182f7cad5e820/_data挂载到了容器/data下。

Docker的那些事儿—Docker数据卷(二)(30)_第2张图片

docker container inspect 242cdd1fbfe4

Docker的那些事儿—Docker数据卷(二)(30)_第3张图片

这就是Dockerfile中VOLUME指令的作用。

docker run命令支持多个-v选项

例如:docker run -itd --rm -v my_volume1:/data1 -v my_volume2:/data2 --name myhttp httpd。其执行结果:

1、创建了两个本地卷my_volume1和my_volume2,可以使用docker volume ls查询。

2、分别将/var/lib/docker/volumes/my_volume1/_data和/var/lib/docker/volumes/my_volume2/_data挂载到容器的/data1和/data2目录。

Docker的那些事儿—Docker数据卷(二)(30)_第4张图片
Docker的那些事儿—Docker数据卷(二)(30)_第5张图片

同一个卷支持挂载到多个容器,实现多个容器的数据共享

例如:

docker run -itd --rm -v my_volume1:/data1 --name myhttp1 httpd

docker run -itd --rm -v my_volume1:/data2 --name myhttp2 httpd

Docker的那些事儿—Docker数据卷(二)(30)_第6张图片
Docker的那些事儿—Docker数据卷(二)(30)_第7张图片
Docker的那些事儿—Docker数据卷(二)(30)_第8张图片



下一篇:Docker的那些事儿—Docker数据卷容器(31)



Docker的那些事儿—Docker数据卷(二)(30)_第9张图片

你可能感兴趣的:(Docker的那些事儿—Docker数据卷(二)(30))