企业—Docker容器之数据卷管理器及卷插件

一.docker挂载管理

  • bind mount必须指定host文件系统路径,限制了移植性。
  • docker managed volume 不需要指定mount源。

1.正常运行容器会自动生成挂载点,不需要指定挂载源

//运行容器
在这里插入图片描述
//查看挂载点
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
source就是volume在host中的目录,是docker自动为容器生成的目录,如果挂载时指向的已有目录,原有数据会被复制到volume中。

2.运行容器时指定挂载点
在这里插入图片描述
在这里插入图片描述
//查看挂载点
在这里插入图片描述
3.只读挂载

//创建挂载目录并且再运行容器时指定为该目录挂载且为只读挂载

//创建容器挂载点
[root@server1 ~]# docker volume create vol1
[root@server1 ~]# docker volume create 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 文件系统中的某个路径。
  • 不同点:
    在这里插入图片描述

二.卷插件剖析

  • docker 卷默认使用的是local类型的驱动,只能存在宿主机,跨主机的volume就需要使用第三方的驱动,可以查看一链接:https://docs.docker.com/engine/extend/legacy_plugins/#volume-plugins

  • docker官方只提供了卷插件的api,开发者可以根据实际需求定制卷插件驱动。
    在这里插入图片描述
    1.卷插件概念

  • Docker Plugin 是以Web Service的服务运行在每一台Docker Host上的,通过HTTP协议传输RPC风格的JSON数据完成通信。

  • Plugin的启动和停止,并不归Docker管理,Docker Daemon依靠在缺省路径下查找Unix Socket文件,自动发现可用的插件

  • 当客户端与Daemon交互,使用插件创建数据卷时,Daemon会在后端找到插件对应的 socket 文件,建立连接并发起相应的API请求,最终结合Daemon自身的处理完成客户端的请求。

  • 支持三种运行方式:devicemapper、NFS、EBS。

2.使用nfs实现卷插件

本次实验用到俩个节点server1和server2

1.在所有节点挂载nfs存储

server1:

[root@server1 ~]# yum install -y nfs-utils
[root@server1 ~]# mkdir /mnt/nfs
[root@server1 ~]# vim /etc/exports
[root@server1 ~]# cat /etc/exports
/mnf/nfs     *(rw,no_root_squash)
[root@server1 ~]# ll -d /mnt/nfs/
drwxr-xr-x 2 root root 6 May 30 19:51 /mnt/nfs/
[root@server1 ~]# systemctl start nfs
[root@server1 ~]# systemctl start rpcbind
[root@server1 ~]# showmount -e
Export list for server1:
/mnf/nfs *

server2:

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

2.下载convoy.tar.gz压缩包,在节点上添加插件
server1:

[root@server1 ~]# tar zxf convoy.tar.gz 
[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]# ls
[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 ~]# ll /var/run/convoy/convoy.sock 
srwxr-xr-x 1 root root 0 May 30 21:10 /var/run/convoy/convoy.sock
[root@server1 ~]# cd /mnt/nfs/
[root@server1 nfs]# ls
config

//创建挂载点
[root@server1 nfs]# convoy create vol1
[root@server1 nfs]# ls
config  vol1

在这里插入图片描述
在这里插入图片描述
server2:(操作同server1)

[root@server2 ~]# ls
anaconda-ks.cfg  convoy.tar.gz  docker
[root@server2 ~]# tar zxf convoy.tar.gz 
[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@server1 ~]# docker load -i ubuntu.tar 
[root@server1 ~]# docker run -it --name vm1 -v vol1:/data ubuntu

运行容器之后查看并且建立文件:
在这里插入图片描述
在nfs的挂载路径下查看文件已经同步:
在这里插入图片描述
查看挂载的相应信息:
在这里插入图片描述
//在server2上运行容器并且指定挂载点:

[root@server2 ~]# docker load -i ubuntu.tar 
[root@server2 ~]# docker run -it --name vm2 -v vol1:/data ubuntu    查看发现文件已经同步

//在server2上删除文件
在这里插入图片描述
//在server1上查看发现文件已经不存在
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值