运维实战 容器部分 Docker数据卷
Posted 洛冰音
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了运维实战 容器部分 Docker数据卷相关的知识,希望对你有一定的参考价值。
运维实战 容器部分 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
中.
卷插件
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数据卷的主要内容,如果未能解决你的问题,请参考以下文章