Skip to content

容器化最佳实践

本文汇总从镜像构建到生产运行的容器化总体规范,作为本模块的总纲。各专项细节见对应文档。

镜像构建

  • 单进程原则:一个容器只跑一个主进程(PID 1),便于信号处理与生命周期管理。
  • 多阶段构建:编译与运行分离,显著减小镜像体积(见 Dockerfile)。
  • 最小化基础镜像:优先 alpine / slim / distroless / scratch
  • 固定 tag/digest:生产禁止 latest,用语义版本或提交哈希(见 镜像仓库)。
  • 使用 .dockerignore:避免把 .gitnode_modules、本地日志打入构建上下文。
  • exec 形式启动CMD ["node","app.js"] 而非 shell 形式,便于接收 SIGTERM。

安全

  • 非 root 运行:Dockerfile 中 USER 1000USER nonroot(见 安全)。
  • 只读根文件系统--read-only + tmpfs,降低被篡改风险。
  • 降权--cap-drop ALL,按需 --cap-add
  • 漏洞扫描:CI 中集成 Trivy/Docker Scout,阻断高危镜像(见 安全)。
  • 密钥不入镜像:用 secret / 外部密钥管理。

资源与稳定性

  • 设置 requests/limits:K8s 必设,Docker 用 --cpus/--memory(见 Docker 存储)。
  • 配置日志轮转:json-file + max-size/max-file,防磁盘撑满。
  • 健康检查:Docker HEALTHCHECK、K8s liveness/readiness 探针。
  • 重启策略unless-stopped(Docker)/ restart_policy(Swarm)。

网络与存储

  • 自定义网络隔离:不同安全域使用不同网络(见 网络)。
  • 有状态用 Volume:数据库等挂命名卷,不写可写层。
  • 配置只读挂载bind mount + :ro
  • 数据库不暴露公网:仅放内部网络。

编排与交付

  • 声明式管理:Compose/Swarm 用 YAML,K8s 用 kubectl apply
  • 滚动更新:Swarm update_config、K8s rollout,实现零停机。
  • CI/CD 衔接:镜像构建与扫描纳入流水线(见 容器与 CI/CD 集成)。
  • 多环境分离:override 文件 / K8s Namespace 区分 prod/test。

可观测性

  • 统一日志:容器日志输出 stdout,由采集端收集。
  • 指标采集:cAdvisor + Prometheus + Grafana(见 监控体系)。
  • 告警:异常自动通知(Alertmanager)。

检查清单(Checklist)

部署前对照:

  • [ ] 镜像非 root、已扫描、固定 tag
  • [ ] 设置了资源限制与日志轮转
  • [ ] 配置了健康检查/探针
  • [ ] 有状态数据挂 Volume
  • [ ] 密钥使用 secret 机制
  • [ ] 滚动更新/回滚策略就绪
  • [ ] 日志与指标接入可观测平台