Docker数据卷、Docker安全

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同样
    在这里插入图片描述
    在这里插入图片描述
  • 在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 指定卷插件创建
    在这里插入图片描述

Docker安全

  • 在这里插入图片描述

理解Docker安全

命名空间隔离的安全

  • 在这里插入图片描述

控制组资源控制的安全

  • 在这里插入图片描述

内核能力机制

  • 在这里插入图片描述
  • down接口无权限
    在这里插入图片描述

Docker服务端防护

  • 在这里插入图片描述

其他安全特性

  • 在这里插入图片描述

容器资源控制

容器资源控制

  • 在这里插入图片描述
  • 激活
    在这里插入图片描述
  • 被挂载到了 /sys/fs/cgroup/
    在这里插入图片描述
  • 在这里插入图片描述
  • 在这里插入图片描述
  • 过滤cpu、内存

控制内核

在这里插入图片描述

  • 当前cpu为4核
    在这里插入图片描述
  • 若为4核观察优先级
    在这里插入图片描述
  • “–it”交互式,退出回收
  • 20%
  • 对比观察
  • 消耗cpu资源:无限零设备,取值不定不定,传入到空设备
  • 在这里插入图片描述
  • 使用top查看
  • 占用了100%,dd命令占了4个核在这里插入图片描述
  • 退出即回收
  • 对比输出
    在这里插入图片描述
  • 被限制在20%
    在这里插入图片描述
  • 限制在40%
    在这里插入图片描述
    在这里插入图片描述
  • 创建web1,复制其ID:953f8b5afbec
    在这里插入图片描述
  • 在这里插入图片描述
    在这里插入图片描述
  • 配额多少,100000
  • -1,无限制
    在这里插入图片描述
  • 是自动创建的
  • 删除容器
    在这里插入图片描述
  • 再次创建,设定百分比
    在这里插入图片描述
  • 已经无缝对接了
    在这里插入图片描述
  • 删除之后,目录就没了
    在这里插入图片描述

控制内存大小写入量

  • 本来是无限制的
    在这里插入图片描述
  • 安装辅助工具包,内含cgexec
    在这里插入图片描述
  • 在memory里面创建一个x1控制器
    在这里插入图片描述
  • docker目录里的参数都是从memory复制的
    在这里插入图片描述
  • 单位为字节,大约为200兆
  • 10241024200
  • 209715200覆盖原先的值
    在这里插入图片描述
  • 但是该参数修改后并不针对任何进程
  • tasks里面放了控制的进程
  • 控制直接使用物理内存
  • 操作系统启动时会在该目录下挂载tmpfs在这里插入图片描述
  • 为物理内存的一半
    在这里插入图片描述
  • 消耗可用内存,100兆
    在这里插入图片描述
  • 消耗可用内存,200兆
    在这里插入图片描述
  • 删除后又恢复了
    在这里插入图片描述
  • 是独占还是共享?
  • 写入300兆,使用超级用户的身份直接执行的,没有任何的限制
    在这里插入图片描述
  • 交换分区:当物理内存不够了,使用交换分区100兆
    在这里插入图片描述
  • 如果想阻止swap
    在这里插入图片描述
  • 限制内存加交换分区总共可以多少
  • 直接killed掉
    在这里插入图片描述
  • 容器内的进程出现这种问题,也会被killed掉
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 同步存在限制
    在这里插入图片描述
  • tasks资源:nginx进程
    在这里插入图片描述
    在这里插入图片描述

磁盘限制

  • 在这里插入图片描述
  • 控制读和写的
    在这里插入图片描述
  • 输出到根,写到设备上,就相当于写在硬盘上,容器共享的。总共写100兆,每秒30兆,直连的
    在这里插入图片描述
  • 取消直连,oflag=direct,会走文件缓存
    在这里插入图片描述
  • 之前学过的其他磁盘控制,但其实不精准,限制的是虚拟内存,而控制组控制的非常精准
  • cat /etc/security/limits.conf
    在这里插入图片描述

Docker安全加固

lxcfs强隔离

  • 在这里插入图片描述
  • 进入容器查看,把不要的容器进行回收
  • 给busybox加内存限制
    在这里插入图片描述
  • 容器内和宿主机内看到的数据一样
  • 因为/proc/没有被隔离
  • free -m 读的是/proc/meminfo(内存文件,总共可用的)
    在这里插入图片描述
  • 没有做隔离
  • 安装lxcfs-2.0.5-3.el7.centos.x86_64,有依赖性,用yum install安装
  • 专门用来作隔离的
    在这里插入图片描述
  • 运行,打入后台,敲下回车退出
    在这里插入图片描述
  • 六个关键系统资源
    在这里插入图片描述
  • 把想看到的信息(/cfs/六个信息)挂接覆盖到容器内
docker run -it -m 256m \
-v /var/lib/lxcfs/proc/cpuinfo:/proc/cpuinfo:rw \
-v  /var/lib/lxcfs/proc/diskstats:/proc/diskstats:rw \
-v  /var/lib/lxcfs/proc/meminfo:/proc/meminfo:rw \
-v  /var/lib/lxcfs/proc/stat:/proc/stat:rw \
-v  /var/lib/lxcfs/proc/swaps:/proc/swaps:rw \
-v  /var/lib/lxcfs/proc/uptime:/proc/uptime:rw \
ubuntu
  • 此时容器内存变为256兆,跟核完全同步
    在这里插入图片描述
  • 本身隔离是由/sys/fs/cgroup来完成,lxcfs只是提供了一层隔离

特权

在这里插入图片描述

  • 正常情况下进入容器内,是不让做操作的
  • 例如想对网卡做set down,无权限
    在这里插入图片描述
  • 给网卡添加一个IP,被拒绝
    在这里插入图片描述
    在这里插入图片描述
  • 该选项加上去就是超级用户了
  • 此时可以看到磁盘
    在这里插入图片描述
  • 此时,down掉网卡有权限
    在这里插入图片描述
    在这里插入图片描述
  • Linux内核提供了能力机制
  • 权限列表
    在这里插入图片描述
  • 添加权限在这里插入图片描述
  • 只有管理网络有权限,操作磁盘没权限
    在这里插入图片描述
    在这里插入图片描述
  • 只给必要的权限,尽量少给或者不给
  • 加固思路
    在这里插入图片描述
  • 新版本都是用的是Clair,扫描镜像漏洞
    在这里插入图片描述
  • TLS验证——加密连接
  • 将其切换锁定到普通用户目录里面,整个容户都和超级用户无关。docker引擎实际上用的是超级用户
    在这里插入图片描述
  • 限制cpu核心资源
    在这里插入图片描述
  • docker镜像仍然是是容器镜像的标准,是容器技术之一
  • docker daemon(服务于集群调度) ->调用 containerd -> runc
  • 1.24版本的k8s不支持docker,所以写了个插件支持docker
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值