企業級微服務實戰(九)

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博客

相關文章
相關標籤/搜索