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

Posted 洛冰音

tags:

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

为什么使用数据卷

Docker分层文件系统

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

Docker数据卷

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

Docker数据卷的两种方式

docker提供了两种卷:

  • bind mount
  • docker managed volume

Bind Mount方式

  • 是将主机上的目录或文件mount到容器里.
  • 使用直观高效, 易于理解.
  • 使用 -v 选项指定路径, 格式 :
[root@Server1 /]# docker run -d --name demo -v /Volume/html/:/usr/share/nginx/html/ -v /Volume/conf/www.conf:/etc/nginx/conf.d/www.conf:ro -p 80:80 nginx:latest 4094a0a6bd154f2dfec05c8d1aff3a591f78658da22707b68eb243f8f3dd7a63

[root@Server1 /]# docker psCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES4094a0a6bd15        nginx:latest        "/docker-entrypoint.…"   3 seconds ago       Up 2 seconds        0.0.0.0:80->80/tcp   demo

[root@Server1 /]# curl localhost
Docker

Docker Managed Volume方式

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

image-20210503030721331

卷插件

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自身的处理完成客户端的请求.

Convoy卷插件

##安装并进行配置
yum install -y nfs-utils
systemctl start rpcbind
mkdir /mnt/nfs

##增加读写权限设置
vim /etc/exports

/mnt/nfs	*(rw,sync)

mount 172.25.5.1:/mnt/nfs /mnt/nfs
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 daemon --drivers vfs --driver-opts vfs.path=/mnt/nfs &

创建卷

convoy create vol1
##会自动生成数据目录:/mnt/nfs/vol1/	

使用卷

docker run -it --name Node1 -v vol1:/data --volume-driver=convoy ubuntu

可以在两个主机上同时运行容器, 会发现数据目录中的数据是同步的.

可能出现的问题

如果删除plugins, 即破坏插件, Docker重启时会消耗大量的时间.

解决方法为删除volumes下的源文件metadata.db

rm -f /var/lib/docker/volume/metadata.db

以上是关于运维实战 容器部分 Docker数据卷的主要内容,如果未能解决你的问题,请参考以下文章

运维实战 容器部分 Kubernetes存储

运维实战 容器部分 Kubernetes存储

运维实战 容器部分 Kubernetes存储

企业运维容器之 docker 数据卷

运维实战 容器部分 Docker安全

运维实战 容器部分 Docker网络