Docker容器数据卷管理器及其插件

docker数据卷管理
docker挂载管理中docker mount必须指定host文件系统路径,而docker managed volume不需要指定mount源。
1.直接运行容器会自己生成挂载点
在这里插入图片描述
查看挂载点
[root@server1 ~]# docker inspect registry##获取容器信息
在这里插入图片描述 “Source”: "/var/lib/docker/volumes/30e7495235ece5a0c32132c929348879ca1d6aff3f7200d9dd02f64c56f5adad/_data"为volume在宿主机上的目录。是启动容器时系统自己建立的。

进入该目录
在这里插入图片描述
这样我么会发现,系统自己生成的挂载点实在是太长了,不便于我们的进入和查看,所以我们可以自己指定挂载点。

2.容器运行时指定挂载点
[root@server1 ~]# docker run -d --name registry -v registry:/var/lib/vm1 registry:2
[root@server1 ~]# docker inspect registry
在这里插入图片描述
在这里插入图片描述

3.只读挂载
创建容器挂载点
[root@server1 ~]# docker volume create vol1
vol1
[root@server1 ~]# docker volume create vol2
vol2
普通挂载
[root@server1 ~]# docker run -d --name registry -v vol1:/var/lib/registry registry:2
只读挂载
[root@server1 ~]# docker run -it --name vm2 -v vol2:/data ubuntu
在这里插入图片描述

bind mount 与docker managed volume对比
相同点:两者都是host文件系统中的某路径
不同点:
在这里插入图片描述

卷插件简介及使用

  • 卷插件简介

coker卷默认使用的是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数据完成通信。
Pliugin的启动和停止,并不归Docker管理,DOcker Daemon依靠在缺省路径下查找Unix Socket文件,建立连接并发起相应的API请求,最终结合Daemon自身的处理完成客户端的请求。

  • convoy插件
    covery卷插件实现
    支持三种运行方式:devicemapper,NFS,EBS。
    以下实验使用nfs方式
    在所有节点提前挂在NFS存储。
  • server1与server2建立nfs连接

server1配置:
[root@server1 ~]# yum insall -y nfs-utils
[root@server1 ~]# mkdir /mnt/nfs
[root@server1 ~]# vi /etc/exports
[root@server1 ~]# cat /etc/exports
/mnt/nfs *(rw,no_root_squash)
[root@server1 ~]# ll -d /mnt/nfs
drwxr-xr-x 2 root root 6 Aug 6 09:24 /mnt/nfs
[root@server1 ~]# systemctl start rpcbind
[root@server1 ~]# systemctl start nfs
[root@server1 ~]# showmount -e
Export list for server1:
/mnt/nfs *

server2配置:
[root@server2 ~]# yum install -y nfs-utils.x86_64
[root@server2 ~]# systemctl start rpcbind
[root@server2 ~]# systemctl enable rpcbind
[root@server2 ~]# showmount -e server1
Export list for server1:
/mnt/nfs *
[root@server2 ~]# mkdir -p /mnt/nfs
[root@server2 ~]# mount 172.25.32.1:/mnt/nfs/ /mnt/nfs

  • 解压covery包并在节点添加插件
    server1端:
    [root@server1 ~]# tar zxf convoy.tar.gz
    [root@server1 ~]# cd convoy/
    [root@server1 convoy]# ls
    convoy convoy-pdata_tools SHA1SUMS
    [root@server1 convoy]# cp convoy convoy-pdata_tools /usr/local/bin##配置环境变量
    [root@server1 convoy]# mkdir /etc/docker/plugins
    [root@server1 convoy]# cd /etc/docker/plugins
    [root@server1 plugins]# echo “unix:///var/run/convoy/convoy.sock” > /etc/docker/plugins/convoy.spec
    [root@server1 plugins]# convoy daemon --drivers vfs --driver-opts vfs.path=/mnt/nfs/ &
    在这里插入图片描述
    [root@server1 plugins]# ll /var/run/convoy/convoy.sock
    srwxr-xr-x 1 root root 0 Aug 6 09:44 /var/run/convoy/convoy.sock
    [root@server1 plugins]# cd /mnt/nfs/
    [root@server1 nfs]# ls
    config
    [root@server1 nfs]# convoy create vol1##创建挂载点
    [root@server1 nfs]# ls
    config vol1

在这里插入图片描述
[root@server1 nfs]# docker run -it --name vm1 -v vol1:/data ubuntu
root@518626f0030f:/# ls
bin data etc lib media opt root sbin sys usr
boot dev home lib64 mnt proc run srv tmp var
root@518626f0030f:/# cd data/
root@518626f0030f:/data# touch file{1…10}
root@518626f0030f:/data# ls
file1 file10 file2 file3 file4 file5 file6 file7 file8 file9
root@518626f0030f:/data#

sever2端:
[root@server2 ~]# tar zxf convoy.tar.gz
[root@server2 ~]# cd convoy
[root@server2 convoy]# cp convoy convoy-pdata_tools /usr/local/bin/
[root@server2 convoy]# convoy daemon --drivers vfs --driver-opts vfs.path=/mnt/nfs/ &
在这里插入图片描述

[root@server2 convoy]# ll /var/run/convoy/convoy.sock
srwxr-xr-x 1 root root 0 Aug 6 09:46 /var/run/convoy/convoy.sock
[root@server2 convoy]# cd /mnt/nfs/
[root@server2 nfs]# ls
config vol1
[root@server2 nfs]# cd vol1/
[root@server2 vol1]# ls
[root@server2 vol1]# convoy list
在这里插入图片描述

  • 运行容器进行挂载情况测试
    在server1端运行ubuntu并挂载至本地的vol1中
    [root@server1 nfs]# docker run -it --name vm1 -v vol1:/data ubuntu
    root@518626f0030f:/# ls
    bin data etc lib media opt root sbin sys usr
    boot dev home lib64 mnt proc run srv tmp var
    root@518626f0030f:/# cd data/
    root@518626f0030f:/data# touch file{1…10}
    root@518626f0030f:/data# ls
    file1 file10 file2 file3 file4 file5 file6 file7 file8 file9
    root@518626f0030f:/data#

在server2端的vol1目录进行查看文件是否可以查看到
在这里插入图片描述
查看挂载的信息(之前未清空其余挂载信息)
[root@server1 ~]# cd /var/lib/docker/volumes/
[root@server1 volumes]# ls
09c9cb9aa7762df07a5b6d73b662c370498ee85356f602ddd3ef5151d0b94d74 c387e96d8fae8452f91be327a33bb71206ebf09b0b0beeb258edf8447ae3ee4b
390b0b0f336879fc291b6b1746543f8ad7bdcafeff727155c522d9f07b5f9a2d dc8f9146ff95b480fb621c2b814f189318fd58cc2ebf3ee80763081f97d81e55
5b6cd3e6f1ea7d2d63ffa8d675b71e26b6caa21ca3575a13a450420085c49b92 e825b26e572ec29879f70eb9118a3487d3b2bb1f45935d361b6b84fc8cea2084
6460cacabb6ba735296c69edb3ff9e6c9b6f14556a8077af0882192faa27a4c7 fdeb26e2750774df380ad9db86cd7b9870ff5d8fc4c2ec1fe9c05b402a08ed10
652e56fe377b20d91f6f8d07f1d0eaa76c7abfdf5d5f6cafd638e20ffe53354a metadata.db
84f2a18d64b67e78e4028011ced0f1059b59233065f1bb5b62476f9ad8a98601
在这里插入图片描述

在server2端删除文件file{1…5}
然后在server1端容器进行查看,发现文件已经被删除
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值