咱们能够在建立容器时挂载使用同一个数据卷,两个容器同时对该数据卷具备读写权限,以下(为了更好地演示实验,我删除了全部容器):
【启动两个容器而且挂载同一个数据卷】docker
# 启动第一个容器,并设置主机名为 share-volume1 [root@docker-server ~]# docker run --name share-volume1 --hostname share-volume1 --rm -it -v /docker_data/share_dir:/data busybox:latest / # hostname # 往数据卷中写文件 share-volume1 / # while true;do echo "$(date) from $(hostname)" >> /data/file;sleep 0.5 ;done
# 启动第二个容器,并设置主机名为 share-volume2 [root@docker-server ~]# docker run --name share-volume2 --hostname share-volume2 --rm -it -v /docker_data/share_dir:/data busybox:latest / # hostname share-volume2 # 往数据卷中写文件 / # while true;do echo "$(date) from $(hostname)" >> /data/file;sleep 0.5 ;done
【在宿主机上查看文件的写入状况】学习
[root@docker-server ~]# tail -f /docker_data/share_dir/file Mon Oct 21 21:09:59 UTC 2019 from share-volume2 Mon Oct 21 21:10:00 UTC 2019 from share-volume2 Mon Oct 21 21:10:00 UTC 2019 from share-volume1 Mon Oct 21 21:10:00 UTC 2019 from share-volume2 Mon Oct 21 21:10:00 UTC 2019 from share-volume1 Mon Oct 21 21:10:01 UTC 2019 from share-volume2 Mon Oct 21 21:10:01 UTC 2019 from share-volume1 ... ...
能够看到两个容器与宿主机同时对数据卷具备读写权限。
【建立第一个使用数据卷的容器】code
[root@docker-server ~]# docker run --name volume-from-demo1 --hostname volume-from-demo1 --rm -it -v /docker_data/share_dir2:/data busybox:latest / # hostname volume-from-demo1 / # while true;do echo "$(date) from $(hostname)" >> /data/file;sleep 0.5 ;done
【基于第一个容器卷建立第二个容器】server
# 注意建立语法 [root@docker-server ~]# docker run --name volume-from-demo2 -it --hostname volume-from-demo2 --rm --volumes-from volume-from-demo1 busybox:latest / # hostname volume-from-demo2 # 读取与写入数据 / # tail -n 5 -f /data/file Mon Oct 21 21:40:33 UTC 2019 from volume-from-demo1 Mon Oct 21 21:40:34 UTC 2019 from volume-from-demo1 Mon Oct 21 21:40:34 UTC 2019 from volume-from-demo1 Mon Oct 21 21:40:35 UTC 2019 from volume-from-demo1 Mon Oct 21 21:40:35 UTC 2019 from volume-from-demo1 / # while true;do echo "$(date) from $(hostname)" >> /data/file;sleep 0.5 ;done
【宿主机查看数据写入状况】文档
[root@docker-server ~]# tail -f /docker_data/share_dir2/file Mon Oct 21 21:46:17 UTC 2019 from volume-from-demo1 Mon Oct 21 21:46:18 UTC 2019 from volume-from-demo2 Mon Oct 21 21:46:18 UTC 2019 from volume-from-demo1 Mon Oct 21 21:46:18 UTC 2019 from volume-from-demo2
那这两种方式有什么区别吗?咱们能够经过 docker inspect
来查看下 Mounts
信息,发现是同样的。官方文档并无像以前建立数据卷那样并列的给出两种或三种建立方式,只不过在某个知识点中有所说起,刚好两种方式均可以用来建立共享数据卷。以下是经过两种不一样的方式建立的四个容器,关于 Mounts
的信息。get
[root@docker-server ~]# docker inspect volume-from-demo2 "Mounts": [ { "Type": "bind", "Source": "/docker_data/share_dir2", "Destination": "/data", "Mode": "", "RW": true, "Propagation": "rprivate" } ],
[root@docker-server ~]# docker inspect volume-from-demo1 "Mounts": [ { "Type": "bind", "Source": "/docker_data/share_dir2", "Destination": "/data", "Mode": "", "RW": true, "Propagation": "rprivate" } ],
[root@docker-server ~]# docker inspect share-volume1 "Mounts": [ { "Type": "bind", "Source": "/docker_data/share_dir", "Destination": "/data", "Mode": "", "RW": true, "Propagation": "rprivate" } ],
[root@docker-server ~]# docker inspect share-volume2 "Mounts": [ { "Type": "bind", "Source": "/docker_data/share_dir", "Destination": "/data", "Mode": "", "RW": true, "Propagation": "rprivate" } ],
注:更多技术博客请关注 字节教育官网,若是在学习或者本身实验的过程当中遇到问题,及时与做者沟通。【QQ群 374106486】博客