文章目录
- 前言
- 1、Docker卷管理基础
- 1.1 docker提供的两种卷之bind mount
- 1.2 docker提供的两种卷之docker managed volume
- 1.3 bind mount与docker managed volume比较
- 2、卷插件剖析
- 3、如何使用卷插件
- 3.1 convoy卷插件安装
- 3.2 创建卷
- 3.3 使用卷
前言
前面学习了docker镜像、仓库以及网络
docker容器技术3 --网络篇
这里开始学习docker数据卷
原文件系统缺点与docker数据卷优点
docker分层文件系统
- 性能差
- 生命周期与容器相同
docker数据卷
- mount到主机中,绕开分层文件系统
- 和主机磁盘性能相同,容器删除后依然保留
- 仅限本地磁盘,不能随容器迁移
1、Docker卷管理基础
docker run 在创建容器时使用 -v 参数可以挂载一个或多个数据卷到当前运行的容器中,-v
的作用是将宿主机上的目录作为容器的数据卷挂载到容器中,使宿主机和容器之间可以共
享一个目录。
1.1 docker提供的两种卷之bind mount
是将主机上的目录或文件mount到容器里。
使用直观高效,易于理解。
使用 -v 选项指定路径,格式 :
bind mount 默认权限是读写rw,可以在挂载时指定只读ro。
-v选项指定的路径,如果不存在,挂载时会自动创建。
docker run -it --rm -v /data1:/data1 \
-v /data2:/data2:ro \
-v /etc/yum.repos.d/rhel7.6.repo:/mnt/rhel7.6.repo:ro \
busybox
##测试语句
1.2 docker提供的两种卷之docker managed volume
bind mount必须指定host文件系统路径,限制了移植性。
docker managed volume 不需要指定mount源,docker自动为容器创建数据卷目录。
默认创建的数据卷目录都在 /var/lib/docker/volumes 中。
如果挂载时指向容器内已有的目录,原有数据会被复制到volume中。
-v 后面的,前面是宿主机上的指定的卷名,后面的是容器的目录
-v 主机路径:容器路径
1.3 bind mount与docker managed volume比较
相同点:两者都是 host 文件系统中的某个路径
不同点:
bind mount | docker managed voume | |
voume位置 | 可以任意指定 | /var/lib/docker/volume… |
对已有mount point影响 | 隐藏并替换为volume | 原有数据复制到volume |
支是否支持单个文件 | 支持 | 不支持,只能是目录 |
权限控制 | 可设置为只读,默认为读写 | 无控制,均为读写 |
移植性 | 移植性弱,与host path绑定 | 移植性强,无需指定host目录 |
2、卷插件剖析
docker 卷默认使用的是local类型的驱动,只能存在宿主机,跨主机的volume就需要使用第三方的驱动,可以查看链接:https://docs.docker.com/engine/extend/legacy_plugins/#volume-plugins
docker官方只提供了卷插件的api,开发者可以根据实际需求定制卷插件驱动。
可以查看链接:https://docs.docker.com/engine/extend/plugins_volume/#volume- plugin-protocol
Docker Plugin 是以Web Service的服务运行在每一台Docker Host上的,通过HTTP协议传输RPC风格的JSON数据完成通信。
Plugin的启动和停止,并不归Docker管理,Docker Daemon依靠在缺省路径下查找Unix Socket文件,自动发现可用的插件。
当客户端与Daemon交互,使用插件创建数据卷时,Daemon会在后端找到插件对应的 socket 文件,建立连接并发起相应的API请求,最终结合Daemon自身的处理完成客户端的请求。
3、如何使用卷插件
convoy卷插件支持三种运行方式:devicemapper、NFS、EBS。
以下实验使用nfs方式。
下载软件:https://github.com/rancher/convoy/releases/download/v0.5.0/convoy.tar.gz
在所有节点提前挂载NFS存储。
convoy卷插件子命令小结
convoy卷插件子命令
convoy list 列出卷
convoy delete 删除卷
convoy snapshot create 创建快照
convoy snapshot delete 删除快照
convoy backup create 创建备份
convoy create res1 --backup <url> 还原备份
3.1 convoy卷插件安装
第一步:在server1和server2节点挂载NFS存储并测试
在server1(1.2.3.1)上
yum install -y nfs-utils
vim /etc/exports
cat /etc/exports
/nfsdata *(rw,no_root_squash)
systemctl enable --now nfs
showmount -e
Export list for server1:
/nfsdata *
mkdir /nfsdata
chmod 777 /nfsdata/
ll -d /nfsdata/
drwxrwxrwx 2 root root 6 Jan 28 16:46 /nfsdata/
在server2(1.2.3.2)上
showmount -e 1.2.3.1
Export list for 1.2.3.1:
/nfsdata *
mkdir /nfsdata
mount 1.2.3.1:/nfsdata /nfsdata
ll -d /nfsdata/
drwxrwxrwx 2 root root 6 Jan 27 16:46 /nfsdata/
cd /nfsdata/
touch file1
ls
file1
回到server1(1.2.3.1)上
cd /nfsdata/
ls ##显示server2上创建的file1
file1
第二步:安装convoy卷插件
server1和server2上都需要安装
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服务没有启动
convoy daemon --drivers vfs --driver-opts vfs.path=/nfsdata &
注意:如果需要重新安装convoy,不要忘了把/var/lib/rancher/convoy目录下的内容清空
nfs文件系统需要修改文件目录权限服务机上修改,客户机没有权限
3.2 创建卷
convoy create vol1
自动生成数据目录:/nfsdata/vol1/
3.3 使用卷
docker run -d --name demo -v vol1:/usr/share/nginx/html --volume-driver convoy nginx
可以在两个主机上同时运行容器,会发现数据目录中的数据是同步的。
前面vol1有点问题,创建vol2,步骤一样。
---数据卷篇到此结束,下一篇docker--安全篇---