Docker(七)--Docker数据卷-数据卷管理与卷插件

1.DOCKER数据卷管理

- 为什么要用数据卷
	docker分层文件系统
	性能差
	生命周期与容器相同
	docker数据卷
	mount到主机中,绕开分层文件系统
	和主机磁盘性能相同,容器删除后依然保留
	仅限本地磁盘,不能随容器迁移
- docker提供了两种卷:
	bind mount
	docker managed volume

 1.1 bind mount

- 是将主机上的目录或文件mount到容器里。
	使用直观高效,易于理解。
	使用 -v 选项指定路径,格式 <host path>:<container path>
	
 
- bind mount 默认权限是读写rw,可以在挂载时指定只读ro。
	-v选项指定的路径,如果不存在,挂载时会自动创建。

 

[root@server2 ~]# docker run -it --rm -v /data1:/data1 -v /data2:/data2:ro -v /etc/yum.repos.d/dvd.repo:dvd.repo:ro busybox
 
##测试语句

 

 

 

1.2 docker managed volume 

 

-   bind mount必须指定host文件系统路径,限制了移植性。
	docker managed volume 不需要指定mount源,docker自动为容器创建数据卷目录。
	默认创建的数据卷目录都在 /var/lib/docker/volumes 中。
	如果挂载时指向容器内已有的目录,原有数据会被复制到volume中。
 
-  -v 后面的,前面是宿主机上的指定的卷名,后面的是容器的目录
- -v 主机路径:容器路径

 

 

 

修改index.html文件结果也会同步  

 

 

1.3 bind mount与docker managed volume对比

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

 不同点:

2.卷插件 

 2.1 卷插件简介

 

- docker 卷默认使用的是local类型的驱动,只能存在宿主机,跨主机的volume就需要使用第三方的驱动,可以查看以下链接:
	https://docs.docker.com/engine/extend/legacy_plugins/#volume-plugins	 
- docker官方只提供了卷插件的api,开发者可以根据实际需求定制卷插件驱动。
	https://docs.docker.com/engine/extend/plugins_volume/#volume-plugin-protocol
 
- 	Docker Plugin 是以Web Service的服务运行在每一台Docker Host上的,
- 通过HTTP协议传输RPC风格的JSON数据完成通信。
- 
- 	Plugin的启动和停止,并不归Docker管理,Docker Daemon依靠在缺省路径下
- 查找Unix Socket文件,自动发现可用的插件。
- 
- 	当客户端与Daemon交互,使用插件创建数据卷时,Daemon会在后端找到插件对应
- 的 socket 文件,建立连接并发起相应的API请求,最终结合Daemon自身的处理
- 完成客户端的请求。

 

2.2 convoy卷插件

注:
重做convoy,需要把/var/lib/rancher/convoy目录下的内容清空

2.2.1 释放没用的volume、清理环境

 

 

2.2.2 安装nfs并测试挂载是否同步 

 

##server1上的
[root@server1 ~]# yum install -t nfs-utils.x86_64 
[root@server1 ~]# vim /etc/exports
[root@server1 ~]# cat /etc/exports
/nfsdata	*(rw,no_root_squash)
 
[root@server1 ~]# systemctl enable --now nfs
[root@server1 ~]# showmount  -e 
Export list for server1:
/nfsdata *
 
[root@server1 ~]# mkdir /mnt/nfs
[root@server1 ~]# chmod 777 /mnt/nfs
[root@server1 ~]# ll -d /mnt/nfs
drwxrwxrwx 2 root root 6 Jan 27 16:46 /mnt/nfs
 
 
## server2
[root@server2 ~]# showmount  -e 172.25.70.1
Export list for 172.25.70.1:
/nfsdata *
[root@server2 ~]# mkdir /nfsdata
[root@server2 ~]# mount 172.25.26.1:/mnt/nfs /mnt/nfs
[root@server2 ~]# ll -d /nfsdata/
drwxrwxrwx 2 root root 6 Jan 27 16:46 /mnt/nfs
[root@server2 ~]# cd /mnt/nfs
[root@server2 nfsdata]# touch file1
[root@server2 nfsdata]# ls
file1
 
## server1上
[root@server1 ~]# cd /data/
[root@server1 nfsdata]# ls   ##显示server2上创建的file1
file1

 

 

 

 

2.2.3 创建convoy卷 

[root@server1 ~]# convoy create vol1   ##创建卷
[root@server1 ~]# convoy list 
 
[root@server2 ~]# cd /nfsdata/
[root@server2 nfsdata]# ls
col1  config
[root@server2 nfsdata]# convoy list

 

 

 

 

 

2.2.4 部署convoy 

- convoy卷插件实现
	支持三种运行方式:devicemapper、NFS、EBS。
	以下实验使用nfs方式。
	下载软件:
	        https://github.com/rancher/convoy/releases/download/v0.5.0/
	        convoy.tar.gz
	在所有节点提前挂载NFS存储。
 
- convoy卷插件安装:
	yum install -y nfs-utils
	systemctl start rpcbind
	mkdir /mnt/nfs
	mount 172.25.13.1:/mnt/nfs /mnt/nfs
	tar zxf convoy.tar.gz
	cp convoy/convoy convoy/convoy-pdata_tools /usr/local/bin/
	mkdir -p /etc/docker/plugins/
	echo "unix:///var/run/convoy/convoy.sock" > /etc/docker/plugins/convoy.spec  ##没有这个文件,表示convoy服务没有启动
	convoy daemon --drivers vfs --driver-opts vfs.path=/nfsdata &  ##这个目录自己定
 
- 创建卷:
	convoy create vol1
	自动生成数据目录:/nfsdata/vol1/	
- 使用卷:
	docker run -it --name demo -v vol1:/data --volume-driver=convoy busybox
	可以在两个主机上同时运行容器,会发现数据目录中的数据是同步的。
 
##测试
[root@server2 ~]# docker run -d -v vol1:/data   busybox

 

 

 

2.3 解除同步 

解除之后会出现卡顿
需将/var/lib/docker/volume/的配置文件删除
systemctl restart docker

 

 2.4. convoy卷插件子命令 

	convoy list		列出卷
	convoy delete		删除卷
	convoy snapshot create	创建快照
	convoy snapshot delete	删除快照
	convoy backup create		创建备份
	convoy create res1 --backup <url>		还原备份
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值