# Docker Containerization

> Use when working with Docker — development rules

- Skill: `liaosw97/docker-containerization` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add liaosw97/docker-containerization`
- Raw SKILL.md: https://api.skillmd.com/api/skills/liaosw97/docker-containerization/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: DevOps & Infra
- Author: liaosw97 (https://skillmd.com/u/liaosw97)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/liaosw97/docker-containerization

---


## 核心原则
- 镜像最小化：使用多阶段构建，只保留运行时必需的文件
- 安全优先：非 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

## 最佳实践
1. **多阶段构建**：分离构建环境和运行环境，减少最终镜像体积
2. **层优化**：合理利用缓存，变化少的层放前面
3. **基础镜像选择**：优先使用官方镜像，指定具体版本而非 latest
4. **安全配置**：
   - 使用非 root 用户运行
   - 只读文件系统
   - 禁用特权模式
   - 限制资源使用
5. **健康检查**：实现 HEALTHCHECK 指令，支持优雅关闭
6. **标签规范**：使用语义化版本和 Git commit hash 作为标签

## 关键约定
1. **Dockerfile 位置**：放在项目根目录或 `docker/` 目录
2. **命名规范**：
   - 镜像名称：`{组织}/{项目}:{版本}`
   - 容器名称：`{项目}-{服务}-{环境}`
3. **必需标签**：`version`、`description`、`maintainer`、`git.commit`
4. **入口点设计**：使用 ENTRYPOINT 指定可执行文件，CMD 提供默认参数
5. **环境变量**：敏感信息通过 Docker Secrets 或外部配置管理

