Docker-(8)docker数据卷

一、docker数据卷

在这里插入图片描述

bind mount 模式

在这里插入图片描述其中 -v选项指定的路径,如果不存在,挂载时会自动创建,也可指定多个挂载。

bind mount 示例:

[root@server1 ~]# docker run -d --name vm1 -v /opt/website:/usr/share/nginx/html nginx
92684dd0d2e25d8f0f458783e5ca6324f5d775e80df441faca0387eb84f8a59c
[root@server1 ~]# cd /opt/website/
[root@server1 website]# ls

此时访问nginx出现错误:
在这里插入图片描述是因为在发布目录下没有默认发布文件,我们创建发布文件后再次访问:
在这里插入图片描述修改的是宿主机/opt/website/目录下的文件,由于挂载到了容器内nginx的发布目录,因此可以成功访问,修改发布文件再次验证:

在这里插入图片描述默认的挂载都是读写的,也可以指定读写权限挂载:
比如指定只读挂载:

[root@server1 ~]# docker run -it --name vm2 -v /opt/website:/data1 -v /etc/yum.repos.d/docker-ce.repo:/etc/yum.repos.d/docker-ce.repo:ro busyboxplus
/ # cd /etc/yum.repos.d/
/etc/yum.repos.d # ls
docker-ce.repo
/etc/yum.repos.d # vi docker-ce.repo 
/etc/yum.repos.d # echo 1111 >> docker-ce.repo 
/bin/sh: can't create docker-ce.repo: Read-only file system

docker managed volume模式

上面讲的bind mount模式必须指定host文件系统路径,限制了移植性,而docker managed volume模式不需要指定mount源,docker自动为容器创建数据卷目录。

默认创建的数据卷目录都在 /var/lib/docker/volumes中。

在这里插入图片描述上图中的不用的volumes可以使用docker volume prune 命令来释放。

如果挂载时指向容器内已有的目录,原有数据会被复制到volumes中。

[root@server1 volumes]# docker run -d --name vm2 -v /usr/share/nginx/html nginx
[root@server1 volumes]# ls
34a310947a04095e60c5d1f6351cac34d39e6c0cbc731817721e0092729c1c95  metadata.db
[root@server1 volumes]# cd 34a310947a04095e60c5d1f6351cac34d39e6c0cbc731817721e0092729c1c95/_data/
[root@server1 _data]# ls
50x.html  index.html

bind mount与docker managed volume对比

在这里插入图片描述

二、docker卷插件简介

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

convoy插件部署

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

convoy卷插件安装:
<1>两台主机安装并配置NFS

[root@server1 ~]# yum install -y nfs-utils
[root@server2 ~]# yum install -y nfs-utils

确保以下程序处于运行状态:

[root@server1 ~]#  systemctl start rpcbind
[root@server2 ~]#  systemctl start rpcbind

server1配置:


[root@server1 ~]# vim /etc/exports

[root@server1 ~]# cat /etc/exports
/nfs	*(rw,no_root_squash)				#设置所有用户对该共享目录可读写  no_root_squash参数表示登入 NFS 主机使用分享目录的使用者,如果是 root 的话,那么对于这个分享的目录来说,他就具有 root 的权限
[root@server1 ~]# systemctl start nfs
[root@server1 ~]# showmount -e
Export list for server1:
/nfs *
[root@server1 ~]# mkdir /nfs			##新建共享目录

server2配置:

[root@server2 ~]# mkdir /nfs
[root@server2 ~]# showmount -e server1
Export list for server1:
/nfs *
[root@server2 ~]# mount 172.25.63.1:/nfs/ /nfs/			  ##客户端挂载共享目录

[root@server2 nfs]# echo redhat > file1			   ##测试:客户端172.25.63.2访问目录并建立文件,可写
[root@server2 nfs]# cat file1 
redhat



在服务端共享目录下面查看客户端创建的文件:

[root@server1 ~]# cd /nfs/
[root@server1 nfs]# ls
file1
[root@server1 nfs]# cat file1 			# 文件已经同步,nfs配置成功
redhat

<2>两台主机安装convoy

server1配置:

[root@server1 ~]# tar zxf convoy.tar.gz 
[root@server1 ~]# cd convoy/
[root@server1 convoy]# ls
convoy  convoy-pdata_tools  SHA1SUMS
[root@server1 convoy]# mv * /usr/local/bin/
[root@server1 convoy]# mkdir /etc/docker/plugins
[root@server1 ~]# convoy daemon --drivers vfs --driver-opts vfs.path=/nfs &		#启动Convoy守护进程
[root@server1 ~]# echo "unix:///var/run/convoy/convoy.sock" > /etc/docker/plugins/convoy.spec


server2配置:

[root@server2 ~]# tar zxf convoy.tar.gz
[root@server2 ~]# cd convoy
[root@server2 convoy]# cp * /usr/local/bin/
[root@server2 convoy]# mkdir /etc/docker/plugins
[root@server2 convoy]# convoy daemon --drivers vfs --driver-opts vfs.path=/nfs &		#启动Convoy守护进程
[root@server2 convoy]# echo "unix:///var/run/convoy/convoy.sock" > /etc/docker/plugins/convoy.spec

第一次运行上面的convoy daemon命令的时候,会在共享目录下生成一个config文件夹,这个文件夹不要删除,不然客户端的convoy命令就会用不了

<3>操作卷

[root@server1 ~]# convoy create vol1      ##创建convoy卷实例

[root@server1 ~]# convoy list           ##查询卷

在这里插入图片描述
在共享目录内会自动生成一个同名文件夹,在这个卷同名的文件夹内创建文件等,等同于操作卷里面的内容。

[root@server1 vol1]# docker run -d --name vm1 -v vol1:/usr/share/nginx/html nginx
[root@server1 vol1]# ls
50x.html  index.html			#直接输出了容器内的数据
[root@server1 vol1]# echo www.11111.com > index.html 
[root@server1 vol1]# cat index.html 
www.11111.com

在server2查看是否同步:

[root@server2 convoy]# cd /nfs/vol1/
[root@server2 vol1]# ls
50x.html  index.html
[root@server2 vol1]# cat index.html 
www.11111.com

当容器销毁后数据卷还会在。

删除卷:

[root@server1 ~]# docker rm -f vm1 		#首先删除容器
[root@server1 ~]# convoy delete vol1 	#删除卷
[root@server1 ~]# convoy list
{}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值