Docker 容器安全加固

Docker 容器安全加固最佳实践

容器技术的广泛应用带来了新的安全挑战。相比传统虚拟机,容器共享内核,安全隔离性较弱,因此需要从多个维度对Docker容器进行安全加固。

一、镜像安全

使用官方或可信基础镜像

始终从官方镜像仓库或可信来源拉取基础镜像,避免使用来源不明的镜像:

# 推荐:使用官方最小化镜像
FROM nginx:alpine           # Alpine基础镜像,体积小,攻击面小
FROM python:3.11-slim       # slim版本比full版本小80%以上
FROM gcr.io/distroless/java # Distroless镜像,不含shell和包管理器

镜像漏洞扫描

# 使用Trivy扫描镜像漏洞
docker run --rm aquasec/trivy image myapp:latest

# 集成到CI/CD流水线
trivy image --exit-code 1 --severity HIGH,CRITICAL myapp:latest
# 发现高危/严重漏洞时退出码为1,阻断流水线

二、以非root用户运行容器

# Dockerfile中创建专用用户
FROM node:18-alpine
RUN addgroup -g 1001 appgroup && adduser -u 1001 -G appgroup -S appuser
WORKDIR /app
COPY --chown=appuser:appgroup . .
USER appuser  # 切换到非root用户
CMD ["node", "server.js"]

# 运行时强制非root
docker run --user 1001:1001 myapp:latest

# docker-compose.yml
services:
  app:
    image: myapp:latest
    user: "1001:1001"

三、限制容器能力(Capabilities)

# 丢弃所有能力,只保留必要的
docker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE myapp:latest

# docker-compose.yml
services:
  app:
    cap_drop:
      - ALL
    cap_add:
      - NET_BIND_SERVICE  # 绑定1024以下端口

四、只读文件系统

# 容器根文件系统只读,防止运行时被修改
docker run --read-only --tmpfs /tmp --tmpfs /var/run myapp:latest

# docker-compose.yml
services:
  app:
    read_only: true
    tmpfs:
      - /tmp
      - /var/run

五、资源限制防DoS

# 限制CPU和内存,防止容器消耗过多宿主机资源
docker run --cpus="1.0" --memory="512m" --memory-swap="512m" myapp:latest

# K8s中配置资源限制
resources:
  limits:
    cpu: "1"
    memory: "512Mi"
  requests:
    cpu: "100m"
    memory: "128Mi"

六、网络隔离

# 创建专用网络,只允许需要通信的容器互联
docker network create --driver bridge app-network
docker run --network app-network myapp:latest
docker run --network app-network mydb:latest

# 不需要网络的容器完全隔离
docker run --network none batch-job:latest

七、Secrets管理

# 避免在镜像或环境变量中存放敏感信息
# 使用Docker Secrets(Swarm)或K8s Secrets
kubectl create secret generic db-secret     --from-literal=password=my-db-password

# Pod中挂载Secret
volumes:
  - name: db-secret
    secret:
      secretName: db-secret
volumeMounts:
  - name: db-secret
    mountPath: /etc/secrets
    readOnly: true

八、安全扫描与合规检查

# Docker Bench Security(CIS基准检查)
docker run --net host --pid host --userns host --cap-add audit_control   -v /var/lib:/var/lib -v /var/run/docker.sock:/var/run/docker.sock   docker/docker-bench-security

九、总结

Docker容器安全是纵深防御体系:使用可信最小化镜像→以非root用户运行→限制Linux Capabilities→只读文件系统→资源限制→网络隔离→Secrets安全管理。这七个层次的加固,可以显著降低容器被攻击的风险和被攻击后的危害范围。