Linux企业运维——Docker数据卷

Posted 是大姚呀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux企业运维——Docker数据卷相关的知识,希望对你有一定的参考价值。

Linux企业运维——Docker(六)数据卷

1、数据卷管理

为什么要用数据卷

  • docker分层文件系统
    性能差
    生命周期与容器相同
  • docker数据卷
    mount到主机中,绕开文件分层系统
    和主机磁盘性能相同,容器删除后依然保留
    仅限本地磁盘,不能随容器迁移

docker提供了两种卷:

  1. bind mount
  2. docker managed volume

1.1、bind mount方式

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

方法一:

先关闭运行的harbor

使用nginx镜像创建容器demo,将真实主机/dockerdata目录挂载到容器中/usr/share/nginx/html

将www.westos.org输出到index.html页面中

查看ip并且访问测试,可以看到正常显示

进入demo容器查看文件是否挂载并写入数据

方法二:

删除上面的测试用例demo,先创建数据卷,再挂载。
将创建的webdata数据卷挂载到容器中/usr/share/nginx/html

进入数据卷目录中查看


删除测试用例demo,重新创建容器,将主机/etc/yum.repos.d/dvd.repo挂载到容器/etc/yum.repos.d/dvd.repo,
bind mount默认权限是读写,此处的ro指定权限为只读
-v选项指定的路径,如果不存在,挂载时会自动创建

1.2、docker managed volume方式

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

docker用nginx镜像创建容器demo,不需要指定mount源,直接挂载到/usr/share/nginx/html

看到在宿主机中默认创建的数据卷目录地址如图所示

切换到宿主机对应的目录下,可以看到50x.html和index.html,因为容器内已有的内容会被复制到volume中

1.3、方式异同点对比

  • 相同点:
    两者都是host文件系统中的某个路径
  • 不同点:
不同点bind mountdocker managed volume
volume位置可任意指定/var/lib/docker/volumes/…
对已有mount point影响隐藏并替换为volume复制原有数据到volume
是否支持单个文件支持不支持,只能是目录
权限控制默认为读写权限,可设置为只读无控制,均为读写权限
移植性移植性弱,与host path绑定移植性强,无需指定host目录

2、convoy卷插件

2.1、卷插件简介

docker 卷默认使用的是local类型的驱动,只能存在宿主机,跨主机的volume就需要使用第三方的驱动。docker官方只提供了卷插件的api,开发者可以根据实际需求定制卷插件驱动

  • Docker Plugin 是以Web Service的服务运行在每一台Docker Host上的,通过HTTP协议传输RPC风格的JSON数据完成通信。
  • Plugin的启动和停止,并不归Docker管理,Docker Daemon依靠在缺省路径下查找Unix Socket文件,自动发现可用的插件。
  • 当客户端与Daemon交互,使用插件创建数据卷时,Daemon会在后端找到插件对应的 socket文件,建立连接并发起相应的API请求,最终结合Daemon自身的处理完成客户端的请求。

2.2、convoy卷插件实现

convoy卷插件支持三种运行方式:
(1)devicemapper (2)NFS (3)EBS
以下实验使用NFS方式实现,在所有节点提前挂载NFS存储

两台虚拟机server1和server2:

server1:

安装nfs

准备挂载目录并更改权限

server2:

安装nfs

将server1上准备好的目录传送给server2

将convoy安装包发送给两个虚拟机

server1解压安装包
将convey的二进制文件移动到/usr/local/bin下便于直接调用
启动convoy

convoy套接字文件所在目录如图所示

在docker目录下创建plugins插件目录,将convoy.sock文件输出到/etc/docker/plugins/convoy.spec

server1使用convoy创建vol1数据卷


server2解压安装包
将convey的二进制文件移动到/usr/local/bin下便于直接调用
启动convey


server2在nfs文件夹下可以看到server1刚创建的vol1数据卷

server2也在docker目录下创建plugins插件目录,将convoy.sock文件输出到/etc/docker/plugins/convoy.spec,可以查看到vol1数据卷

server1使用vol1挂载测试

可以正常访问数据卷内的文件和网页

server2也用vol1挂载测试,可以正常访问网页

以上是关于Linux企业运维——Docker数据卷的主要内容,如果未能解决你的问题,请参考以下文章

运维实战 容器部分 Docker数据卷

Linux企业运维——Docker安全

Linux企业运维——Docker网络

Linux企业运维——Kubernetes存储之Volumes配置管理

Linux企业运维——Docker安装部署与镜像构建

Linux企业运维——Docker三剑客之Docker Machine