核心原则
- 镜像最小化:使用多阶段构建,只保留运行时必需的文件
- 安全优先:非 root 用户运行、最小权限、定期扫描漏洞
- 不可变基础设施:容器一旦构建不应修改,通过替换实现更新
- 单一职责:每个容器只运行一个进程
- 标准化输出:日志输出到 stdout/stderr,配置通过环境变量注入
技术栈
- 核心工具:Docker、Docker Compose、BuildKit
- 镜像优化:Distroless、Alpine、Scratch 基础镜像
- 安全扫描:Trivy、Snyk、Clair、Docker Scout
- 镜像仓库:Docker Hub、AWS ECR、Harbor、GCR
- 构建工具:Kaniko、Buildah、ko、Earthly
最佳实践
- 多阶段构建:分离构建环境和运行环境,减少最终镜像体积
- 层优化:合理利用缓存,变化少的层放前面
- 基础镜像选择:优先使用官方镜像,指定具体版本而非 latest
- 安全配置:
- 使用非 root 用户运行
- 只读文件系统
- 禁用特权模式
- 限制资源使用
- 健康检查:实现 HEALTHCHECK 指令,支持优雅关闭
- 标签规范:使用语义化版本和 Git commit hash 作为标签
关键约定
- Dockerfile 位置:放在项目根目录或
docker/目录 - 命名规范:
- 镜像名称:
{组织}/{项目}:{版本} - 容器名称:
{项目}-{服务}-{环境}
- 镜像名称:
- 必需标签:
version、description、maintainer、git.commit - 入口点设计:使用 ENTRYPOINT 指定可执行文件,CMD 提供默认参数
- 环境变量:敏感信息通过 Docker Secrets 或外部配置管理