Docker数据卷、Docker安全
- Docker数据卷
- Docker数据卷管理
- bind mount
- docker数据卷
- 两种方式不同和相同
- 卷插件简介
- convoy卷插件实践
Docker数据卷
- 主要解决存储问题、容器数据滞留
Docker数据卷管理
bind mount
- “-v”+宿主机路径+容器内nginx发布目录
- 新建一个首页
- 现在容器内目录和发布目录内容同步
- 访问的是容器IP的服务,是同步的
- 进入容器内,数据可以随意修改,这是有风险的
- “-ro”默认可读,“-rw”默认可读写
- 可挂接文件,可以写多个
- 不可以覆盖或者追加
- data1不能写但data2可写
- 该方式一致性会差一些
- 所有数据信息都在该位置下
- 整个docker的数据目录都在这个位置
- docker管理卷
- 创建一个卷,卷就在该目录下
- 镜像里需要有一个挂载卷的定义
- 观察docker是否会为我们自动创建卷
- 随机创建,挂接到该位置
- 检测volume定义,自动挂接该目录
- 若没有,只能通过-v手动指定
- 当不知道这么多卷有没有都在用
- 使用参数
- 这样会删除所有的卷
- "-y"用的不删,没用的就会直接回收掉
- 删除容器时,卷是保留的,目的是用来做数据持久化的
docker数据卷
- “-v”方式指定挂接
- 不是绝对路径而是卷的名字
- 已经成功挂接
- 在该位置创建数据就会放到容器内
- 该种方式挂接,里面直接有数据
- 挂接管理卷与随机指定路径挂接不一样
- bind mount挂接会直接覆盖数据,但是docker管理卷挂进去会把容器内的原有的数据拷贝进来
- 但是docker管理卷默认挂接的权限不好控制
- 联合在一起用会更好
两种方式不同和相同
卷插件简介
- 以上这两种方式都不能实现跨主机同步,都是单机的。
- 实际中是一个集群,容器原先是在server2中运行,后来被迁移到server1,那如何才能访问到原先的数据
- 官方提供驱动和API(可以定制),类似于web服务器,并不属于docker本身,但它们之间可以通信。
- 逻辑
- 需要卷插件时,会自动扫描看有没有可以利用的卷插件,扫描到直接交给Plugin去连接
- 建立NFS服务器
- 位置,都可以读写
- 如果root去写的话不用转换身份
- showmount -e 只是查看nfs的输出
- 把权限全都交给他
- nfs的服务端已经准备好,现在要启动卷插件
- 下载插件
- 解压,拷贝二进制文件
- 使其在系统环境里可以直接调用到
- 该目录卷插件在里面创建
- 软链接
- 创建plugins目录
- 创建文件,名字是卷插件的名字后缀是固定的
- 内容是程序默认sock的路径
- docker就是在这里自动扫描他的缺省路径,来去发现可用的卷插件
- 创建一个卷
- 默认创建目录
- 把卷挂接到容器内
- 如果容器被调度到server2上,如何实现数据一致
- server2本地创建目录然后把server1挂接上去
- 已成功同步
- 从server1拷贝插件到server2
- 在server2也得部署插件
- 解压并移走
- 启动
- 创建卷插件spec文件,缺省扫描路径
- “&”
- 执行启动命令后屏幕输出以上内容,终端出现“假死”情况,直接回车即可继续使用该终端。
- 容器删掉了但卷在
- 迁移的时候用同样地命令挂上去
- 本地有一个卷的名字跟他冲突了,默认挂载的是local的类型
- 要保证volume的驱动一样
- 再次创建,数据才能同步
convoy卷插件实践
- docker服务端引擎访问的是convoy的卷插件,再访问到nfs的存储,由底层的nfs存储再去同步底层文件系统。
- 往server2该目录写东西,其实就通过网络写到了server1服务端
- 在server2创建卷vol2
- server1同步
- 加了卷插件之后,docker重启的速度会变慢
- 回收vol1和vol2
- 重启docker,只会多了debug调试信息
- 错误修改
- 现在删除卷插件,否则会影响server1 docker重启速度
- 删除convoy后台服务
- 删除插件目录
- 删除留有的卷插件信息
- 删除根目录
- 在server1停掉服务
- 删除plugins目录
- 这时就无法扫描到
- 进入/var/lib/docker/
- 所有数据和卷都在这个位置
- 这个数据文件重启docker会再次生效
- server1同样
- 指定卷插件创建