docker卷默认使用的是local类型的驱动,只能存在宿主机,跨主机操作时,需要第三方驱动,官方连接为:https://docs.docker.com/engine/extend/legacy_plugins/
对于两台不同主机间容器的数据卷操作,官方提供了API接口,开发者可以根据实际需求进行定制卷插件驱动。
工作过程:
![](https://i-blog.csdnimg.cn/blog_migrate/d5c44c7d5f8be19ff6745afcd746ec48.png)
【说明】plugin的启动和停止,并不依赖于docker,docker 依靠在默认路径下查找unix socket文件来自动发现插件。当客户端与docker交互并使用插件创将数据卷时,docker会在后端找到插件对应的 socket文件,建立连接并发起相应的API请求,最终结合daemon自身的处理完成客户端请求。
Convoy插件使用:
convoy卷插件底层存储支持三种模式:devicemapper、NFS、EBS(亚马逊的弹性化存储),需要在所有docker节点提前挂载NFS存储。
挂载NFS:
##挂载NFS
/server1
[root@server1 ~]# mkdir /mnt/nfs
[root@server1 ~]# yum install -y nfs-utils
[root@server1 ~]# systemctl start rpcbind ##rpcbind工具可以将RPC程序号码和通用地址互相转换
[root@server1 ~]# vim /etc/exports ##共享配置文件
/mnt/nfs *(rw,no_root_squash)
[root@server1 ~]# systemctl start nfs
[root@server1 ~]# exportfs -rv ##共享文件生效
/server2
[root@docker nfs]# mkdir /mnt/nfs
[root@docker nfs]# yum install -y nfs-utils
[root@docker nfs]# systemctl start rpcbind
[root@docker nfs]# showmount -e 192.168.43.71 ##客户端查看服务器列表
[root@docker nfs]# mount 192.168.43.71:/mnt/nfs /mnt/nfs
![](https://i-blog.csdnimg.cn/blog_migrate/e02baaaaf00dee3170b2d884f152308f.png)
![](https://i-blog.csdnimg.cn/blog_migrate/1987eceea70611b937ee688de967a8c7.png)
![](https://i-blog.csdnimg.cn/blog_migrate/618080e36c8bfaf0f442266a31977ee7.png)
![](https://i-blog.csdnimg.cn/blog_migrate/24572805a8c02a24c51ba7c522b90c89.png)
配置Convoy:
##配置convoy
server1/
[root@server1 nfs]# wget https://github.com/rancher/convoy/releases/download/v0.5.2/convoy.tar.gz
[root@server1 nfs]# tar zxf convoy.tar.gz
[root@server1 nfs]# mv convoy/convoy* /usr/local/bin
[root@server1 nfs]# convoy daemon --drivers vfs --driver-opts vfs.path=/mnt/nfs &
##指定convoy使用的驱动和路径
[root@server1 nfs]# mkdir -p /etc/docker/plugins/
[root@server1 nfs]# echo "unix:///var/run/convoy/convoy.sock" > /etc/docker/plugins/convoy.spec
[root@server1 nfs]# convoy create vol1
server2/
[root@server2 nfs]# wget https://github.com/rancher/convoy/releases/download/v0.5.2/convoy.tar.gz
[root@server2 nfs]# tar zxf convoy.tar.gz
[root@server2 nfs]# mv convoy/convoy* /usr/local/bin
[root@server2 nfs]# convoy daemon --drivers vfs --driver-opts vfs.path=/mnt/nfs &
[root@server2 nfs]# mkdir -p /etc/docker/plugins/
[root@server2 nfs]# echo "unix:///var/run/convoy/convoy.sock" > /etc/docker/plugins/convoy.spec
![](https://i-blog.csdnimg.cn/blog_migrate/69b03adda17f20398df9027a39674605.png)
![](https://i-blog.csdnimg.cn/blog_migrate/3b54d5da36592cba81d581de03af7250.png)
创建卷:
//server1//
###创建卷
[root@server1 nfs]# convoy create vol1
##查看挂载的卷信息
[root@server1 nfs]# convoy list
##使用卷对容器进行挂载
[root@server1 nfs]# docker run -d --name demo -v vol1:/usr/share/nginx/html nginx
##更改卷内信息
[root@server1 vol1]# echo TEST PAGE > index.html
server2///
###查看是否创建
[root@server2 ~]# cd /etc/nfs/
[root@server2 nfs]# ls
###查看server1上件内容更改后,serve2中是否发生变化
[root@server2 ~]# cat /etc/nfs/index.html
![](https://i-blog.csdnimg.cn/blog_migrate/27c200f55b9f319366d1b817f1f0718e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c9ec29c75a1c625f17e02fb8e50c51dd.png)
![](https://i-blog.csdnimg.cn/blog_migrate/53fe2d149dfe436895a291af574f7363.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e219adf1ad3d7d816402eb94779cbb5c.png)
【说明】跨主机的卷同步就是通过,nfs的消息传递,使不同主机之间的卷内容相同,故当其中一台主机宕机时,也可以通过其他主机来进行恢复。
convoy的其他命令:
convoy卷插件子命令
convoy list 列出卷
convoy delete 删除卷
convoy snapshot create 创建快照
convoy snapshot delete 删除快照
convoy backup create 创建备份
convoy create res1 --backup <url> 还原备份