docker数据卷:数据卷管理和convoy卷插件

一、 docker数据卷管理

1. 为什么要用数据卷

在这里插入图片描述

2. docker提供两种卷

在这里插入图片描述

[root@server1 ~]# docker network prune 将不用的网络清除掉
[root@server1 ~]# docker run -d --name vm1 -v /opt/website:/usr/share/nginx/html nginx
56cb4e323a20c34dbd36b23d73647e7f83324f5bad83752796e6c91e724f0cf9

[root@server1 website]# curl 172.17.0.2
/opt/website

在这里插入图片描述
在这里插入图片描述

[root@server1 docker]# docker run -d --name registry registry
fc4dd2676bc25ad2db56daf04b867f332383295ec3cc82cd84dd65d5f2cd1d2f

[root@server1 volumes]# ls
b3d8a5831c678f8bd94d72f59ed76adb41c3f7c701e8767cb1a890ae66ef7986  metadata.db

通过docker volume可以将容器内的内容复制到挂载点
[root@server1 _data]# docker run -d --name vm2 -v /usr/share/nginx/html nginx
e6941d7e4ec13979bb10a62a31c707bed2f981d51f99cabf370fc772259c6fa3
[root@server1 3117caa56a6c78ac79f7b94ed441ce19d08b5ffd69cd0bd22ef1189b017c3eae]# cd _data/
[root@server1 _data]# ls
50x.html  index.html

3. bind mount 和docker managed volume对比

相同点:两者都是host文件系统中的某个路径

不同点:
在这里插入图片描述

二、卷插件简介

在这里插入图片描述
在这里插入图片描述

三、convoy卷插件

1. 支持三种运行方式:devicemapper,NFS,EBS。

以下实验使用nfs的方式。
下载软件:
https://github.com/rancher/convoy/releases/download/v0.5.0/convoy.tar.gz
在所有节点提前挂载NFS存储

2. convoy卷插件安装
[root@server1 ~]# yum install -y nfs-utils
[root@server2 ~]# yum install -y nfs-utils

[root@server1 ~]# systemctl start rpcbind
[root@server2 ~]# systemctl start rpcbind

同步nfs
[root@server1 ~]# cat /etc/exports
/nfs 	*(rw)
[root@server1 ~]# systemctl start nfs
[root@server1 ~]# showmount -e
Export list for server1:
/nfs *
[root@server1 /]# mkdir /nfs

[root@server2 ~]# mkdir /nfs
[root@server2 ~]# showmount -e server1
Export list for server1:
/nfs *
[root@server2 ~]# mount 172.25.60.1:/nfs/ /nfs/
[root@server2 ~]# df
Filesystem            1K-blocks    Used Available Use% Mounted on
172.25.60.1:/nfs       17811456 2572160  15239296  15% /nfs

[root@server1 /]# cat /etc/exports  因为server2使用的时nfsnobody的身份,无法操作nfs挂载目录中的数据,所以将其改为no_root_squash
/nfs 	*(rw,no_root_squash)  
[root@server1 /]# exportfs -rv
exporting *:/nfs

server2可以读写nfs挂载点
[root@server1 /]# cd /nfs/
[root@server1 nfs]# echo hello > test
[root@server2 ~]# cd /nfs/
[root@server2 nfs]# ls
test
[root@server2 nfs]# rm -fr test

docker通过卷插件(plugins)访问nfs
[root@server1 ~]# tar zxf convoy.tar.gz 
[root@server1 ~]# cd convoy/
[root@server1 convoy]# ls
convoy  convoy-pdata_tools  SHA1SUMS
[root@server1 convoy]# mv * /usr/local/bin/
[root@server1 ~]# which convoy
/usr/local/bin/convoy

[root@server2 ~]# tar -vzxf convoy.tar.gz 
convoy/
convoy/convoy-pdata_tools
convoy/convoy
convoy/SHA1SUMS
[root@server2 ~]# cd convoy/
[root@server2 convoy]# mv * /usr/local/bin/
[root@server2 convoy]# which convoy
/usr/local/bin/convoy
[root@server1 ~]# mkdir -p /etc/docker/plugins/  
/etc/docker时docker缺省的一个扫描路径
[root@server2 convoy]# mkdir -p /etc/docker/plugins/

将convoy打入后台
[root@server1 ~]# convoy daemon --drivers vfs --driver-opts vfs.path=/nfs &

[root@server1 nfs]# ll /run/convoy/convoy.sock 
srwxr-xr-x 1 root root 0 Apr  9 22:21 /run/convoy/convoy.sock

[root@server1 nfs]# echo "unix:///var/run/convoy/convoy.sock" > /etc/docker/plugins/convoy.spec

[root@server2 convoy]# convoy daemon --drivers vfs --driver-opts vfs.path=/nfs &
[root@server2 convoy]# ll /run/convoy/convoy.sock
srwxr-xr-x 1 root root 0 Apr  9 22:26 /run/convoy/convoy.sock
[root@server2 convoy]# echo "unix:///var/run/convoy/convoy.sock" > /etc/docker/plugins/convoy.spec

创建卷
[root@server1 nfs]# convoy create vol1
[root@server1 nfs]# ls
config  vol1

[root@server1 nfs]# convoy list
{
	"vol1": {
		"Name": "vol1",
		"Driver": "vfs",
		"MountPoint": "",
		"CreatedTime": "Thu Apr 09 22:29:04 +0800 2020",
		"DriverInfo": {
			"Driver": "vfs",
			"MountPoint": "",
			"Path": "/nfs/vol1",
			"PrepareForVM": "false",
			"Size": "0",
			"VolumeCreatedAt": "Thu Apr 09 22:29:04 +0800 2020",
			"VolumeName": "vol1"
		},
		"Snapshots": {}
	}
}

[root@server1 nfs]# docker run -d --name vm1 -v vol1:/usr/share/nginx/html nginx
[root@server1 nfs]# ls vol1/
50x.html  index.html

[root@server2 ~]# ls /nfs/vol1/
50x.html  index.html

容器可以销毁但是原来的数据保存在nfx中
[root@server1 nfs]# docker rm -f vm1
[root@server1 nfs]# ls vol1/
50x.html  index.html

数据同步过程:

docker engine --- /etc/docker/plugins/convoy.spec --- /run/convoy/convoy.sock ---api ---vol1 --- server2(同步到其它的节点)
删除卷
[root@server2 ~]# convoy delete vol1

[root@server2 ~]# mv /etc/docker/plugins/convoy.spec /mnt/ 或者直接删掉plugins

kill (convoy服务)
[root@server1 docker]# systemctl daemon-reload 
[root@server2 ~]# systemctl restart docker

docker默认创建的volume在/var/lib/docker/volumes/[root@server2 ~]# docker volume create vol1
vol1
[root@server2 ~]# ls /var/lib/docker/volumes/
metadata.db  vol1

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值