docker-数据卷管理

1.简介

为什么要用数据卷

  • docker分层文件系统
    – 性能差
    – 生命周期与容器相同

  • docker数据卷
    – mount到主机中,绕开分层文件系统
    – 和主机磁盘性能相同,容器删除后依然保留
    – 仅限本地磁盘,不能随容器迁移

  • docker提供两种卷
    – bind mount
    – docker managed volume

  • docker manage volume
    – bind mount必须指定host文件系统路经,限制了移植性
    – docker manage volumue不需要指定mount源,docker自动为容器创建数据卷目录
    – 默认创建的数据卷目录都在/var/lib/docker/volumes中
    – 如果挂载时指向容器内已有的目录,原数据会被复制到volume中

2.挂载方式

2. 1 bind mount

  • 是将主机上的目录或文件mount到容器里
  • 使用直观高效,易于理解
  • 使用-v选项指定路径,格式<host path>:<container path>

指定挂载,可以冒号前为宿主机,冒号后为容器,每个挂载最后可指定读写权限:
docker run -it --rm -v /data1:/data1 -v /data2:/data2:ro -v /etc/yum.repos.d/dvd.repo:/mnt/dvd.repo:ro busybox
在这里插入图片描述
容器退出后,能写入的文件可保留在宿主机上

bind mount默认权限是读写,可以在挂载时指定只读ro

  • -v选项指定的路径,如果不存在,挂载时会自动创建
  • 可以挂载多个文件夹

2.2 docker manager volume

在server4上:
打包:docker save webserver:v1 -o webserver.tar
分享给server5:scp webserver.tar server5:
在server5上加载:docker load -i webserver.tar

在server4上:
docker run -d --name registry registry
在server5上:
为防止速度过慢,在此将server5的加速器也替换成为阿里云镜像加速器,在server4上传过去:

cd /etc/docker/
scp daemon.json server5:/etc/docker/

在server5上reload
systemctl reload docker.device
服务器上下载一个registry:ocker pull registry

注:如果之前在server5上做了桥接实验,需要改变下内核参数:
激活内核forward功能:sysctl -a net.ipv4.ip_forward=0
打开内核forward功能:sysctl -w net.ipv4.ip_forward=1

启动registry:docker run -d --name registry registry
查看该容器的挂载卷位置:docker inspect registry
在这里插入图片描述

进入该目录:cd /var/lib/docker/volumes/4442ab2c0008b72357ab5088606ab836648b1d8a07d4646ae5430c3fcf914d27/_data

但是一般该方法自动创建的卷名随机过长,
删除该容器:docker rm -f registry
列出所有挂载卷:docker volume ls
回收未使用卷:docker volume prune
创建registry卷:docker volume create registry
查看该卷:docker volume inspect registry
在这里插入图片描述
在创建西容器时指定挂载卷名即可:docker run -d --name registry -v registry:/var/lib/registry registry
查看该容器挂载卷:docker inspect registry
在这里插入图片描述
成功,挂载到了创建的卷中。

2.3 对比

bind mount与docker manager volume对比

  • 相同点:两者都是host文件系统中的某个路径
  • 不同点
-bind mountdocker managed volume
volume位置可以任意指定/var/lib/docker/volumes/…
对已有mount point影响隐藏并替换为volume原有数据复制到volume
是否支持单个文件支持不支持,只能是目录
权限控制可设置为只读,默认读写权限无控制,均为读写权限
移植性移植性弱,与host path绑定移植性强,无需指定host目录

3.卷插件简介

3.1 简介

  • docker卷默认使用的是local类型的驱动,只能存在于宿主机,跨主机的volume就需要使用第三方的驱动

  • docker官方只提供了卷插件的api,开发在可以根据实际需求定制卷插件驱动
    在这里插入图片描述

  • Docker Plugin是以Web Server的服务运行在每一台Docker Host上的,通过HTTP协议传输RPC风格的JSON数据完成通信-

  • Plugin的启动和停止,并不归Docker管理,Docker Daemon依靠在缺省路径下查找Unix Socket文件,自动发现可用的插件

  • 当客户端与Daemon交互,使用插件创建数据卷时,Daemon会在后端找到插件对应的socket文件,建立连接并发起相应的API请求,最终结合Daemon自身的处理完成客户端的请求。

3.2 convoy卷插件

convoy卷插件实现

  • 支持三种运行方式:devicemapper,NFS,EBS
  • 以下实验使用nfs方式
  • 下载convoy.tar.gz
  • 在所有节点提前挂载NFS储存

容器调度器:
对server5上的数据,当server4上停止的时候,在server4上实现同步
挂载卷:docker run -d --name demo -v webserver:/usr/share/nginx/html:ro nginx
查看:docker volume inspect webserver
在这里插入图片描述

停止demo:docker rm -f demo

server4作服务端:
安装nfs工具包:yum install -y nfs-utils

  • 编辑配置文件vim /etc/exports
  • /nfsdata *(rw,no_root_squash)
  • 开机自启:systemctl enable --now nfs
  • mkdir /nfsdata,chmod 777 /nfsdata/
    此时完成目录的nfs共享

在server5上:
安装nfs工具包:yum install -y nfs-utils
查看nfs共享目录: showmount -e 172.25.119.4
在这里插入图片描述
新建目录:mkdir /nfsdata
挂载 :mount 172.25.119.4:/nfsdata /nfsdata/
此时实现文件共享

解压:tar zxf convoy.tar.gz
移动:mv convoy* /ysr/local/bin/
新建:mkdir -p /etc/docker/plugins/
在这里插入图片描述
启动convoy:convoy daemon --drivers vfs --driver-opts vfs.path=/nfsdata &
放入插件echo "unix:///var/run/convoy/convoy.sock" > /etc/docker/plugins/convoy.spec
在这里插入图片描述

在server4上:
下载解压:tar zxf convoy.tar.gz,mv convoy /usr/local/bin/
启动convoy:convoy daemon --drivers vfs --driver-opts vfs.path=/nfsdata &
新建目录:mkdir /etc/docker/plugins
放入插件echo "unix:///var/run/convoy/convoy.sock" > /etc/docker/plugins/convoy.spec

在server4上创建卷:
convoy create vol1
在这里插入图片描述
此时在server5上也可以看到新建卷:
在这里插入图片描述

运行时需要指定卷的驱动信息:
docker run -d --name demo -v vol1:/usr/share/nginx/html --volume-driver convoy nginx
在这里插入图片描述
在/nfsdata/vol1下:

cat index.html 
www.westos_lee.org
curl 172.17.0.2
www.westos_lee.org

将server5上的数据迁移到server1上并且保证数据一致:
释放server5上容器:docker rm -f 55e761953032
此时文件数据被保存
在server4上运行:

docker run -d --name demo -v vol1:/usr/share/nginx/html --volume-driver convoy nginx

在这里插入图片描述
此时仍然可以解析到:

curl 172.17.0.2
www.westos_lee.org
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页