一、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端查看