详细介绍docker数据卷管理&convoy卷插件(实例详解)
本篇文章给大家带来了关于docker中数据卷管理和convoy卷插件的相关知识,希望对大家有帮助。
1.什么是Docker数据卷
数据卷是一个或多个容器中专门指定的目录,它能够绕过联合文件系统。
卷被设计用作数据持久化、并且是独立于容器的生命周期的。因此,Docker不会在删除容器时自动删除数据卷卷,也不会主动“垃圾回收”掉容器不再使用的卷。
数据卷的存在就是想让的容器的数据持久化存在,而且可以实现容器之间的数据共享。
通俗地来说,docker容器数据卷可以看成使我们生活中常用的u盘,它存在于一个或多个的容器中,由docker挂载到容器,但不属于联合文件系统,Docker不会在容器删除时删除其挂载的数据卷。
2.为什么要用数据卷
docker分层文件系统:
- 性能差
- 生命周期与容器相同
docker数据卷:
- mount到主机中,绕开分层文件系统
- 和主机磁盘性能相同,容器删除后依然保留
- 仅限本地磁盘,不能随容器迁移
3.docker数据卷提供两种卷
bind mount
是将主机上的目录或文件mount到容器里
- 使用直观高效,易于理解。
- 使用 -v 选项指定路径,格式 :
- bind mount 默认权限是读写rw,可以在挂载时指定只读ro。
- -v选项指定的路径,如果不存在,挂载时会自动创建。
docker managed volume
bind mount必须指定host文件系统路径,限制了移植性。
docker managed volume 不需要指定mount源
bind mount 和docker managed volume对比
相同点:两者都是host文件系统中的某个路径
不同点:
4.bind mount应用
docker network prune docker network ls docker run -d --name vm1 -v /opt/website:/usr/share/nginx/html nginx docker ps
docker inspect vm1 #查看到ip为172.17.0.2 curl 172.17.0.2
发现是403页面:
cd /opt/website/ ls #发现没有默认发布页面 echo www.westos.org > index.html curl 172.17.0.2
此时访问nginx,就有www.westos.org内容了:
挂载时还可以指定权限:
docker run -it --rm -v /opt/website:/data1 -v /etc/passwd:/data2/passwd:ro busybox
可以看到默认权限为rw读写,所以我们可以更改index.html的内容;而指定passwd为只读后,我们就无法修改其内容,只能读
5.docker managed volume
查看现有的管理卷:
docker volume ls
我们有些是时候在删除了容器后会有残存的管理卷存在,这是我们就需要去清理它,不然会占用我们的资源:
docker volume prune docker volume ls
docker run -d --name registry registry cd /var/lib/docker/volumes/ ls docker history registry:latest
通过docker volume可以将容器内的内容复制到挂载点:
docker run -d --name vm2 -v /usr/share/nginx/html nginx cd /var/lib/docker/volumes/ ls cd 674c999f99b7b524d8f5769b65cb5411d11e3fa855da695a5fdd3494e4342d89/ cd _data/ ls #查看到默认发布目录被复制到了这里
docker inspect vm2 curl 172.17.0.3 #nginx默认发布页
echo hello docker! > index.html curl 172.17.0.3 #可以直接在挂载的目录修改默认发布页
6.docker卷插件简介
docker卷默认使用的是local类型的驱动,只能存在宿主机,
跨主机的volume就需要使用第三方的驱动,可以查看链接:
https://docs.docker.com/engine/extend/legacy_plugins/#volume-plugins
Docker Plugin 是以Web Service的服务运行在每一台Docker Host上的,通过HTTP协议传输RPC风格的JSON数据完成通信。Plugin的启动和停止,并不归Docker管理,Docker Daemon依靠在缺省路径下查找Unix Socket文件,自动发现可用的插件。
当客户端与Daemon交互,使用插件创建数据卷时,Daemon会在后端找到插件对应的 socket 文件,建立连接并发起相应的API请求,最终结合Daemon自身的处理完成客户端的请求。
7.convoy卷插件
convoy卷插件支持三种运行方式:devicemapper、NFS、EBS。下面的实验以nfs的运行方式来演示
实验目的:在server1和2底层用nfs来实现数据共享
step1 首先在server1和server2上搭建nfs文件系统:
server1:
yum install -y nfs-utils systemctl start rpcbind mkdir /nfs #创建共享目录 chmod 777 /nfs #修改共享目录权限 vim /etc/exports #编辑共享目录文件,否则将不会被共享出去 /nfs *(rw,no_root_squash) systemctl start nfs
注意:rpcbind服务必须是开启的。这是因为:他是一个RPC服务,主要是在nfs共享时候负责通知客户端,服务器的nfs端口号的。简单理解rpc就是一个中介服务。
server2:
yum install -y nfs-utils systemctl start nfs-server.service showmount -e server1 #寻找server1的挂载目录 mkdir /nfs mount server1:/nfs /nfs df
测试:
在server2中:
cd /nfs/ touch file
在server1中:
cd /nfs/ ls #查看到file
说明两个节点的/nfs实现同步了
step2 配置convoy环境:
docker官方只提供了卷插件的api,开发者可以根据实际需求定制卷插件驱动。
在server1中:
tar zxf convoy.tar.gz cd convoy/ cp convoy* /usr/local/bin/ #将二进制文件加入到PATH路径 mkdir /etc/docker/plugins #创建docker的插件目录 convoy daemon --drivers vfs --driver-opts vfs.path=/nfs &> /dev/null & cd /nfs ls
注意:第一次运行上面的convoy daemon命令的时候,会在/nfs目录下生成一个config文件夹,这个文件夹不要删除,不然客户端的convoy命令就会用不了
echo "unix:///var/run/convoy/convoy.sock" > /etc/docker/plugins/convoy.spec #将convoy守护进程开启生成的.sock文件放入/etc/docker/plugins目录下的convoy.spec文件中,docker就可以识别。(其中convoy.spec文件之前是不存在的) cat /etc/docker/plugins/convoy.spec
在server2中同样配置convoy环境:
scp -r server1:convoy . cd convoy/ cp convoy* /usr/local/bin/ #将二进制文件加入到PATH路径 mkdir /etc/docker/plugins #创建docker的插件目录 echo "unix:///var/run/convoy/convoy.sock" > /etc/docker/plugins/convoy.spec convoy daemon --drivers vfs --driver-opts vfs.path=/nfs &> /dev/null & cd /nfs ls
step3 创建卷:
docker volume ls convoy create vol1
step4 操作卷:
在server2中运行容器,指定卷为刚才新创建的vol1:
docker run -it --name vm1 -v vol1:/usr/share/nginx/html nginx docker ps docker inspect vm1 curl 172.17.0.2 #nginx默认发布页
cd /nfs/ cd vol1/ echo hello convoy > index.html curl 172.17.0.2
在server1中数据也同步了:
cd /nfs/ cd vol1/ cat index.html
在ser1中也可以运行容器,也可以用到共享的数据卷
说明:docker引擎默认扫描 /etc/docker/plugins目录中的convoy.spec—>访问/run/convoy/convoy.sock文件—>发起响应的api请求—>把数据写入vol1中—>底层通过nfs进行主机间的数据同步
如何删除通过nfs创建的数据卷,让之后创建的数据卷都是本地的呢?
删除卷:
convoy delete vol1
实现本地驱动:
cd /etc/docker/plugins/ mv convoy.spec /mnt systemctl restart docker
创建卷:
docker volume create vol1 ls cd volumes/ ls #可以看到vol1,默认创建在这个目录下 cd vol1/ ls cd _data/ ls #进入该目录,是空的
使用卷:
docker run -d --name vm1 -v vol1:/usr/share/nginx/html nginx docker ps ls #看到nginx默认发布目录被挂到这里了
补充几条命令:
docker container prune #删除停止的容器 docker volume prune #删除没有被使用的卷
推荐学习:《docker视频教程》
以上是详细介绍docker数据卷管理&convoy卷插件(实例详解)的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

可切换到国内镜像源,步骤如下:1. 编辑配置文件 /etc/docker/daemon.json,添加镜像源地址;2. 保存退出后,重启 Docker 服务 sudo systemctl restart docker,即可提升镜像下载速度和稳定性。

创建 Docker 镜像步骤:编写包含构建指令的 Dockerfile。在终端中构建镜像,使用 docker build 命令。标记镜像,使用 docker tag 命令分配名称和标签。

要获取 Docker 版本,您可以执行以下步骤:运行 Docker 命令“docker --version”来查看客户端和服务器版本。对于 Mac 或 Windows,还可以通过 Docker Desktop GUI 的“版本”选项卡或“关于 Docker Desktop”菜单查看版本信息。

如何使用 Docker Desktop?Docker Desktop 是一款工具,用于在本地机器上运行 Docker 容器。其使用步骤包括:1. 安装 Docker Desktop;2. 启动 Docker Desktop;3. 创建 Docker 镜像(使用 Dockerfile);4. 构建 Docker 镜像(使用 docker build);5. 运行 Docker 容器(使用 docker run)。

查看 Docker 日志的方法包括:使用 docker logs 命令,例如:docker logs CONTAINER_NAME使用 docker exec 命令运行 /bin/sh 并查看日志文件,例如:docker exec -it CONTAINER_NAME /bin/sh ; cat /var/log/CONTAINER_NAME.log使用 Docker Compose 的 docker-compose logs 命令,例如:docker-compose -f docker-com

在 Docker 中保存镜像,可以使用 docker commit 命令创建新的镜像,包含指定容器的当前状态,语法为:docker commit [选项] 容器ID 镜像名称。要保存镜像到仓库,可以使用 docker push 命令,语法为:docker push 镜像名称[:标签]。要导入已保存的镜像,可以使用 docker pull 命令,语法为:docker pull 镜像名称[:标签]。

可以通过以下步骤查询 Docker 容器名称:列出所有容器(docker ps)。筛选容器列表(使用 grep 命令)。获取容器名称(位于 "NAMES" 列中)。
