Docker----(七)数据卷管理

1 Docker数据卷管理

1.1 为什么要用数据卷

  • docker分层文件系统性能差,生命周期与容器相同
  • 数据卷是容器可以访问,但是位置不在root文件系统中的一个目录。为了能让容器之间可以共享数据,Docker让“卷”(volume)可以绕过Docker镜像的层叠机制。容器中所有对镜像的改变全部都直接存储。每个容器都有固定的运行目录在/var/lib/docker目录下;而每个容器卷的数据则默认单独存储在/var/lib/docker/volumes/目录底下。
    容器删除后依然数据卷保留,仅限本地磁盘,不能随容器迁移

1.2 bind mount

bind mount:是将主机上的目录或文件mount到容器里,在容器内对挂载的目录操作时会直接改变宿主机中相应的数据卷,对宿主机的数据卷操作也回应影响容器内的挂载目录,容器删除后宿主机的数据卷依然存在

(1) 创建容器时指定数据卷的挂载路径

docker run -it --rm -v /data1:/data1  -v /data2:/data2:ro -v /mnt/file:/mnt/file:ro busybox
##使用 -v 选项指定路径,宿主机:容器 
##ro只读模式
##/data2 目录在只读模式,不能对目录作任何操作
##/mnt/file文件是只读模式,不能对该文件进行修改等操作

在这里插入图片描述

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

(2)在运行容器时如果不指定容器的挂载目录,那么数据卷自动挂载到/var/lib/docker/volumes目录下的随即命名的子目录: docker run -d --name registry registry

  • 查看容器的详细信息:docker inspect registry

在这里插入图片描述

  • 进入到registry的数据卷挂载目录:
cd /var/lib/docker/volumes/737f8622aba697e5a63b9232cdacc8dfbfa86f60e015d9c190c74cbf1e4a7ebc/_data

在这里插入图片描述

  • 删除容器:docker rm -f registry,此容器挂载的数据卷依然存在
  • 查看docker的数据卷:docker volume ls

在这里插入图片描述

  • 清除未被使用的数据卷:docker volume prune

在这里插入图片描述

1.3 docker managed volume

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

(1)创建数据卷

  • 创建数据卷名为registry: docker volume create registry
  • 查看数据卷的信息:docker volume inspect registry

在这里插入图片描述
(2) 运行容器时指定数据卷,不指定数据卷的挂载路径时,在容器内的挂载路径是 /var/lib/docker/volumes目录下的随即名字的子目录:docker run -d --name registry -v registry registry

  • 查看容器的信息:docker inspect resgistry

在这里插入图片描述

  • 删除容器registry:docker rm -f registry

  • 运行容器时指定数据卷和挂载目录:docker run -d --name registry -v registry:/var/lib/registry registry

  • 查看容器的信息:docker inspect registry

在这里插入图片描述
(3) 对已有挂载点的影响

bind mount方式,隐藏并替换为valume

  • 运行容器指定挂载点和挂载目录:docker run -d --name demo -v /data1:/usr/share/nginx/html nginx
  • 查看demo容器的信息:docker inspect demo

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

  • 测试:curl 172.17.0.3,nginx默认发布目录中的内容被覆盖

在这里插入图片描述

  • 进入容器的交互方式:docker exec -it demo bash,容器的挂载目录中没有文件,编辑nginx的默认发布文件可以访问

在这里插入图片描述

  • 删除demo容器: docker rm -f demo

在这里插入图片描述

docker managed volume方式,会将原有的数据复制到valume中

  • 创建数据卷:docker volume create webserver
  • 运行容器:docker run -d --name demo -v webserver:/usr/share/nginx/html nginx
  • 查看容器的信息:docker inspect demo

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

  • 测试:会将数据卷挂载目录中原有的数据复制到volume中

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

2 卷插件简介

docker 卷默认使用的是local类型的驱动,只能存在宿主机,跨主机的volume就需要使用第三方的驱动

Convoy是一种支持多种存储类型的Docker存储卷宗插件,由Go语言编写,支持快照、备份和恢复。支持的后端存储设备有多种,devicemapper、NFS、DigitalOcean和EBS等。

2.1 nfs的配置

(1) server1安装nfs-utils:

yum install nfs-utils -y

(2) 编辑/etc/exports 文件:vim /etc/exports

/nfsdata   *(rw,no_root_squash)
##共享目录:/nfsdata
## rw:读写
##root目录具有根目录的完全管理访问权限:no_root_squash

(3) 在server1和server2创建共享目录

  • 创建挂载目录:mkdir /nfsdata
  • 修改挂载目录的权限:chmod 777 /nfsdata

(4) server1启动nfs服务:systemctl enable --now nfs

(5) 查看server1的NFS共享目录:showmount -e 172.25.12.1

在这里插入图片描述

  • 在server1的挂载目录创建文件,数据会在server2的/nfsdata目录同步,在server2修改挂载目录的内容server1中的也会被同步

在这里插入图片描述

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

2.2 convoy卷插件

(1) convoy卷插件的安装: tar zxf convoy.tar.gz

(2) 进入convoy的目录,将convoy和onvoy-pdata_tools移动到 /usr/local/bin/

cd convoy/
mv   convoy  convoy-pdata_tools /usr/local/bin/

在这里插入图片描述
(3) 设置Docker的卷插件

mkdir -p /etc/docker/plugins/
cd /etc/docker/plugins/

在这里插入图片描述

  • 进入/var/run/convoy/目录,编辑convoy.sock文件
cd /var/run/convoy/
echo "unix:///var/run/convoy/convoy.sock" > /etc/docker/plugins/convoy.spec

在这里插入图片描述

4 启动Convoy守护进程

convoy daemon   --drivers vfs --driver-opts vfs.path=/nfsdata &

在这里插入图片描述
运行上面的convoy daemon命令的时候,会生成一个config文件夹

 cd /nfsdata/

在这里插入图片描述

(5) 创建convoy卷

  • 查看帮助: convoy create --help

在这里插入图片描述

  • 创建卷vol1:convoy create vol1

在这里插入图片描述

  • 列出convoy卷:convoy list,卷的挂载路径是/nfsdata/vol1

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

(6) 使用convoy卷,将vol1挂载到nginx的默认发布目录/usr/share/nginx/html

docker run -d --name demo -v vol1:/usr/share/nginx/html --volume-driver convoy nginx

在这里插入图片描述

cd /etc/docker/plugins/

在这里插入图片描述

  • 查看卷的挂载路径: cd /nfsdata/vol1

在这里插入图片描述

  • 查看容器的信息:docker inspect demo

在这里插入图片描述

  • 测试:访问nginx的默认发布目录

在这里插入图片描述
两个主机上同时运行容器,会发现数据目录中的数据是同步的
修改

  • 在server2端修改数据卷挂载目录中的文件
echo hello world! > index.html

在这里插入图片描述

  • 在server2删除容器:
docker ps
docker rm -f 56c340530ed5

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

  • 在server1端运行nginx镜像的容器:
docker run -d --name demo -v vol1:/usr/share/nginx/html --volume-driver convoy nginx

在这里插入图片描述

  • 查看容器的信息:docker inspect demo

在这里插入图片描述

  • 测试:在server2端修改挂载目录的文件后,server1端容器的信息也会同步

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值