• 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 此时容器内存变为256兆,跟核完全同步
      在这里插入图片描述
    • 本身隔离是由/sys/fs/cgroup来完成,lxcfs只是提供了一层隔离

    特权

    在这里插入图片描述

    • 正常情况下进入容器内,是不让做操作的
    • 例如想对网卡做set down,无权限
      在这里插入图片描述
    • 给网卡添加一个IP,被拒绝
      在这里插入图片描述
      在这里插入图片描述
    • 该选项加上去就是超级用户了
    • 此时可以看到磁盘
      在这里插入图片描述
    • 此时,down掉网卡有权限
      在这里插入图片描述
      在这里插入图片描述
    • Linux内核提供了能力机制
    • 权限列表
      在这里插入图片描述
    • 添加权限在这里插入图片描述
    • 只有管理网络有权限,操作磁盘没权限
      在这里插入图片描述
      在这里插入图片描述
    • 只给必要的权限,尽量少给或者不给
    • 加固思路
      在这里插入图片描述
    • 新版本都是用的是Clair,扫描镜像漏洞
      在这里插入图片描述
    • TLS验证——加密连接
    • 将其切换锁定到普通用户目录里面,整个容户都和超级用户无关。docker引擎实际上用的是超级用户
      在这里插入图片描述
    • 限制cpu核心资源
      在这里插入图片描述
    • docker镜像仍然是是容器镜像的标准,是容器技术之一
    • docker daemon(服务于集群调度) ->调用 containerd -> runc
    • 1.24版本的k8s不支持docker,所以写了个插件支持docker
      在这里插入图片描述
  • 相关阅读:
    【Android】UI布局之布局(帧布局、表格布局)
    Ansible-Tower web界面管理安装
    微信小程序使用npm教程
    饥荒专用服务器
    揭开ChatGPT面纱(2):OpenAI主类源码概览
    Ourphp建站系统存在SQL注入
    jvm zgc使用的染色指针为什么比写屏障效率高,两者都是修改引用的时候触发
    Haproxy搭建 Web 群集实现负载均衡
    Windows 下自动预约申购 i茅台
    SAP UI5 初学 ( 一 )、简介
  • 原文地址:https://blog.csdn.net/weixin_44891093/article/details/127849332