Docker数据卷
为什么要用数据卷
docker分层文件系统
性能差
生命周期与容器相同
docker数据卷
mount到主机中,绕开分层文件系统
和主机磁盘性能相同,容器删除后依然保留
仅限本地磁盘,不能随容器迁移
docker提供了两种卷:
bind mount
docker managed volume
一、Docker数据卷管理
在Docker中,要想实现数据的持久化(所谓Docker的数据持久化即数据不随着Container的结束而结束),需要将数据从宿主机挂载到容器中。目前Docker提供了三种不同的方式将数据从宿主机挂载到容器中:
1)volumes:Docker管理宿主机文件系统的一部分,默认位于 /var/lib/docker/volumes 目录中;(最常用的方式)
2)bind mounts:意为着可以存储在宿主机系统的任意位置;(比较常用的方式)
3)tmpfs:挂载存储在宿主机系统的内存中,而不会写入宿主机的文件系统;(一般都不会用的方式)
先停掉docker-compose
1.bind mount
是将主机上的目录或文件mount到容器里
使用 -v 选项指定路径,格式 :
bind mount 默认权限是读写rw,可以在挂载时指定只读r。
-v选项指定的路径,如果不存在,挂载时会自动创建
2.docker managed volume
如果挂载时指向容器内已有的目录,原有数据会被复制到volume中。
在这里我们拿registry来做实验,因为registry做卷的定义
不指定时的路径名称
指定卷时的情况
当我们给bind mount 模式挂载时加上ro可以防止替换原来的内容
二、卷插件简介
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自身的处理完成客户端的请求。
三、convoy卷插件
convoy卷插件实现
支持三种运行方式:devicemapper、NFS、EBS。
以下实验使用nfs方式
1.在所有节点提前挂载NFS存储
(server1作为i服务端)
server2作为客户端
yum install nfs-utils.x86_64 -y
vim /etc/exports
/nfsdata *(rw,no_root_squash)
systemctl enable --now nfs
2.convoy卷插件安装
server1和server2作相同操作
3.创建卷
4.使用卷
tar zxf convoy.tar.gz
mv convoy* /usr/local/bin/
mkdir -p /etc/docker/plugins/ ##此目录下村存放sock的路径
convoy daemon --drivers vfs --driver-opts vfs.path=/nfsdata & ## 启动插
yum install nfs-utils.x86_64 -y
vim /etc/exports
/nfsdata *(rw,no_root_squash)
systemctl enable --now nfs
showmount -e
Export list for server1:
/nfsdata *
mkdir /nfsdata
chmod 777 /nfsdata/
convoy create vol1
convoy list
docker run -d --name demo -v vol1:/usr/share/nginx/html --volume-driver=convoy nginx
curl 172.17.0.2
www.westos.org