Docker基础<8>---数据卷及convoy卷插件

Docker数据卷管理
docker分层文件系统:
~性能差
~生命周期与容器相同
docker数据卷:
~mount到主机中,直接绕开docker分层文件系统
~和主机磁盘性能相同,容器删除后依然保留
~使用本地磁盘,不能随着容器迁移。

一、docker提供了两种卷:
实现跨主机连接
1、docker mount:

-v直接指定,docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名
这个命令会在宿主机和容器内分别建立两个目录,两个目录是对接的,里面的数据可以共享。

docker run -d --name vm1 -v /opt/website:/usr/share/nginx/html nginx
#/opt/website宿主机目录,/usr/share/nginx/html容器内路径
echo www.westos.org > index.html		#被挂载了发布页面,写进website相当于写在了挂载地
[root@server1 website]# curl 172.17.0.2
www.westos.org

在这里插入图片描述在这里插入图片描述
挂载之后,当容器停止运行的时候,宿主机上对数据卷做的内容修改的会同步到容器内的,我们再挂载的时候还可以给数据卷加上权限,假如我们要宿主机只能读取容器的数据卷内容不能修改,我们可以添加只读权限
docker run -it -v /宿主机绝对路径目录:/容器内目录 :ro 镜像名

2、docker managed volume:
bind mount必须指定host文件系统路径,限制了移植性。
docker managed volume不需要指定挂载源,docker自动为容器创建目录。
默认的创建目录在/var/lib/docker/volumes中。
如果挂载时指向容器内已有的目录,原有数据会复制到volume中。

(1).查看现有的管理卷,现在没有任何数据卷

docker volume ls		#查看
docker volume prune 		##全部清理	

在这里插入图片描述
(2).使用registry镜像创建一个新的容器

[root@server1 website]# docker history registry:latest
<missing>           2 months ago        /bin/sh -c #(nop)  VOLUME [/var/lib/registry]   0B 	#必须要有挂载点
[root@server1 website]# docker run -d --name registry registry:latest
[root@server1 website]# docker volume ls
DRIVER              VOLUME NAME
local               1bac14d3b609c57c8154d05f68c92e6d751f3f9958fd64d031be2f5457a0daaf
[root@server1 website]# cd /var/lib/docker/volumes/
[root@server1 volumes]# ls
1bac14d3b609c57c8154d05f68c92e6d751f3f9958fd64d031be2f5457a0daaf  metadata.db

在这里插入图片描述

我们会发现,docker自动生成的目录名称会很长,不方便书写使用。我们可以在创建容器时自己定义目录名称。

01).首先,需要先创建卷
docker volume create voll ##创建卷voll

02).创建新的容器并将管理卷voll挂载到容器内的指定目录
docker run -d --name registry2 -v voll:/var/lib/registry registry
在这里插入图片描述
Docker数据卷管理
如果想实现跨主机的容器之间的数据共享就要使用卷插件,使用了卷插件才可以使用网络文件系统实现数据共享。

》docker plugin是以web service的服务运行在每一台docker host上,通过http协议传输RPC风格的JSON数据完成通信。
》plugin的启动和停止,并不归Docker管理,docker daemon依靠在缺省路径下查找Unix Socket文件,自动发现可用的插件。
》当客户端与Daemon交互时,使用插件创建数据卷时,Daemon会在后端找到数据插件对应的socket文件,建立连接并发起相应的API请求,最终结合Daemon自身的处理完成客户端的请求。

convoy卷插件
convoy卷插件支持三种运行方式:devicemapper、NFS、EBS。我们下面的实验以nfs的运行方式来演示
实验前提:1.准备两台主机server1、server2,并安装好Dokcer服务

1、首先在server1和server2上搭建nfs文件系统
下载软件:https://github.com/rancher/convoy/releases/download/v0.5.0/convoy.tar.gz

server1:
yum install -y nfs-utils.x86_64				#安装
[root@server1 ~]# systemctl start rpcbind
[root@server1 ~]# mkdir /mnt/nfs
[root@server1 ~]# chmod 777 /mnt/nfs/
[root@server1 ~]# vim /etc/exports			#编辑共享目录文件,否则将不会被共享出去
[root@server1 ~]# cat /etc/exports
/mnt/nfs	*(rw,no_root_squash)
[root@server1 ~]# systemctl start nfs
[root@server1 ~]# exportfs -rv				#刷新

在这里插入图片描述

server2:
[root@server2 ~]# yum install -y nfs-utils
[root@server2 ~]# systemctl start rpcbind
[root@server2 ~]# systemctl start nfs
[root@server2 ~]# showmount -e 172.25.1.1
[root@server2 ~]# mount 172.25.1.1:/mnt/nfs/ /mnt/nfs/
[root@server2 ~]# systemctl start nfs-server.service
[root@server2 ~]# mkdir /mnt/nfs

2、配置convoy环境

server1/2:
[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 ~]# mkdir /etc/docker/plugins
[root@server1 ~]# convoy daemon --drivers vfs --driver-opts vfs.path=/mnt/nfs &> /dev/null &
[1] 20519
#第一次运行上面的convoy daemon命令的时候,会在/mnt/nfs目录下生成一个config文件,这个文件不能删除,否则客户端的convoy命令就用不了
[root@server1 ~]#echo "unix:///var/run/convoy/convoy.sock" > /etc/docker/plugins/convoy.spec
#将convoy守护进程开启生成的.sock文件放入/etc/docker/plugins目录下的convoy.spec文件中,dcoker就可以识别(其中convoy.spec文件之前是不存在的)

在这里插入图片描述
3、创建卷

convoy create voll1
[root@server1 nfs]# ll
total 4
drwx------ 2 root root 92 4月  10 23:57 config
-rw-r--r-- 1 root root 14 4月  11 00:05 file2
drwx------ 2 root root  6 4月  10 23:49 voll
drwx------ 2 root root  6 4月  10 23:51 voll1
drwx------ 2 root root  6 4月  10 23:57 voll2
[root@server2 nfs]# ll
total 4
drwx------ 2 root root 92 4月  10 23:57 config
-rw-r--r-- 1 root root 14 4月  11 00:05 file2
drwx------ 2 root root  6 4月  10 23:49 voll
drwx------ 2 root root  6 4月  10 23:51 voll1
drwx------ 2 root root  6 4月  10 23:57 voll2

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

[root@server1 nfs]# convoy list

在这里插入图片描述

4、操作卷
数据同步且删除卷也存在

[root@server1 nfs]# docker run -d --name vm1 -v voll1:/usr/share/nginx/html nginx
[root@server1 voll1]# echo www.westos.org > index.html
[root@server1 voll1]# curl 172.17.0.2
www.westos.org

在这里插入图片描述

[root@server2 voll1]# docker run -d --name vm1 -v voll1:/usr/share/nginx/html nginx
806a62bfaaafa9b5d38948112698755c535654a09d993cbaf7935246729652a2
[root@server2 voll1]# cat index.html 
www.westos.org
[root@server2 voll1]# curl 172.17.0.2
www.westos.org

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

[root@server1 nfs]# convoy snapshot create voll --name voll_pic
docker volume prune			#删除没有被使用的数据卷

在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值