docker容器(4)——数据卷
Docker数据卷管理
为什么要用数据卷呢?
docker分层文件系统
- 性能差
- 生命周期与容器相同
docker数据卷 - mount到主机中,绕开分层文件系统
- 和主机磁盘性能相同,容器删除后依然保留
- 仅限本地磁盘,不能随容器迁移
docker提供的两种卷
- bind mount
- docker managed volume
bind mount
是将主机上的目录或文件mount到容器里。
使用直观高效,易于理解。
使用 -v 选项指定路径,格式 (host path):(container path)
docker run -d --name lht -v /opt/website:/usr/share/busybox/html busybox
bind mount 默认权限是读写rw,可以在挂载时指定只读ro。
-v选项指定的路径,如果不存在,挂载时会自动创建。
docker run -it --name vm1 -v /etc/yum.repos.d/dvd.repo:/etc/yum.repos.d/dvd.repo:ro rhel7 bash
docker managed volume
bind mount必须指定host文件系统路径,限制了移植性。
docker managed volume 不需要指定mount源,docker自动为容器创建数据卷目录。
默认创建的数据卷目录都在 /var/lib/docker/volumes 中。
如果挂载时指向容器内已有的目录,原有数据会被复制到volume中。
bind mount与docker managed volume对比
相同点:两者都是 host 文件系统中的某个路径
不同点:
卷插件(convoy)
# convoy卷插件子命令
convoy list 列出卷
convoy delete 删除卷
convoy snapshot create 创建快照
convoy snapshot delete 删除快照
convoy backup create 创建备份
convoy create res1 --backup <url> 还原备份
convoy卷插件实现
支持三种运行方式:devicemapper、NFS、EBS
- NFS方式:
在所有节点提前挂载NFS存储,此处我用的实验机为:
server1、server9
yum install -y nfs-utils # 下载插件
mkdir /mnt/nfs
vim /etc/exports
/mnt/nfs *(rw,no_root_squash)
chmod 777 /mnt/nfs
systemctl start nfs
解压convoy插件包,加入bash运行环境目录
配置缺省目录,运行convoy插件
tar zxf convoy.tar.gz #解压
mv convoy* /usr/local/bin/
mkdir -p /etc/docker/plugins
cd /etc/docker/plugins
echo "unix:///var/run/convoy.sock" > /etc/docker/plugins/convoy.spec
convoy daemon --drivers vfs --driver-opts vfs.path=/mnt/nfs &
convoy list
节点2上,挂载节点1的共享目录
mkdir /mnt/nfs
mount 172.25.33.9:/mnt/nfs /mnt/nfs
在节点2,解压convoy插件包,加入bash运行环境目录
配置缺省目录,运行convoy插件
在节点2创建convoy卷:
convoy create vol1
convoy list
在节点1可以看到节点2创建的卷