docker容器技术4 --数据卷篇

前言

前面学习了docker镜像、仓库以及网络
docker容器技术3 --网络篇

这里开始学习docker数据卷

原文件系统缺点与docker数据卷优点

docker分层文件系统

  • 性能差
  • 生命周期与容器相同

docker数据卷

  • mount到主机中,绕开分层文件系统
  • 和主机磁盘性能相同,容器删除后依然保留
  • 仅限本地磁盘,不能随容器迁移

1、Docker卷管理基础

docker run 在创建容器时使用 -v 参数可以挂载一个或多个数据卷到当前运行的容器中,-v
的作用是将宿主机上的目录作为容器的数据卷挂载到容器中,使宿主机和容器之间可以共
享一个目录。

1.1 docker提供的两种卷之bind mount

是将主机上的目录或文件mount到容器里。
使用直观高效,易于理解。
使用 -v 选项指定路径,格式 :

bind mount 默认权限是读写rw,可以在挂载时指定只读ro。
-v选项指定的路径,如果不存在,挂载时会自动创建。

docker run -it --rm -v /data1:/data1 \
-v /data2:/data2:ro \
-v /etc/yum.repos.d/rhel7.6.repo:/mnt/rhel7.6.repo:ro \
busybox

##测试语句

1.2 docker提供的两种卷之docker managed volume

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

    -v 后面的,前面是宿主机上的指定的卷名,后面的是容器的目录
    -v 主机路径:容器路径

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

1.3 bind mount与docker managed volume比较

相同点:两者都是 host 文件系统中的某个路径

不同点:

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

2、卷插件剖析

docker 卷默认使用的是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数据完成通信。

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

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

3、如何使用卷插件

convoy卷插件支持三种运行方式:devicemapper、NFS、EBS。
以下实验使用nfs方式。

下载软件:
https://github.com/rancher/convoy/releases/download/v0.5.0/convoy.tar.gz

在所有节点提前挂载NFS存储。

convoy卷插件子命令小结

convoy卷插件子命令
	convoy list		列出卷
	convoy delete		删除卷
	convoy snapshot create	创建快照
	convoy snapshot delete	删除快照
	convoy backup create		创建备份
	convoy create res1 --backup <url>		还原备份

3.1 convoy卷插件安装

第一步:在server1和server2节点挂载NFS存储并测试

在server1(1.2.3.1)上
yum install -y nfs-utils
vim /etc/exports
cat /etc/exports
  /nfsdata	  *(rw,no_root_squash)
systemctl enable --now nfs
showmount  -e 
  Export list for server1:
  /nfsdata *

mkdir /nfsdata
chmod 777 /nfsdata/
ll -d /nfsdata/
  drwxrwxrwx 2 root root 6 Jan 28 16:46 /nfsdata/

在server2(1.2.3.2)上
showmount  -e 1.2.3.1
  Export list for 1.2.3.1:
  /nfsdata *
mkdir /nfsdata
mount 1.2.3.1:/nfsdata  /nfsdata
ll -d /nfsdata/
  drwxrwxrwx 2 root root 6 Jan 27 16:46 /nfsdata/
cd /nfsdata/
touch file1
ls
  file1

回到server1(1.2.3.1)上
cd /nfsdata/
ls   ##显示server2上创建的file1
  file1

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

第二步:安装convoy卷插件
server1和server2上都需要安装

tar zxf convoy.tar.gz
cp convoy/convoy convoy/convoy-pdata_tools /usr/local/bin/
mkdir -p /etc/docker/plugins/
echo "unix:///var/run/convoy/convoy.sock" > /etc/docker/plugins/convoy.spec #没有这个文件,表示convoy服务没有启动
convoy daemon --drivers vfs --driver-opts vfs.path=/nfsdata &

注意:如果需要重新安装convoy,不要忘了把/var/lib/rancher/convoy目录下的内容清空

nfs文件系统需要修改文件目录权限服务机上修改,客户机没有权限

在这里插入图片描述

3.2 创建卷

convoy create vol1
自动生成数据目录:/nfsdata/vol1/

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

3.3 使用卷

docker run -d --name demo -v vol1:/usr/share/nginx/html --volume-driver convoy  nginx
可以在两个主机上同时运行容器,会发现数据目录中的数据是同步的。

在这里插入图片描述
在这里插入图片描述
前面vol1有点问题,创建vol2,步骤一样。

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

在这里插入图片描述



---数据卷篇到此结束,下一篇docker--安全篇---

猜你喜欢

转载自blog.csdn.net/weixin_41191813/article/details/113273958