IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Docker----数据卷、安全 -> 正文阅读

[系统运维]Docker----数据卷、安全

一 Docker数据卷管理

Docker数据卷管理

为什么要用数据卷

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

docker数据卷

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

docker提供了两种卷:

  • bind mount
  • docker managed volume
    在这里插入图片描述

1.bind mount

是将主机上的目录或文件mount到容器里。
使用 -v 选项指定路径,格式 <host path>:<container path>
在这里插入图片描述在容器里查看是否和/dockerdata下面的文件一致

在这里插入图片描述
删除容器demo和之前的数据卷
在这里插入图片描述在这里插入图片描述
挂载su主机server1的dvd.repo到容器内,可以在容器中cat到此文件
bind mount 默认权限是读写rw,可以在挂载时指定只读ro。
-v选项指定的路径,如果不存在,挂载时会自动创建。

在这里插入图片描述权限为ro,所有不能w
在这里插入图片描述

2.docker managed volume

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

创建数据卷webdata,创建的卷会自动生成在 /var/lib/docker/volumes 目录下
在这里插入图片描述
在这里插入图片描述
未修改时为nginx的默认登陆页面
在这里插入图片描述
不需要指定mount源,直接默认为容器创建卷目录
在这里插入图片描述
在这里插入图片描述
某些镜像在构建过程中设定了数据卷,nginx无,registry有

在这里插入图片描述
在这里插入图片描述

二 Docker卷插件

1.简介

docker 卷默认使用的是local类型的驱动,只能存在宿主机,跨主机的volume就需要使用第三方的驱动,可以查看以下链接:
https://docs.docker.com/engine/extend/legacy_plugins/#volume-plugins
docker官方只提供了卷插件的api,开发者可以根据实际需求定制卷插件驱动。
https://docs.docker.com/engine/extend/plugins_volume/#volume-plugin-protocol

在这里插入图片描述

(1)Docker Plugin 是以Web Service的服务运行在每一台DockerHost上的,通过HTTP协议传输RPC风格的JSON数据完成通信。
(2)Plugin的启动和停止,并不归Docker管理,DockerDaemon依靠在缺省路径下查找Unix Socket文件,自动发现可用的插件。
(3)当客户端与Daemon交互,使用插件创建数据卷时,Daemon会在后端找到插件对应的 socket文件,建立连接并发起相应的API请求,最终结合Daemon自身的处理完成客户端的请求。

2.convoy卷插件实现

支持三种运行方式:devicemapper、NFS、EBS
以下实验使用nfs方式。
下载软件:
https://github.com/rancher/convoy/releases/download/v0.5.0/
convoy.tar.gz
在所有节点提前挂载NFS存储。

在服务端server1和server2客户端上安装NFS
在这里插入图片描述在这里插入图片描述
服务端server1创建/mnt/nfs(准备挂载目录),修改并编写/etc/exports,启动nfs服务并查看
在这里插入图片描述
部署convoy插件,解压安装包
将convey的二进制文件移动到/usr/local/bin下便于直接调用
在这里插入图片描述
启动convoy插件,打入后台
在这里插入图片描述
查看进程
在这里插入图片描述
/etc/docker/plugins/ 存放sock的路径
在这里插入图片描述
为docker引擎指定convoy的sock的文件到/etc/docker/plugins/convoy.spec
在这里插入图片描述创建卷vol1
在这里插入图片描述
convoy list 可以看到vol1,convoy inspect查看详细信息

在这里插入图片描述server2的操作同server1
在这里插入图片描述

tar zxf convoy.tar.gz
cd convoy/
mv convoy* /usr/local/bin/
convoy daemon --drivers vfs --driver-opts vfs.path=/mnt/nfs &
ls /mnt/nfs/
mkdir -p /etc/docker/plugins/
echo "unix:///var/run/convoy/convoy.sock" > /etc/docker/plugins/convoy.spec
docker volume ls

测试:
使用vol1挂载测试
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

在这里插入图片描述删除:

docker rm -f demo
convoy delete vol1
kill -9 5446
rm -f /etc/docker/plugins/*

删除元数据,重启服务

cd /var/lib/docker/volumes/
rm metadata.db
systemctl restart docker
docker volume ls

在这里插入图片描述

3.convoy卷插件子命令

convoy list		列出卷
convoy delete		删除卷
convoy snapshot create	创建快照
convoy snapshot delete	删除快照
convoy backup create		创建备份
convoy create res1 --backup <url>		还原备份

三 理解Docker安全

(1)Docker容器的安全性,很大程度上依赖于Linux系统自身,评估Docker的安全性时,主要考虑以下几个方面:

  • Linux内核的命名空间机制提供的容器隔离安全
  • Linux控制组机制对容器资源的控制能力安全。
  • Linux内核的能力机制所带来的操作权限安全
  • Docker程序(特别是服务端)本身的抗攻击性。
  • 其他安全增强机制对容器安全性的影响。

(2)命名空间隔离的安全

  • 当docker run启动一个容器时,Docker将在后台为容器创建一个独立的命名空间。命名空间提供了最基础也最直接的隔离。
  • 与虚拟机方式相比,通过Linux namespace来实现的隔离不是那么彻底。
  • 容器只是运行在宿主机上的一种特殊的进程,那么多个容器之间使用的就还是同一个宿主机的操作系统内核。
  • 在 Linux 内核中,有很多资源和对象是不能被 Namespace 化的,比如:时间。

(3)控制组资源控制的安全

  • 当docker run启动一个容器时,Docker将在后台为容器创建一个独立的控制组策略集合。
  • Linux Cgroups提供了很多有用的特性,确保各容器可以公平地分享主机的内存、CPU、磁盘IO等资源。
  • 确保当发生在容器内的资源压力不会影响到本地主机系统和其他容器,它在防止拒绝服务攻击(DDoS)方面必不可少。

(4)内核能力机制

  • 能力机制(Capability)是Linux内核一个强大的特性,可以提供细粒度的权限访问控制。
  • 大部分情况下,容器并不需要“真正的”root权限,容器只需要少数的能力即可。
  • 默认情况下,Docker采用“白名单”机制,禁用“必需功能”之外的其他权限。

(5)Docker服务端防护

  • 使用Docker容器的核心是Docker服务端,确保只有可信的用户才能访问到Docker服务。
  • 将容器的root用户映射到本地主机上的非root用户,减轻容器和主机之间因权限提升而引起的安全问题。
  • 允许Docker 服务端在非root权限下运行,利用安全可靠的子进程来代理执行需要特权权限的操作。这些子进程只允许在特定范围内进行操作。

(6)其他安全特性

  • 在内核中启用GRSEC和PAX,这将增加更多的编译和运行时的安全检查;并且通过地址随机化机制来避免恶意探测等。启用该特性不需要Docker进行任何配置。
  • 使用一些有增强安全特性的容器模板。
  • 用户可以自定义更加严格的访问控制机制来定制安全策略。
  • 在文件系统挂载到容器内部时,可以通过配置只读模式来避免容器内的应用通过文件系统破坏外部环境,特别是一些系统运行状态相关的目录。

四 容器资源控制

Linux Cgroups 的全称是 Linux Control Group。

  • 是限制一个进程组能够使用的资源上限,包括 CPU、内存、磁盘、网络带宽等等。
  • 对进程进行优先级设置、审计,以及将进程挂起和恢复等操作。

Linux Cgroups 给用户暴露出来的操作接口是文件系统。

  • 它以文件和目录的方式组织在操作系统的 /sys/fs/cgroup 路径下。
  • 执行此命令查看:mount -t cgroup

在 /sys/fs/cgroup 下面有很多诸如 cpuset、cpu、 memory 这样的子目录,也叫子系统。
在每个子系统下面,为每个容器创建一个控制组(即创建一个新目录)。 控制组下面的资源文件里填上什么值,就靠用户执行 docker run
时的参数指定。

查看docker run用于pid的用法
在这里插入图片描述查看docker run用于内存限制的用法
在这里插入图片描述查看docker run用于io的用法
在这里插入图片描述

1.内存限制

容器可用内存包括两个部分:物理内存和swap交换分区。
在这里插入图片描述进入容器限制目录,查看内存限制,与本机一致,是继承本机的限制

容器限制目录 /sys/fs/cgroup/memory/docker/
在这里插入图片描述进入demo容器的子进程目录,查看内存最大限制
在这里插入图片描述进入容器进程目录,查看限制文件,发现修改后内存为200M
在这里插入图片描述
在这里插入图片描述进入容器内部查看
在这里插入图片描述

安装cgroup操作命令模块:libcgroup-tools.x86_64
在这里插入图片描述

创建新的项目x1的限制目录,会自动继承主机的限制文件
在这里插入图片描述限制x1内存最大为200M
在这里插入图片描述

/dev/shm/ 内存中的目录,在此目录/dev/shm/中创建文件会占用内存

temfs临时文件系统会自动挂载:是物理内存的一半
在这里插入图片描述
在这里插入图片描述
当内存超过限制的200M时,发现可用内存不变!!

在这里插入图片描述在这里插入图片描述

发现超过的内存是启用了swap分区,关闭swap分区,无法使用大于200的内存,killed,限制成功
在这里插入图片描述
恢复swap分区,删除bigfile文件

在这里插入图片描述
在这里插入图片描述
限制内存和swap分区共同的大小:200M
在这里插入图片描述
进入/dev/shm目录中,截取300M数据,直接killed
在这里插入图片描述

2.CPU限额

cpu限制目录:/sys/fs/cgroup/cpu ,创建新的项目x2
在这里插入图片描述修改优先级,将进程加入tasks才能管理
在这里插入图片描述

在这里插入图片描述
top查看进程占用cpu情况
在这里插入图片描述
创建第二个进程
在这里插入图片描述

top查看进程,发现还是100%使用cpu
在这里插入图片描述虚拟机有两个cpu,没有发生资源争抢,关闭cpu1(注意cpu0是无法关闭的),单个cpu再次查看top

在这里插入图片描述
top查看,关闭一个cpu后,一个进程为另个进程cpu使用率的10%左右
在这里插入图片描述
恢复cpu1
在这里插入图片描述
在这里插入图片描述恢复进程优先级

在这里插入图片描述
cpu_period 和 cpu_quota 这两个参数需要组合使用,用来限制进程在长度为 cpu_period 的一段时间内,只能被分配到总量为 cpu_quota 的 CPU 时间
在这里插入图片描述

以下设置表示20%的cpu时间
在这里插入图片描述
在这里插入图片描述tasks追加第二个进程
在这里插入图片描述
发现2个进程共占用20%
在这里插入图片描述
删除x2
在这里插入图片描述

3.Block IO限制

–device-write-bps限制写设备的bps

拉起容器,限制IO速率为30M,direct IO 不使用文件缓存,不加oflag=direct速度更快,访问内存更强,家参数是先访问io,所以会慢
在这里插入图片描述

五 docker安全加固

xcfs增强容器隔离性和资源可见性

安装并开启服务,查看进程
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
查看cpu详细信息
在这里插入图片描述
查看mem详细信息

在这里插入图片描述
pull ubuntu镜像
在这里插入图片描述
利用lxcfs增强docker容器隔离性和资源可见性,容器内可以看到,内存被限制
在这里插入图片描述
不加特权无法操作
在这里插入图片描述
设置特权级运行的容器:–privileged=true
在这里插入图片描述
设置容器白名单:--cap-add

–privileged=true 的权限非常大,接近于宿主机的权限,为了防止用户的滥用,需要增加限制,只提供给容器必须的权限。此时Docker提供了权限白名单的机制,使用–cap-add添加必要的权限。
capabilities手册地址:
http://man7.org/linux/man-pages/man7/capabilities.7.html

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

docker安全拓展

在这里插入图片描述
在这里插入图片描述

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-07-24 11:53:55  更:2021-07-24 11:54:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 0:41:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码