Docker数据卷--docker提供的两种卷、convoy卷插件

Docker数据卷–docker提供的两种卷、convoy卷插件

一、前言

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

二、docker提供的两种卷

1.bind mount

bind mount是将主机上的目录或文件mount到容器里。它使用直观高效,易于理解。 使用 -v 选项指定路径,格式 :

bind mount 默认权限是读写rw,可以在挂载时指定只读ro。 -v选项指定的路径,如果不存在,挂载时会自动创建。

由于在容器中的目录中删除文件,对应的宿主机的挂载目录中的文件也会被删除,所以我们在挂载的时候赋予该目录只读权限:

[root@server1 ~]# docker run -d --name demo -v /webdata:/usr/share/nginx/html nginx
7332b81791abc0a5e5f19fd2f43b07ba57c2086b0d5643c7725095207a43b2dc
[root@server1 ~]# cd /var/lib/docker/volumes/webdata/_data/
[root@server1 _data]# ls  ##没有发现nginx发布文件,已经被覆盖
[root@server1 _data]# pwd
/var/lib/docker/volumes/webdata/_data

2.docker managed volume

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

[root@server1 ~]# docker run -d --name demo -v /usr/share/nginx/html nginx
634648bdadb747f50f755b6fc55993b5cc05ccb43ea6ceb9c859181c20d6bf94
[root@server1 ~]# docker  inspect  demo

请添加图片描述

[root@server1 ~]# cd /var/lib/docker/volumes/2f36b96ab6edad0d6a64ccc752c52a947e1dc4c42961ca567976b480ce05df45/_data
[root@server1 _data]# ls
50x.html  index.html
[root@server1 _data]# cat index.html 

请添加图片描述当我们给bind mount 模式挂载时加上ro可以防止覆盖原来的内容,但只能读取

[root@server1 ~]# docker run -d --name demo -v webdata:/usr/share/nginx/html nginx
4f873ea2af75939172aeaa74854785133ae6849100fa8851cd54dcebc4df2989
[root@server1 ~]# docker run  -it --rm -v /etc/yum.repos.d/westos.repo:/etc/yum.repos.d/westos.repo:ro rhel7 bash

请添加图片描述

三、卷插件简介

docker卷默认使用的是local类型的驱动,只能存在宿主机,跨主机的volume就需要使用第三方的驱动,docker官方只提供了卷插件的api,开发者可以根据实际需求定制卷插件驱动

  • 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。

4.1NFS模式(linux系统支持)

server1:服务端

[root@server1 ~]# yum install -y nfs-utils.x86_64 ##安装nfs组件

请添加图片描述

4.1建立挂载目录,并修改相应配置文件

[root@server1 ~]# mkdir /mnt/nfs #挂载目录
[root@server1 ~]# vim /etc/exports
/nfsdata        *(rw,no_root_squash)
[root@server1 ~]# chmod 777 /mnt/nfs #修改执行权限
[root@server1 ~]# systemctl enable --now nfs ##立刻开机自启
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.

4.2 convoy卷插件安装

[root@server1 ~]# tar zxf convoy.tar.gz
[root@server1 ~]# cd convoy/
[root@server1 convoy]# ls
convoy  convoy-pdata_tools  SHA1SUMS
root@server1 convoy]# mkdir -p /etc/docker/plugins/   ##此目录下村存放sock的路径
[root@server1 convoy]# cp convoy convoy-pdata_tools /usr/local/bin/  ## 
[root@server1 convoy]# convoy daemon --drivers vfs --driver-opts vfs.path=/mnt/nfs &  ## 启动插件,打入后台
[root@server1 convoy]# echo "unix:///var/run/convoy/convoy.sock" > /etc/docker/plugins/convoy.spec ## 指定sock的路径,使得docke调用的时候可以检索到

请添加图片描述

4.3创建卷

[root@server1 convoy]# convoy create vol1  ##自动生成 /mnt/nfs/vol1
[root@server1 convoy]# convoy list # 查看信息

请添加图片描述

4.4.使用卷

[root@server1 convoy]# docker run -it --name demo -v vol1:/usr/share/nginx/html --volume-driver convoy nginx ##

请添加图片描述

[root@server1 vol1]# docker inspect demo

请添加图片描述

[root@server1 vol1]# curl 172.17.0.2  
Welcome to nginx  ##此页面需在nginx的发布页面编辑

server2:服务端

[root@server1 ~]# yum install -y nfs-utils.x86_64 ##安装nfs组件
[root@server2 ~]# mkdir /mnt/nfs ##建立挂载点
[root@server2 ~]# mount 172.25.6.1:/mnt/nfs /mnt/nfs #挂载
[root@server2 ~]# df
172.25.6.1:/mnt/nfs    28289792 6568704  21721088  24% /mnt/nfs

请添加图片描述convoy卷插件安装的步骤同server1,创建卷,使用卷的方式相同

[root@server2 plugins]# docker run -d --name demo -v vol1:/usr/share/nginx/html --volume-driver=convoy nginx
[root@server2 plugins]# curl 172.17.0.2
 Welcome to nginx

注:两个主机上同时运行容器,其数据目录中的数据是同步的;同时两台主机可互为备份
例:将server1上的demo镜像删除掉

[root@server1 vol1]# docker rm -f demo                ##做故障迁移
[root@server2 vol1]# docker run -d --name demo -v vol1:/usr/share/nginx/html  nginx
[root@server2 vol1]# curl 172.17.0.2
www.westos.org
[root@server2 vol1]#docker volume ls

请添加图片描述

五、数据卷的清除

server1于server2清除方式相同,直接 docker delete volu1会出现卡盾(可以成功),所以采取新的措施

5.1.干掉进程,防止数据卷时系统卡顿

[root@server2 vol1]# ps ax  ##进程查看

请添加图片描述

[root@server2 vol1]# kill -9 4578 ##干掉进程

5.2.进入输入卷储存目录,删除数据卷

[root@server2 vol1]# cd /var/lib/docker/volumes/
[root@server2 volumes]# ls
metadata.db
[root@server2 volumes]# rm -f metadata.db

5.2.进入plugins目录,删除放置的插件

[root@server2 volumes]# cd /etc/docker/
[root@server2 docker]# ls
certs.d  daemon.json  key.json  plugins
[root@server2 docker]# cd plugins/
[root@server2 plugins]# ls
convoy.spec
[root@server2 plugins]# rm -f convoy.spec 
[root@server2 plugins]# systemctl restart docker.service ##重启生效
[root@server2 plugins]# docker volume ls ##查看效果(成功)
DRIVER              VOLUME NAME
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值