docker的数据卷

数据卷的作用

Docker中的数据可以存储在类似于虚拟机磁盘的介质中,在Docker中称为数据卷(Data Volume)。数据卷可以用来存储Docker应用的数据,也可以用来在Docker容器间进行数据共享。数据卷呈现给Docker容器的形式就是一个目录,支持多个容器间共享,修改也不会影响镜像。使用Docker的数据卷,类似在系统中使用 mount 挂载一个文件系统。

数据卷管理基础

docker提供了两种卷:bind mount,docker managed volume
bind mount
*bind mount是将主机上的目录或文件mount到容器里,使用直观高效,易于理解,使用 -v 选项指定路径。
在这里插入图片描述
bind mount 默认权限是读写rw,可以在挂载时指定只读ro,-v选项指定的路径,如果不存在,挂载时会自动创建。
docker managed volume

[root@server1 docker]# docker volume ls

在这里插入图片描述
查看现有数据卷。

[root@server1 docker]# docker volume prune 

在这里插入图片描述
清除所有数据卷。
在这里插入图片描述下面的实验需要用到registry镜像。

[root@server1 docker]# docker run -d --name registry1 registry:2.3.1 

在这里插入图片描述
再次查看数据卷,生成了一个数据卷。

[root@server1 docker]# docker inspect registry1

在这里插入图片描述
source就是volume在host中的目录,是docker自动为容器生成的目录,如果挂载时指向的已有目录,原有数据会被复制到volume中。
需要注意的是,即使删除容器,数据卷也不会消失。
在这里插入图片描述
通过上面我们发现生成的目录太长了,我们可以在生成容器的时候进行自定义。

[root@server1 docker]# docker run -d --name registry2 -v registry2:/var/lib/registry registry:2.3.1

在这里插入图片描述

[root@server1 volumes]# docker inspect registry2

在这里插入图片描述
生成一个容器,指定目录为/var/lib/docker/volumes/registry2,只需要直接输入目录名称,就会在/var/lib/docker/volumes目录下生成。

[root@server1 volumes]# docker volume create vol1

创建名为vol1的数据卷。

[root@server1 volumes]# docker run -d --name registry3 -v vol1:/var/lib/registry registry:2.3.1

创建容器并将数据卷挂载到容器内指定目录。

[root@server1 volumes]# docker inspect registry3

在这里插入图片描述
可以查看到容器source的路径。

[root@server1 volumes]# docker volume create vol2

在这里插入图片描述

[root@server1 volumes]# docker run -it --name vm2 -v vol2:/data:ro ubuntu

在这里插入图片描述
新建数据卷,创建容器时挂载数据卷可以指定目录读写权限。
bind mount与docker managed volume的区别

bind mountdocker managed volume
volume位置可任意指定/var/lib/docker/volumes/…
对已有mount point的影响隐藏并替换为volume原有数据复制到volume
是否支持单个文件支持不支持,只能是目录
权限控制可设置只读,默认为读写无控制 ,均为读写
移植性移植性若移植性强

convoy卷插件实现nfs

首先需要在server1和server2两台主机搭建nfs文件系统。

[root@server1 yum.repos.d]# yum install -y nfs-utils.x86_64
[root@server1 yum.repos.d]# systemctl start rpcbind
[root@server1 yum.repos.d]# systemctl start nfs
[root@server1 yum.repos.d]# mkdir /mnt/nfs

下载服务,开启服务,创建需要共享的目录。

[root@server1 mfs]# vim /etc/exports
/mnt/nfs        *(rw,no_root_squash)

指定共享的目录和权限。

[root@server1 mnt]# showmount -e localhost

在这里插入图片描述
发现目录。
在server2同样要下载服务,创建目录,只是不用编辑/etc/exports文件,因为server2不需要将目录共享,只是要挂载serve1共享的目录。

[root@server2 mnt]# showmount -e 172.25.26.1

在这里插入图片描述

[root@server2 mnt]# mount 172.25.26.1:/mnt/nfs/ /mnt/nfs

在这里插入图片描述
挂载目录。
下载convoy包。

[root@server1 ~]# tar zxf convoy.tar.gz 
[root@server1 ~]# ls
convoy  convoy.tar.gz  docker  dockerun  images
[root@server1 ~]# cd convoy/
[root@server1 convoy]# ls
convoy  convoy-pdata_tools  SHA1SUMS
[root@server1 convoy]# cp convoy convoy-pdata_tools /usr/local/bin/

下载包后将两个文件复制到/usr/local/bin目录下,方便使用。

[root@server1 convoy]# mkdir /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 nfs]# convoy create vol1

在这里插入图片描述
在这里插入图片描述
可以看到生成vol1目录。

[root@server1 ~]# ls
convoy  convoy.tar.gz  docker  images
[root@server1 ~]# scp -r convoy  server2:

将解压出来的convoy目录给srever2也拷一份,接下来在server2进行操作。

[root@server2 convoy]# cp convoy convoy-pdata_tools /usr/local/bin/
[root@server2 convoy]#  mkdir -p /etc/docker/plugins/
[root@server2 convoy]# echo "unix:///var/run/convoy/convoy.sock" > /etc/docker/plugins/convoy.spec
[root@server2 convoy]# convoy daemon --drivers vfs --driver-opts vfs.path=/mnt/nfs &

和在server1的操作一致。

[root@server2 convoy]# convoy list

在这里插入图片描述
查看信息。
使用卷

[root@server1 images]# docker run -it --name vm1 
\ -v vol1:/data --volume-driver=convoy ubuntu

创建容器,将vil1挂载到容器的data目录中。

在这里插入图片描述
在容器内的data目录创建文件,在server1中的共享目录/mnt/nfs/vol1可以同步到所创建的文件。
因为使用的是nfs文件系统,这些文件也同步到了server2的目录中。
在这里插入图片描述

[root@server2 ~]# docker run -it --name vm2 -v vol1:/data \
 --volume-driver=convoy ubuntu

在server2中创建容器vm2。
在这里插入图片描述
在server2中容器的data目录中可以看到创建的文件。
在这里插入图片描述
删除部分文件。
在这里插入图片描述在server1中可以看到文件数据都同步了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值