style: apply global formatting fixes (struct, spacing, zhlint)

This commit is contained in:
Baohua Yang
2026-02-21 11:08:52 -08:00
parent ad68b2d973
commit 79ac9c639a
159 changed files with 1708 additions and 882 deletions

View File

@@ -1,4 +1,4 @@
# 第十一章 运维管理
# 第十一章运维管理
本章将介绍 Docker 的运维管理包括监控日志与安全

View File

@@ -4,23 +4,23 @@
## Docker 日志驱动
Docker 提供了多种日志驱动Log Driver机制允许我们将容器日志转发到不同的后端
Docker 提供了多种日志驱动 (Log Driver) 机制允许我们将容器日志转发到不同的后端
常见的日志驱动包括
* `json-file`: 默认驱动将日志以 JSON 格式写入本地文件
* `syslog`: 将日志转发到 syslog 服务器
* `journald`: 将日志写入 systemd journal
* `fluentd`: 将日志转发到 fluentd 收集器
* `gelf`: 支持 GELF 协议的日志后端 Graylog
* `awslogs`: 发送到 Amazon CloudWatch Logs
* `json-file`默认驱动将日志以 JSON 格式写入本地文件
* `syslog`将日志转发到 syslog 服务器
* `journald`将日志写入 systemd journal
* `fluentd`将日志转发到 fluentd 收集器
* `gelf`支持 GELF 协议的日志后端 ( Graylog)
* `awslogs`发送到 Amazon CloudWatch Logs
## 日志管理方案
对于大规模的容器集群我们通常会采用 EFK (Elasticsearch + Fluentd + Kibana) ELK (Elasticsearch + Logstash + Kibana) 方案
* **Elasticsearch**: 负责日志的存储和全文检索
* **Fluentd/Logstash**: 负责日志的采集过滤和转发
* **Kibana**: 负责日志的可视化展示
* **Elasticsearch**负责日志的存储和全文检索
* **Fluentd/Logstash**负责日志的采集过滤和转发
* **Kibana**负责日志的可视化展示
本章将介绍如何使用 EFK 方案来处理 Docker 容器日志

View File

@@ -1,23 +1,23 @@
## ELK/EFK 堆栈
ELK (Elasticsearch, Logstash, Kibana) 是目前业界最流行的开源日志解决方案而在容器领域由于 Fluentd 更加轻量级且对容器支持更好EFK (Elasticsearch, Fluentd, Kibana) 组合也变得非常流行
ELK (ElasticsearchLogstashKibana) 是目前业界最流行的开源日志解决方案而在容器领域由于 Fluentd 更加轻量级且对容器支持更好EFK (ElasticsearchFluentdKibana) 组合也变得非常流行
### 方案架构
我们将采用以下架构
1. **Docker Container**: 容器将日志输出到标准输出 (stdout/stderr)
2. **Fluentd**: 作为 Docker Logging Driver 或运行为守护容器收集容器日志
3. **Elasticsearch**: 存储从 Fluentd 接收到的日志数据
4. **Kibana**: Elasticsearch 读取数据并进行可视化展示
1. **Docker Container**容器将日志输出到标准输出 (stdout/stderr)
2. **Fluentd**作为 Docker Logging Driver 或运行为守护容器收集容器日志
3. **Elasticsearch**存储从 Fluentd 接收到的日志数据
4. **Kibana** Elasticsearch 读取数据并进行可视化展示
### 部署流程
我们将使用 Docker Compose 来一键部署整个日志堆栈
#### 1. 编写 Compose 文件
#### 1编写 Compose 文件
1. 编写 `compose.yaml` `docker-compose.yml`配置如下
1. 编写 `compose.yaml` ( `docker-compose.yml`) 配置如下
```yaml
services:
@@ -71,9 +71,9 @@ networks:
logging:
```
#### 2. 配置 Fluentd
#### 2配置 Fluentd
创建 `fluentd/conf/fluent.conf`:
创建 `fluentd/conf/fluent.conf`
```ini
<source>
@@ -102,9 +102,9 @@ networks:
</match>
```
#### 3. 配置应用容器使用 fluentd 驱动
#### 3配置应用容器使用 fluentd 驱动
启动一个测试容器指定日志驱动为 `fluentd`:
启动一个测试容器指定日志驱动为 `fluentd`
```bash
docker run -d \
@@ -115,9 +115,9 @@ docker run -d \
nginx
```
**注意**: 确保 `fluentd` 容器已经启动并监听在 `localhost:24224`在生产环境中如果你是在不同机器上需要将 `localhost` 替换为运行 fluentd 的主机 IP
**注意**确保 `fluentd` 容器已经启动并监听在 `localhost:24224`在生产环境中如果你是在不同机器上需要将 `localhost` 替换为运行 fluentd 的主机 IP
#### 4. Kibana 中查看日志
#### 4 Kibana 中查看日志
1. 访问 `http://localhost:5601`
2. 进入 **Management**->**Kibana**->**Index Patterns**

View File

@@ -4,13 +4,17 @@
在传统架构中我们通常关注主机的 CPU内存磁盘 IO 等指标而在容器环境下除了主机层面的监控我们更关注容器级别的资源使用情况服务的运行状态以及编排系统的健康状况
## 概述
总体概述了以下内容
## 常见的监控方案
目前主流的容器监控方案包括
* **cAdvisor**: Google 开源的容器资源监控工具Docker 原生支持
* **Prometheus**: CNCF 毕业项目云原生时代最流行的监控系统
* **Grafana**: 强大的可视化平台常与 Prometheus 配合使用
* **ELK/EFK Stack**: 主要用于日志管理但也能提供一定的监控能力
* **cAdvisor**Google 开源的容器资源监控工具Docker 原生支持
* **Prometheus**CNCF 毕业项目云原生时代最流行的监控系统
* **Grafana**强大的可视化平台常与 Prometheus 配合使用
* **ELK/EFK Stack**主要用于日志管理但也能提供一定的监控能力
本章将重点介绍如何使用 Prometheus Grafana 搭建一套完整的容器监控系统

View File

@@ -8,18 +8,18 @@ Prometheus 和 Grafana 是目前最流行的开源监控组合,前者负责数
Prometheus 的主要组件包括
* **Prometheus Server**: 核心组件负责收集和存储时间序列数据
* **Exporters**: 负责向 Prometheus 暴露监控数据 Node Exporter, cAdvisor
* **Alertmanager**: 处理报警发送
* **Pushgateway**: 用于支持短生命周期的 Job 推送数据
* **Prometheus Server**核心组件负责收集和存储时间序列数据
* **Exporters**负责向 Prometheus 暴露监控数据 ( Node ExportercAdvisor)
* **Alertmanager**处理报警发送
* **Pushgateway**用于支持短生命周期的 Job 推送数据
### 快速部署
我们可以使用 Docker Compose 快速部署一套 Prometheus + Grafana 监控环境
#### 1. 准备配置文件
#### 1准备配置文件
创建 `prometheus.yml`:
创建 `prometheus.yml`
```yaml
global:
@@ -39,9 +39,9 @@ scrape_configs:
- targets: ['cadvisor:8080']
```
#### 2. 编写 Docker Compose 文件
#### 2编写 Docker Compose 文件
创建 `compose.yaml` `docker-compose.yml`:
创建 `compose.yaml` ( `docker-compose.yml`)
```yaml
services:
@@ -88,7 +88,7 @@ networks:
monitoring:
```
#### 3. 启动服务
#### 3启动服务
运行以下命令
@@ -99,11 +99,11 @@ $ docker compose up -d
启动后访问以下地址
* Prometheus: `http://localhost:9090`
* Grafana: `http://localhost:3000` (默认账号密码: admin/admin)
* Grafana`http://localhost:3000` (默认账号密码admin/admin)
### 配置 Grafana 面板
1. Grafana 中添加 Prometheus 数据源URL 填写 `http://prometheus:9090`
2. 导入现成的 Dashboard 模板例如 [Node Exporter Full](https://grafana.com/grafana/dashboards/1860) (ID: 1860) 和 [Docker Container](https://grafana.com/grafana/dashboards/193) (ID: 193)。
2. 导入现成的 Dashboard 模板例如 [Node Exporter Full](https://grafana.com/grafana/dashboards/1860) (ID1860) 和 [Docker Container](https://grafana.com/grafana/dashboards/193) (ID193)。
这样你就拥有了一个直观的容器监控大屏

View File

@@ -28,7 +28,9 @@ flowchart LR
## 核心安全机制
### 1. 命名空间Namespace
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 1命名空间
提供进程网络文件系统等资源的隔离
@@ -41,9 +43,9 @@ flowchart LR
| IPC | 进程通信 | 隔离共享内存 |
| UTS | 主机名 | 独立主机名 |
详见 [命名空间](../../14_implementation/14.2_namespace.md) 章节
详见[命名空间](../../14_implementation/14.2_namespace.md)章节
### 2. 控制组Cgroups
### 2控制组
限制容器的资源使用防止资源耗尽攻击
@@ -61,7 +63,7 @@ $ docker run --cpus=1.5 myapp
$ docker run --device-write-bps /dev/sda:10mb myapp
```
### 3. 能力机制Capabilities
### 3能力机制
Linux root 权限拆分为多个细粒度的能力Docker 默认禁用危险能力
@@ -87,6 +89,8 @@ $ docker exec myapp cat /proc/1/status | grep Cap
## 镜像安全
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 使用可信镜像
运行以下命令
@@ -149,7 +153,9 @@ $ cosign verify --key cosign.pub $IMAGE
## 运行时安全
### 1. root 用户运行
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 1 root 用户运行
> 笔者强调这是最重要的安全实践之一
@@ -179,7 +185,7 @@ CMD ["node", "server.js"]
$ docker run -u 1001:1001 myapp
```
### 2. 只读文件系统
### 2只读文件系统
运行以下命令
@@ -193,7 +199,7 @@ $ docker run --read-only myapp
$ docker run --read-only --tmpfs /tmp --tmpfs /var/run myapp
```
### 3. 禁用特权模式
### 3禁用特权模式
运行以下命令
@@ -207,7 +213,7 @@ $ docker run --privileged myapp
$ docker run --cap-add=SYS_TIME myapp
```
### 4. 限制资源
### 4限制资源
运行以下命令
@@ -220,7 +226,7 @@ $ docker run \
myapp
```
### 5. 网络隔离
### 5网络隔离
运行以下命令
@@ -239,7 +245,9 @@ $ docker run --network=isolated_net myapp
## Dockerfile 安全实践
### 1. 使用精简基础镜像
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### 1使用精简基础镜像
Dockerfile 内容如下
@@ -255,7 +263,7 @@ FROM node:22 # ~1GB
FROM ubuntu:24.04 # ~78MB
```
### 2. 多阶段构建
### 2多阶段构建
Dockerfile 内容如下
@@ -275,7 +283,7 @@ USER node
CMD ["node", "/app/server.js"]
```
### 3. 不存储敏感信息
### 3不存储敏感信息
Dockerfile 内容如下
@@ -292,7 +300,7 @@ COPY .env /app/
...
```
### 4. 固定依赖版本
### 4固定依赖版本
Dockerfile 内容如下
@@ -329,6 +337,8 @@ RUN apk add curl
## 高级安全方案
本节涵盖了相关内容与详细描述主要探讨以下几个方面
### Seccomp 系统调用过滤
限制容器可以使用的系统调用
@@ -345,7 +355,7 @@ $ docker run --security-opt seccomp=/path/to/profile.json myapp
$ docker run --security-opt apparmor=docker-default myapp
```
### 安全容器gVisor / Kata
### 安全容器 (gVisor / Kata)
需要更强隔离时
@@ -361,18 +371,18 @@ $ docker run --runtime=runsc myapp
随着软件供应链攻击日益频繁仅保障运行时安全已不足够
### 1. SBOM软件物料清单
### 1SBOM (软件物料清单)
SBOM 类似于食品的配料表列出了容器镜像中包含的所有软件包及其版本
- **生成 SBOM**: 使用 `docker buildx build --sbom` `docker scout sbom`
- **管理 SBOM**: 确保持续监控 SBOM 中的组件是否存在新披露的漏洞
- **生成 SBOM**使用 `docker buildx build --sbom` `docker scout sbom`
- **管理 SBOM**确保持续监控 SBOM 中的组件是否存在新披露的漏洞
### 2. 镜像签名Sigstore / Notary v2
### 2镜像签名 (Sigstore / Notary v2)
确保镜像在构建后未被篡改且确实来自可信的发布者
- **Cosign**: Sigstore 项目的一部分用于签署和验证容器镜像
- **Cosign**Sigstore 项目的一部分用于签署和验证容器镜像
```bash
## 使用有写权限的仓库地址
$ export IMAGE=<你的仓库地址>/myimage:tag

View File

@@ -4,6 +4,6 @@
它提供了很多有用的特性以及确保各个容器可以公平地分享主机的内存CPU磁盘 IO 等资源当然更重要的是控制组确保了当容器内的资源使用产生压力时不会连累主机系统
尽管控制组不负责隔离容器之间相互访问处理数据和进程它在防止拒绝服务DDOS攻击方面是必不可少的尤其是在多用户的平台比如公有或私有的 PaaS控制组十分重要例如当某些应用程序表现异常的时候可以保证一致地正常运行和性能
尽管控制组不负责隔离容器之间相互访问处理数据和进程它在防止拒绝服务 (DDOS) 攻击方面是必不可少的尤其是在多用户的平台 (比如公有或私有的 PaaS) 控制组十分重要例如当某些应用程序表现异常的时候可以保证一致地正常运行和性能
控制组机制始于 2006 内核从 2.6.24 版本开始被引入

View File

@@ -1,19 +1,19 @@
## Docker服务端的防护
## Docker 服务端的防护
运行一个容器或应用程序的核心是通过 Docker 服务端Docker 服务的运行目前需要 root 权限因此其安全性十分关键
首先确保只有可信的用户才可以访问 Docker 服务Docker 允许用户在主机和容器间共享文件夹同时不需要限制容器的访问权限这就容易让容器突破资源限制例如恶意用户启动容器的时候将主机的根目录`/`映射到容器的 `/host` 目录中那么容器理论上就可以对主机的文件系统进行任意修改了这听起来很疯狂但是事实上几乎所有虚拟化系统都允许类似的资源共享而没法禁止用户共享主机根文件系统到虚拟机系统
首先确保只有可信的用户才可以访问 Docker 服务Docker 允许用户在主机和容器间共享文件夹同时不需要限制容器的访问权限这就容易让容器突破资源限制例如恶意用户启动容器的时候将主机的根目录 `/` 映射到容器的 `/host` 目录中那么容器理论上就可以对主机的文件系统进行任意修改了这听起来很疯狂但是事实上几乎所有虚拟化系统都允许类似的资源共享而没法禁止用户共享主机根文件系统到虚拟机系统
这将会造成很严重的安全后果因此当提供容器创建服务时例如通过一个 web 服务器要更加注意进行参数的安全检查防止恶意的用户用特定参数来创建一些破坏性的容器
这将会造成很严重的安全后果因此当提供容器创建服务时 (例如通过一个 web 服务器)要更加注意进行参数的安全检查防止恶意的用户用特定参数来创建一些破坏性的容器
为了加强对服务端的保护Docker REST API客户端用来跟服务端通信 0.5.2 之后使用本地的 Unix 套接字机制替代了原先绑定在 127.0.0.1 上的 TCP 套接字因为后者容易遭受跨站脚本攻击现在用户使用 Unix 权限检查来加强套接字的访问安全
为了加强对服务端的保护Docker REST API (客户端用来跟服务端通信) 0.5.2 之后使用本地的 Unix 套接字机制替代了原先绑定在 127.0.0.1 上的 TCP 套接字因为后者容易遭受跨站脚本攻击现在用户使用 Unix 权限检查来加强套接字的访问安全
用户仍可以利用 HTTP 提供 REST API 访问建议使用安全机制确保只有可信的网络或 VPN或证书保护机制例如受保护的 stunnel ssl 认证下的访问可以进行此外还可以使用 [ HTTPS 和证书](https://docs.docker.com/engine/security/https/) 来加强保护。
用户仍可以利用 HTTP 提供 REST API 访问建议使用安全机制确保只有可信的网络或 VPN或证书保护机制 (例如受保护的 stunnel ssl 认证) 下的访问可以进行此外还可以使用 [HTTPS 和证书](https://docs.docker.com/engine/security/https/)来加强保护。
最近改进的 Linux 命名空间机制将可以实现使用非 root 用户来运行全功能的容器这将从根本上解决了容器和主机之间共享文件系统而引起的安全问题
终极目标是改进 2 个重要的安全特性
* 将容器的 root 用户 [映射到本地主机上的非 root 用户](https://docs.docker.com/engine/security/userns-remap/),减轻容器和主机之间因权限提升而引起的安全问题;
* 允许 Docker 服务端在 [ root 权限(rootless 模式)](https://docs.docker.com/engine/security/rootless/) 下运行,利用安全可靠的子进程来代理执行需要特权权限的操作。这些子进程将只允许在限定范围内进行操作,例如仅仅负责虚拟网络设定或文件系统管理、配置操作等。
* 将容器的 root 用户[映射到本地主机上的非 root 用户](https://docs.docker.com/engine/security/userns-remap/),减轻容器和主机之间因权限提升而引起的安全问题;
* 允许 Docker 服务端在[ root 权限 (rootless 模式)](https://docs.docker.com/engine/security/rootless/) 下运行,利用安全可靠的子进程来代理执行需要特权权限的操作。这些子进程将只允许在限定范围内进行操作,例如仅仅负责虚拟网络设定或文件系统管理、配置操作等。
最后建议采用专用的服务器来运行 Docker 和相关的管理服务例如管理服务比如 ssh 监控和进程监控管理工具 nrpecollectd 其它的业务服务都放到容器中去运行
最后建议采用专用的服务器来运行 Docker 和相关的管理服务 (例如管理服务比如 ssh 监控和进程监控管理工具 nrpecollectd )其它的业务服务都放到容器中去运行

View File

@@ -1,22 +1,22 @@
## 内核能力机制
Docker 利用 Linux 的能力机制Capabilities来限制容器的权限从而提高系统的安全性
Docker 利用 Linux 的能力机制 (Capabilities) 来限制容器的权限从而提高系统的安全性
[能力机制Capability](https://man7.org/linux/man-pages/man7/capabilities.7.html) 是 Linux 内核一个强大的特性,可以提供细粒度的权限访问控制。
[能力机制 (Capability)](https://man7.org/linux/man-pages/man7/capabilities.7.html) 是 Linux 内核一个强大的特性,可以提供细粒度的权限访问控制。
Linux 内核自 2.2 版本起就支持能力机制它将权限划分为更加细粒度的操作能力既可以作用在进程上也可以作用在文件上
例如一个 Web 服务进程只需要绑定一个低于 1024 的端口的权限并不需要 root 权限那么它只需要被授权 `net_bind_service` 能力即可此外还有很多其他的类似能力来避免进程获取 root 权限
默认情况下Docker 启动的容器被严格限制只允许使用内核的一部分能力
使用能力机制对加强 Docker 容器的安全有很多好处通常在服务器上会运行一堆需要特权权限的进程包括有 sshcronsyslogd硬件管理工具模块例如负载模块网络配置工具等等容器跟这些进程是不同的因为几乎所有的特权进程都由容器以外的支持系统来进行管理
* ssh 访问被主机上ssh服务来管理
使用能力机制对加强 Docker 容器的安全有很多好处通常在服务器上会运行一堆需要特权权限的进程包括有 sshcronsyslogd硬件管理工具模块 (例如负载模块)网络配置工具等等容器跟这些进程是不同的因为几乎所有的特权进程都由容器以外的支持系统来进行管理
* ssh 访问被主机上 ssh 服务来管理
* cron 通常应该作为用户进程执行权限交给使用它服务的应用来处理
* 日志系统可由 Docker 或第三方服务管理
* 硬件管理无关紧要容器中也就无需执行 udevd 以及类似服务
* 网络管理也都在主机上设置除非特殊需求容器不需要对网络进行配置
从上面的例子可以看出大部分情况下容器并不需要真正的 root 权限容器只需要少数的能力即可为了加强安全容器可以禁用一些没必要的权限
从上面的例子可以看出大部分情况下容器并不需要 真正的 root 权限容器只需要少数的能力即可为了加强安全容器可以禁用一些没必要的权限
* 完全禁止任何 mount 操作
* 禁止直接访问本地主机的套接字
* 禁止访问一些文件系统的操作比如创建新的设备修改文件属性等
@@ -24,5 +24,5 @@ Linux 内核自 2.2 版本起就支持能力机制,它将权限划分为更加
这样就算攻击者在容器中取得了 root 权限也不能获得本地主机的较高权限能进行的破坏也有限
默认情况下Docker采用 [白名单](https://github.com/moby/moby/blob/master/oci/caps/defaults.go) 机制,禁用必需功能之外的其它权限。
默认情况下Docker 采用[白名单](https://github.com/moby/moby/blob/master/oci/caps/defaults.go)机制,禁用必需功能之外的其它权限。
当然用户也可以根据自身需求来为 Docker 容器启用额外的权限

View File

@@ -1,18 +1,18 @@
## 内核命名空间
命名空间Namespace Linux 容器隔离的基础它确保了容器内的进程无法干扰主机或其他容器
命名空间 (Namespace) Linux 容器隔离的基础它确保了容器内的进程无法干扰主机或其他容器
Docker 容器和 LXC 容器很相似所提供的安全特性也差不多当用 `docker run` 启动一个容器时在后台 Docker 为容器创建了一个独立的命名空间和控制组集合
命名空间提供了最基础也是最直接的隔离在容器中运行的进程不会被运行在主机上的进程和其它容器发现和作用
每个容器都有自己独有的网络栈意味着它们不能访问其他容器的 sockets 或接口不过如果主机系统上做了相应的设置容器可以像跟主机交互一样的和其他容器交互当指定公共端口或使用 links 来连接 2 个容器时容器就可以相互通信了可以根据配置来限制通信的策略
每个容器都有自己独有的网络栈意味着它们不能访问其他容器的 sockets 或接口不过如果主机系统上做了相应的设置容器可以像跟主机交互一样的和其他容器交互当指定公共端口或使用 links 来连接 2 个容器时容器就可以相互通信了 (可以根据配置来限制通信的策略)
从网络架构的角度来看所有的容器通过本地主机的网桥接口相互通信就像物理机器通过物理交换机通信一样
那么内核中实现命名空间和私有网络的代码是否足够成熟
内核命名空间从 2.6.15 版本2008 7 月发布之后被引入数年间这些机制的可靠性在诸多大型生产系统中被实践验证
内核命名空间从 2.6.15 版本 (2008 7 月发布) 之后被引入数年间这些机制的可靠性在诸多大型生产系统中被实践验证
实际上命名空间的想法和设计提出的时间要更早最初是为了在内核中引入一种机制来实现 [OpenVZ](https://en.wikipedia.org/wiki/OpenVZ) 的特性。
OpenVZ 项目早在 2005 年就发布了其设计和实现都已经十分成熟

View File

@@ -2,11 +2,11 @@
除了上述机制Linux 内核还提供了一系列安全增强功能可以进一步保护容器环境
除了能力机制之外还可以利用一些现有的安全机制来增强使用 Docker 的安全性例如 TOMOYO, AppArmor, Seccomp, SELinux, GRSEC
除了能力机制之外还可以利用一些现有的安全机制来增强使用 Docker 的安全性例如 TOMOYOAppArmorSeccompSELinuxGRSEC
Docker 当前默认只启用了能力机制用户可以采用多种方案来加强 Docker 主机的安全例如
* 在内核中启用 GRSEC PAX这将增加很多编译和运行时的安全检查通过地址随机化避免恶意探测等并且启用该特性不需要 Docker 进行任何配置
* 使用一些有增强安全特性的容器模板比如带 AppArmor 的模板和 Redhat SELinux 策略的模板这些模板提供了额外的安全特性
* 用户可以自定义访问控制机制来定制安全策略
跟其它添加到 Docker 容器的第三方工具一样比如网络拓扑和文件系统共享有很多类似的机制在不改变 Docker 内核情况下就可以加固现有的容器
跟其它添加到 Docker 容器的第三方工具一样 (比如网络拓扑和文件系统共享)有很多类似的机制在不改变 Docker 内核情况下就可以加固现有的容器

View File

@@ -4,4 +4,4 @@ Docker 的安全性依赖于多层隔离机制的协同工作,同时需要用
总体来看Docker 容器还是十分安全的特别是在容器内不使用 root 权限来运行进程的话
另外用户可以使用现有工具比如 [Apparmor](https://docs.docker.com/engine/security/apparmor/), [Seccomp](https://docs.docker.com/engine/security/seccomp/), SELinux, GRSEC 来增强安全性;甚至自己在内核中实现更复杂的安全机制。
另外用户可以使用现有工具比如 [Apparmor](https://docs.docker.com/engine/security/apparmor/)[Seccomp](https://docs.docker.com/engine/security/seccomp/)SELinuxGRSEC 来增强安全性;甚至自己在内核中实现更复杂的安全机制。