Linux企业运维——Docker(六)数据卷
文章目录
一、数据卷管理
为什么要用数据卷
- docker分层文件系统
性能差
生命周期与容器相同 - docker数据卷
mount到主机中,绕开文件分层系统
和主机磁盘性能相同,容器删除后依然保留
仅限本地磁盘,不能随容器迁移
docker提供了两种卷:
- bind mount
- 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 mount | docker managed volume |
---|---|---|
volume位置 | 可任意指定 | /var/lib/docker/volumes/… |
对已有mount point影响 | 隐藏并替换为volume | 复制原有数据到volume |
是否支持单个文件 | 支持 | 不支持,只能是目录 |
权限控制 | 默认为读写权限,可设置为只读 | 无控制,均为读写权限 |
移植性 | 移植性弱,与host path绑定 | 移植性强,无需指定host目录 |
二、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挂载测试,可以正常访问网页