一、认识 Docker 安全的重要性

在企业环境中,Docker 容器技术极大提高了开发与部署效率,但同时也带来了安全风险。
容器共享主机内核,若安全防护不足,可能导致:

  • 容器逃逸攻击(攻击者获取宿主机权限)

  • 镜像污染(被植入恶意代码)

  • 网络被劫持(容器间通信泄露)

  • 凭证泄露(配置文件、环境变量暴露)

一句话总结:Docker 安全部署的核心是“隔离、最小化、可控”。


二、Docker 安全模型

Docker 通过 Linux 内核的多项技术实现隔离:

技术功能
Namespaces隔离进程、网络、文件系统等资源
Cgroups限制容器资源使用
Capabilities控制容器进程的特权能力
Seccomp过滤系统调用,阻止恶意行为
AppArmor / SELinux提供额外安全策略

容器不是完全的虚拟机,因此必须“加固防护”。


三、Docker 安全基线配置

1. 禁止以 root 用户运行容器

在 Dockerfile 中添加:


FROM ubuntu:22.04 RUN useradd -m appuser USER appuser CMD ["python3", "app.py"]

2. 限制容器特权模式

避免使用 --privileged


docker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE nginx

3. 只挂载必要目录

docker run -v /data/web:/usr/share/nginx/html:ro nginx

:ro 表示只读挂载,防止篡改。

4. 限制容器资源

docker run --memory="512m" --cpus="1.0" nginx


四、镜像安全管理

1. 使用可信镜像源
  • 优先使用官方镜像(如 library/nginx)。

  • 禁止从未知来源拉取镜像。

2. 镜像签名与验证

启用 Docker Content Trust (DCT)


export DOCKER_CONTENT_TRUST=1 docker pull nginx:latest

Docker 将自动验证签名。

3. 镜像漏洞扫描

安装 Docker scan:


docker scan nginx:latest

输出漏洞等级(Critical、High、Medium、Low)。

4. 自建私有镜像仓库

docker run -d -p 5000:5000 --name registry registry:2

配置镜像推送:


docker tag myapp localhost:5000/myapp:v1 docker push localhost:5000/myapp:v1


五、Docker Daemon 安全加固

1. 禁用不安全的远程 API

修改 /etc/docker/daemon.json


{ "hosts": ["unix:///var/run/docker.sock"], "tlsverify": true, "tlscacert": "/etc/docker/certs/ca.pem", "tlscert": "/etc/docker/certs/server-cert.pem", "tlskey": "/etc/docker/certs/server-key.pem" }

2. 设置 Docker Socket 权限

chmod 660 /var/run/docker.sock chown root:docker /var/run/docker.sock


六、容器网络安全

1. 使用独立的 Overlay 网络

docker network create --driver overlay secure-net

2. 禁止容器自动暴露端口

使用:


docker run --publish 8080:80 nginx

代替 -P(随机端口映射)。

3. 启用防火墙规则

sudo iptables -A INPUT -p tcp --dport 2376 -j DROP

4. 限制容器间通信

在 Docker Compose 中:


networks: default: driver: bridge internal: true

参考案例:www.yrayb.cn


七、日志与审计

1. 启用 Docker 审计日志

auditctl -w /usr/bin/docker -p war -k docker

查看日志:


ausearch -k docker

2. 设置容器日志驱动

docker run --log-driver=json-file --log-opt max-size=10m --log-opt max-file=3 nginx


八、容器漏洞防护

1. 使用 Seccomp 限制系统调用

docker run --security-opt seccomp=/usr/share/seccomp/default.json nginx

2. 使用 AppArmor 或 SELinux

docker run --security-opt apparmor=docker-default nginx

SELinux:


setsebool -P container_manage_cgroup on

3. 开启只读根文件系统

docker run --read-only nginx


九、Docker Compose 安全实践

1. Compose 文件权限

chmod 600 docker-compose.yml

2. 不要在 Compose 文件中存储密钥

改用环境文件:


env_file: - .env

.env 示例:


DB_PASSWORD=123456

3. 使用 Secrets 管理敏感信息

services: db: image: mysql secrets: - db_password secrets: db_password: file: ./db_password.txt


十、Docker Swarm 加密通信

Swarm 模式默认启用 TLS 自动加密
检查状态:


docker info | grep "TLS"

加密 Overlay 网络:


docker network create --opt encrypted --driver overlay secure-overlay


十一、镜像最小化与瘦身

1. 使用精简镜像

推荐:

  • alpine(5MB)

  • scratch(空镜像)

示例:


FROM alpine RUN apk add --no-cache nginx

2. 清理构建缓存

docker system prune -a


十二、容器生命周期管理

1. 自动重启策略

docker run --restart=always nginx

2. 停止未使用容器

docker ps -a docker rm $(docker ps -aq)

3. 删除旧镜像

docker image prune -a


十三、Docker 安全扫描与合规

安装 Docker Bench for Security


git clone https://github.com/docker/docker-bench-security.git cd docker-bench-security sudo ./docker-bench-security.sh

输出示例:


[PASS] - Container user not root [WARN] - Docker daemon TLS not enabled


十四、CI/CD 中的安全部署

在 Jenkinsfile 中加入扫描步骤:


stage('Security Scan') { steps { sh 'docker scan myapp:latest' } }

并配置自动推送到安全镜像仓库:


docker.withRegistry('https://registry.mycorp.com', 'credentials-id') { docker.image('myapp:latest').push() }


十五、生产环境监控与报警

使用 Prometheus 监控 Docker 容器状态:


docker run -d \ -v /var/run/docker.sock:/var/run/docker.sock \ prom/node-exporter

结合 Grafana 展示指标:

  • 容器 CPU、内存、IO 使用情况

  • 容器健康检查状态

  • 端口流量统计


十六、安全更新与版本控制

1. 定期更新 Docker

sudo apt update && sudo apt upgrade docker-ce

2. 使用版本固定策略

docker pull nginx:1.25.2

避免使用 :latest


十七、Docker 镜像签发与验证

签发镜像:


docker trust sign myrepo/myapp:1.0

验证签名:


docker trust inspect --pretty myrepo/myapp:1.0


十八、安全审计与合规

建议定期执行:

  • docker scan 漏洞检测

  • docker bench security 合规扫描

  • docker history 检查镜像构建层


十九、常见安全风险与应对

风险类型防护策略
镜像被篡改开启镜像签名验证
容器逃逸限制 Capabilities、使用 Seccomp
端口暴露使用内部网络、关闭不必要端口
凭证泄露使用 Secrets 管理
数据篡改使用只读卷和最小权限用户

二十、完整实战项目:企业级 Docker 安全体系

目标:
构建一个安全、可控、自动化的 Docker 企业级部署环境。

实现模块:
  1. Docker TLS 加密通信

  2. 私有镜像仓库 + 内容签名

  3. CI/CD 集成安全扫描

  4. Prometheus + Grafana 监控容器状态

  5. Docker Bench 定期安全审计

最终效果:

  • 所有镜像可信、安全、可追踪

  • 容器资源可控、不可滥用

  • 异常行为自动检测与告警

  • 企业级安全与合规保障

更多推荐