Docker 容器与 swarm 集群实战——docker 数据卷

一、docker 卷管理基础

Docker 容器与 swarm 集群实战——docker 数据卷_第1张图片
如果不加-v指定卷位置,默认创建

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

此时inspect查看信息,会发现自己生成了一个长目录
Docker 容器与 swarm 集群实战——docker 数据卷_第2张图片
此时就算将容器删除,但卷位置还存在
Docker 容器与 swarm 集群实战——docker 数据卷_第3张图片

重新指定卷的位置并创建

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

Docker 容器与 swarm 集群实战——docker 数据卷_第4张图片
再次删除,卷位置信息仍然存在
在这里插入图片描述
注意:如果挂载时,指向的是已经有的目录,原有的数据会被复制到volume

1.将本机已经有的文件挂载到新打开的容器里,以只读的方式

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

Docker 容器与 swarm 集群实战——docker 数据卷_第5张图片
Docker 容器与 swarm 集群实战——docker 数据卷_第6张图片

二、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/

Docker 容器与 swarm 集群实战——docker 数据卷_第7张图片
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

Docker 容器与 swarm 集群实战——docker 数据卷_第8张图片
创建卷后会自动生成目录
在这里插入图片描述
此时在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上列出时会报错
Docker 容器与 swarm 集群实战——docker 数据卷_第9张图片
解决:

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

Docker 容器与 swarm 集群实战——docker 数据卷_第10张图片

在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/
在这里插入图片描述
Docker 容器与 swarm 集群实战——docker 数据卷_第11张图片

使用卷:
可以同时在两台机子同时运行容器,会发现数据目录中的数据是同步的

环境清除
Docker 容器与 swarm 集群实战——docker 数据卷_第12张图片

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

Docker 容器与 swarm 集群实战——docker 数据卷_第13张图片
不关闭退出,此时在vol1目录下可以查看到:
Docker 容器与 swarm 集群实战——docker 数据卷_第14张图片
在server2端也能同步到信息:
Docker 容器与 swarm 集群实战——docker 数据卷_第15张图片

在server2端运行容器
Docker 容器与 swarm 集群实战——docker 数据卷_第16张图片

测试同步性:
在server1端将vm1连上,在server2端的vm1上,将信息作一些改变
[root@server1 ~]# docker attach vm1

在server2端删除一点信息
在这里插入图片描述
此时在server1端可以查看到
在这里插入图片描述
在server1端创建一些信息
在这里插入图片描述
在server2端查看
在这里插入图片描述

你可能感兴趣的:(企业)