详细介绍docker数据卷管理&convoy卷插件(实例详解)

本篇文章给大家带来了关于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 lsdocker run -d --name vm1 -v /opt/website:/usr/share/nginx/html nginxdocker ps

登录后复制

在这里插入图片描述

docker inspect vm1#查看到ip为172.17.0.2curl 172.17.0.2

登录后复制

发现是403页面:
在这里插入图片描述

cd /opt/website/ls#发现没有默认发布页面echo www.westos.org > index.htmlcurl 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 registrycd /var/lib/docker/volumes/lsdocker history registry:latest

登录后复制

在这里插入图片描述
通过docker volume可以将容器内的内容复制到挂载点:

docker run -d --name vm2 -v /usr/share/nginx/html nginxcd /var/lib/docker/volumes/lscd 674c999f99b7b524d8f5769b65cb5411d11e3fa855da695a5fdd3494e4342d89/cd _data/ls#查看到默认发布目录被复制到了这里

登录后复制

在这里插入图片描述

docker inspect vm2curl 172.17.0.3#nginx默认发布页

登录后复制

在这里插入图片描述

echo hello docker! > index.htmlcurl 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-utilssystemctl start rpcbindmkdir /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-utilssystemctl start nfs-server.serviceshowmount -e server1#寻找server1的挂载目录mkdir /nfsmount server1:/nfs /nfsdf

登录后复制

在这里插入图片描述
测试:
在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 /nfsls

登录后复制

注意:第一次运行上面的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.specconvoy daemon --drivers vfs --driver-opts vfs.path=/nfs &> /dev/null &cd /nfsls

登录后复制

在这里插入图片描述
step3 创建卷:

docker volume lsconvoy create vol1

登录后复制

在这里插入图片描述
step4 操作卷:

在server2中运行容器,指定卷为刚才新创建的vol1:

docker run -it --name vm1 -v vol1:/usr/share/nginx/html nginxdocker psdocker inspect vm1curl 172.17.0.2#nginx默认发布页

登录后复制

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

cd /nfs/cd vol1/echo hello convoy > index.htmlcurl 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 /mntsystemctl restart docker

登录后复制

创建卷:

docker volume create vol1lscd volumes/ls#可以看到vol1,默认创建在这个目录下cd vol1/lscd _data/ls#进入该目录,是空的

登录后复制

在这里插入图片描述
使用卷:

docker run -d --name vm1 -v vol1:/usr/share/nginx/html nginxdocker psls#看到nginx默认发布目录被挂到这里了

登录后复制

在这里插入图片描述
补充几条命令:

docker container prune#删除停止的容器docker volume prune#删除没有被使用的卷

登录后复制

推荐学习:《docker视频教程》

以上就是详细介绍docker数据卷管理&convoy卷插件(实例详解)的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/3159498.html

(0)
上一篇 2025年3月30日 10:35:21
下一篇 2025年3月30日 10:35:37

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • docker中怎么查看pull镜像在哪个目录

    方法:1、利用“cd var/lib/docker/”命令进入docker目录;2、利用“cd containers/”命令进入containers,每一个序列号就是一个镜像;3、利用cd命令进入其中一个镜像查看目录结构即可。 本教程操作环…

    2025年3月30日
    100
  • Docker怎样搭建本地私有仓库(实例详解)

    本篇文章给大家带来了关于docker中搭建本地私有仓库的相关知识,其中包括使用registry镜像创建私有仓库以及检查是否搭建成功等相关问题,希望对大家有帮助。 使用registry镜像创建私有仓库 docker run -itd –re…

    2025年3月30日 编程技术
    100
  • docker容器重启后数据会丢吗

    docker容器重启后数据会丢失的;但是可以利用volume或者“data container”来实现数据持久化,在容器关闭之后可以利用“-v”或者“–volumes-from”重新使用以前的数据,docker也可挂载宿主机磁盘目录,用来永…

    2025年3月30日
    100
  • docker的系统日志在哪

    docker的系统日志的位置是在“/var/lib/docker/.”目录中,每个容器都有一个特定的日志,具体位置是“/var/lib/docker/containers/ID名/ID名-json.log”;日志采用的是JSON格式,不易阅…

    2025年3月30日
    100
  • docker hub 进不去怎么办

    docker hub进不去是因为“hub.docker.com”是在国外的,所以访问速度很慢,导致无法访问该网址,其解决办法:1、找到“daemon.json”文件;2、使用vim命令将其打开;3、添加“{ “registry-…

    2025年3月30日
    100
  • 精华!Docker 常用命令大全

    本文包括容器生命周期管理命令、容器操作命令、容器rootfs命令、镜像仓库命令、本地镜像管理命令和基础版本信息命令。 容器生命周期管理命令 run 创建一个新的容器。 # 使用docker镜像nginx:latest以后台模式启动一个容器,…

    2025年3月30日
    100
  • 告别繁琐的字符串处理:使用 Composer 简化 PHP 开发

    最近我在开发一个自动化测试框架时,遇到了一个让人头疼的问题。我的测试需要与浏览器进行交互,而我选择的测试框架 Mink 需要一个 Selenium2 Driver 来驱动浏览器。 手动下载和配置 Selenium 驱动程序不仅繁琐,而且容易…

    2025年3月30日
    100
  • postman如何安装

    如何在不同操作系统上安装 PostmanWindows:下载 Postman 安装程序运行安装程序并按照提示操作macOS:下载 Postman DMG 文件将 Postman 图标拖放到应用程序文件夹Linux:下载 Postman 安装…

    2025年3月29日
    100
  • python网页版入口_python网页版入口官网

    python:浏览器中的编程体验 Python,这门由吉多·范罗苏姆于1989年创造,并于1991年首次公开发布的编程语言,以其简洁易懂的语法和强大的功能而闻名。其动态类型和解释执行机制,以及对多种编程范式的支持,使其成为Web开发、数据科…

    2025年3月29日
    100
  • deepseek怎么安装

    DeepSeek的安装方法有多种,包括:从源码编译(适用于经验丰富的开发者)使用预编译包(适用于Windows用户)使用Docker容器(最便捷,无需担心兼容性)无论选择哪种方法,请仔细阅读官方文档并充分准备,避免不必要的麻烦。 DeepS…

    2025年3月29日
    100

发表回复

登录后才能评论