企业级微服务实战(九)

Docker 存储剖析与实战 2

3. 数据卷的共享

3.1 多个容器使用同一个数据卷

咱们能够在建立容器时挂载使用同一个数据卷,两个容器同时对该数据卷具备读写权限,以下(为了更好地演示实验,我删除了全部容器):
启动两个容器而且挂载同一个数据卷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
... ...
能够看到两个容器与宿主机同时对数据卷具备读写权限。
3.2 经过 --volumes-from 参数建立容器共享存储

建立第一个使用数据卷的容器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博客

相关文章
相关标签/搜索