1. Docker 安全基础

1.1 Docker 安全威胁模型

容器化环境引入了与传统虚拟化截然不同的攻击面。理解 Docker 的安全威胁模型是构建合规体系的第一步。威胁主要来自以下四个维度:

威胁维度 典型风险 影响范围
镜像供应链 基础镜像含漏洞、恶意植入后门、依赖库被篡改 所有派生容器
容器逃逸 内核漏洞利用、--privileged 提权、挂载敏感目录 宿主机及所有容器
配置漂移 默认开放端口、无资源限制、未设置只读根文件系统 单个容器或集群
运行时攻击 进程注入、网络嗅探、密钥泄露 容器内数据与业务
关键认知: 容器共享宿主机内核,因此内核级漏洞(如 CVE-2022-0847 Dirty Pipe)的威胁等级远高于虚拟机场景。安全基线必须从内核隔离能力开始评估。

1.2 容器与虚拟机安全对比

容器和虚拟机在隔离深度、攻击面、合规粒度上存在本质差异。下表从安全视角进行对比:

对比维度 Docker 容器 虚拟机
隔离层级 进程级(Namespace + Cgroups) 硬件级(Hypervisor + 独立内核)
内核共享 共享宿主机内核 独立内核
逃逸风险 较高(内核漏洞直接威胁宿主机) 较低(需突破 Hypervisor)
启动时间 秒级 分钟级
镜像大小 MB 级 GB 级
合规审计粒度 需额外工具(如 Falco、Tracee) 原生支持完整审计日志
实践建议: 在混合部署场景中,将高敏感工作负载(如密钥管理、支付处理)部署在虚拟机中,将无状态微服务部署在容器中,形成分层信任模型。

下图展示了容器与虚拟机在安全架构上的核心差异:

容器 vs 虚拟机安全架构对比 Docker 容器 App A (共享内核) App B (共享内核) Docker Engine (Namespaces + Cgroups) 宿主机内核 (共享风险点) 硬件 虚拟机 App A Guest OS A App B Guest OS B Hypervisor (硬件虚拟化层) 宿主机内核 (独立隔离) 硬件 vs 逃逸风险高 隔离性强

1.3 Docker 安全最佳实践概览

基于上述威胁模型与对比分析,Docker 安全最佳实践可归纳为以下六大领域。每个领域对应一组可落地的操作要点:

  1. 镜像安全 — 使用可信基础镜像(如 distroless、chainguard),定期扫描漏洞(Trivy / Grype),实施镜像签名(Cosign)。
  2. 主机加固 — 禁用非必要内核模块,开启 Seccomp / AppArmor / SELinux,限制容器 root 权限。
  3. 运行时保护 — 部署 Falco 实时检测异常系统调用,设置只读根文件系统(--read-only),限制资源上限(CPU / 内存)。
  4. 网络隔离 — 使用自定义 bridge 网络,默认禁止容器间通信(--icc=false),加密传输(TLS)。
  5. 密钥管理 — 避免环境变量传递密钥,使用 Docker Secrets 或外部密钥管理服务(Vault)。
  6. 合规审计 — 启用 Docker 审计日志,定期执行 CIS Docker Benchmark 检查,生成合规报告。
常见误区: 仅依赖 Docker 默认配置无法满足生产安全要求。例如,默认情况下容器以 root 运行,且未启用用户命名空间映射。必须显式配置 --userns-remap 和 USER 指令。

下图总结了 Docker 安全最佳实践的完整框架:

Docker 安全最佳实践框架 Docker 安全基线 镜像安全 扫描·签名·最小化 主机加固 Seccomp·AppArmor 运行时保护 Falco·只读文件系统 网络隔离 自定义网络·TLS 密钥管理 Secrets·Vault 合规审计 CIS Benchmark·日志 六大领域协同覆盖:构建 → 部署 → 运行 → 审计 每个领域均可通过自动化工具链实现持续合规

1.4 快速自检清单

在进入后续章节之前,建议对照以下清单评估当前环境的安全水位:

检查项 合规要求 验证命令
容器以非 root 运行 Dockerfile 包含 USER 指令 docker inspect --format '{{.Config.User}}' <container>
禁止特权模式 --privileged 未设置 docker inspect --format '{{.HostConfig.Privileged}}' <container>
只读根文件系统 --read-only 已启用 docker inspect --format '{{.HostConfig.ReadonlyRootfs}}' <container>
资源限制 CPU / 内存上限已配置 docker stats --no-stream
镜像漏洞扫描 最近一次扫描无高危漏洞 trivy image <image>
自动化建议: 将上述检查项集成到 CI/CD 流水线中,使用 docker-bench-security 或 kube-bench 实现每日自动合规检查,避免配置漂移。