Docker 容器與 swarm 集羣實戰——docker 數據卷

一、docker 卷管理基礎

在這裏插入圖片描述
如果不加-v指定卷位置,默認創建

[root@server1 ~]# docker run -d --name registry -p 5000:5000 registry:2 
683706271b8f13781c0e4bfb83b3c2a73721215620dddd5ffddb4bd40597b8bf

此時inspect查看信息,會發現自己生成了一個長目錄
在這裏插入圖片描述
此時就算將容器刪除,但卷位置還存在
在這裏插入圖片描述

重新指定卷的位置並創建

[root@server1 ~]# docker run -d --name registry -p 5000:5000 -v /opt/registry:/var/lib/registry registry:2 
5241c43e57e0326681edcf0886ae980fcee3e99eb5a1ad02c265c566fe9a73cd

在這裏插入圖片描述
再次刪除,卷位置信息仍然存在
在這裏插入圖片描述
注意:如果掛載時,指向的是已經有的目錄,原有的數據會被複制到volume

1.將本機已經有的文件掛載到新打開的容器裏,以只讀的方式

[root@server1 registry]# docker run -it --name vm1 -v /etc/yum.repos.d/yum.repo:/yum.repo:ro ubuntu

在這裏插入圖片描述
在這裏插入圖片描述

二、convoy 卷插件的實現

支持三種運行方式:devicemapper、NFS、EBS

此處介紹NFS

1.在server1上安裝nfs-utils,開啓rpcbind服務

[root@server1 ~]# yum install -y nfs-utils
[root@server1 ~]# systemctl start rpcbind

2.編輯貢獻策略

[root@server1 ~]# vim /etc/exports
/mnt/nfs        *(rw,no_root_squash)

3.開啓nfs服務,創建共享目錄

[root@server1 ~]# systemctl start nfs
[root@server1 ~]# mkdir /mnt/nfs
[root@server1 ~]# exportfs -rv
exporting *:/mnt/nfs
[root@server1 ~]# showmount -e
Export list for server1:
/mnt/nfs *

4.在server2上安裝nfs-utils

[root@server2 ~]# yum install -y nfs-utils
[root@server2 ~]# systemctl start rpcbind
[root@server2 ~]# showmount -e server1
Export list for server1:
/mnt/nfs *

在啓動時,出現此問題
在這裏插入圖片描述
此處,選擇關閉後重新啓動無效果,kill掉進程,重新啓動,正常

5.進行掛載

[root@server2 ~]# mkdir /mnt/nfs
[root@server2 ~]# mount 172.25.254.1:/mnt/nfs/ /mnt/nfs/

在這裏插入圖片描述
6.獲得卷管理插件,解壓
在這裏插入圖片描述

[root@server1 ~]# tar zxf convoy.tar.gz 
[root@server1 ~]# ls
auth  certs  convoy  convoy.tar.gz  images
[root@server1 ~]# cd convoy/
[root@server1 convoy]# ls
convoy  convoy-pdata_tools  SHA1SUMS
[root@server1 convoy]# mv convoy* /usr/local/bin/
[root@server1 convoy]# mkdir /etc/docker/plugins/
[root@server1 convoy]# cd /etc/docker/plugins/
[root@server1 plugins]# ls
[root@server1 plugins]# echo "unix:///var/run/convoy/convoy.sock" > /etc/docker/plugins/convoy.spec
[root@server1 plugins]# cat /etc/docker/plugins/convoy.spec 
unix:///var/run/convoy/convoy.sock
[root@server1 plugins]# ls
convoy.spec
[root@server1 plugins]# convoy daemon --drivers vfs --driver-opts vfs.path=/mnt/nfs &>/dev/null &

7.創建卷
此時查看當前列表裏的卷
在這裏插入圖片描述

[root@server1 ~]# convoy create vol1
vol1

在這裏插入圖片描述
創建卷後會自動生成目錄
在這裏插入圖片描述
此時在server2端也可以查看到
在這裏插入圖片描述
在server2端也安裝convoy插件

[root@server2 ~]# tar zxf convoy.tar.gz 
[root@server2 ~]# cd convoy/
[root@server2 convoy]# ls
convoy  convoy-pdata_tools  SHA1SUMS
[root@server2 convoy]# mv convoy* /usr/local/bin/

但是此時在server2上列出時會報錯
在這裏插入圖片描述
解決:

[root@server2 ~]# convoy daemon --drivers vfs --driver-opts vfs.path=/mnt/nfs &>/dev/null &

在這裏插入圖片描述

在server2端創建目錄,將server1上的convoy.sock發送

[root@server2 ~]# mkdir /etc/docker/plugins
[root@server2 ~]# cd /etc/docker/plugins/

[root@server1 plugins]# scp convoy.spec server2:/etc/docker/plugins/
在這裏插入圖片描述
在這裏插入圖片描述

使用卷:
可以同時在兩臺機子同時運行容器,會發現數據目錄中的數據是同步的

環境清除
在這裏插入圖片描述

[root@server1 ~]# docker run -it --name vm1 -v vol1:/data --volume-driver=convoy ubuntu
root@214f6e10d973:/# cp /etc/* /data/

在這裏插入圖片描述
不關閉退出,此時在vol1目錄下可以查看到:
在這裏插入圖片描述
在server2端也能同步到信息:
在這裏插入圖片描述

在server2端運行容器
在這裏插入圖片描述

測試同步性:
在server1端將vm1連上,在server2端的vm1上,將信息作一些改變
[root@server1 ~]# docker attach vm1

在server2端刪除一點信息
在這裏插入圖片描述
此時在server1端可以查看到
在這裏插入圖片描述
在server1端創建一些信息
在這裏插入圖片描述
在server2端查看
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章