容器
容器把应用及其运行依赖封装为可分发制品。OCI 定义镜像与运行时规范,Docker 和 Podman 提供常用构建、运行与管理能力。
从开发到生产
- 使用可复现的构建生成镜像。
- 以 Commit SHA、版本和 digest 标识镜像。
- 生成 SBOM,完成漏洞扫描和签名。
- 推送到受控镜像仓库。
- 以非 root、资源受限和只读文件系统运行。
- 将日志输出到标准输出,并提供健康检查。
构建
- 使用多阶段构建,只将运行所需文件复制到最终镜像。
- 固定基础镜像版本;生产部署记录 digest,避免漂移。
- 使用
.dockerignore排除 Git、依赖缓存、测试结果和本地 Secret。 - 合理利用 BuildKit 缓存挂载,避免为了缓存牺牲正确性。
- 不在
ARG、ENV、COPY或镜像历史中保存凭据。
运行
- 创建专用非 root 用户,避免
--privileged。 - 设置 CPU、内存和进程数限制;处理终止信号并设置停止宽限期。
- 根文件系统尽量只读,把持久数据放入 Volume 或外部存储。
- 提供存活、就绪和启动检查,但避免检查本身依赖过多外部服务。
- 日志写入标准输出/错误,由平台收集;不要无限增长本地日志文件。
Compose 边界
Compose 适合本地开发、集成测试和简单单机服务。生产环境使用时仍需自行解决高可用、调度、Secret、滚动发布、集中日志和备份。
发布检查
- 镜像能否追溯到 Commit、流水线和 SBOM?
- 是否仅包含运行依赖,且无高危可利用漏洞?
- 容器在非 root、只读和资源限制下能否正常运行?
- 退出、重启和依赖短暂不可用时行为是否符合预期?