题记与说明
| 元信息 | |
|---|---|
| 标题 | 5 Docker Best Practices I Wish I Knew When I Started |
| 作者 | Bobby Iliev(Docker Captain,《Introduction to Docker》免费电子书作者) |
| 来源 | https://devdojo.com/post/bobbyiliev/5-docker-best-practices-i-wish-i-knew-when-i-started |
| 存档日期 | 2026-11-03 |
| 标签 | Docker、容器化、开发环境、DevOps、最佳实践 |
这篇讲什么
Docker Captain Bobby Iliev 复盘自己初学 Docker 时踩过的坑,总结成 5 条最佳实践 + 1 条彩蛋,每条都配完整可运行的代码示例:① 多阶段构建(multi-stage builds)瘦身镜像;② 用 .dockerignore 排除无关文件;③ 在 Dockerfile 里写 HEALTHCHECK 健康检查;④ 用 Docker Compose 编排 web + PostgreSQL 本地开发环境;⑤ 慎用 latest 标签、固定版本号;彩蛋是用 Docker Scout 做镜像安全扫描(含 GitHub Actions CI 集成)。
核心观点
Docker 用得好不好,差距不在会不会 docker run,而在镜像体积、可复现性和可观测性这三件"收尾工程"。小镜像更快更省更安全;固定版本才能让团队所有人、所有环境跑的是同一个东西;健康检查让容器"不仅活着,而且真的在工作"。
最值得记住的金句/数据
- 「A .dockerignore file is to Docker what a .gitignore file is to Git」——
.dockerignore之于 Docker,正如.gitignore之于 Git。一句话建立心智模型。 - 多阶段构建能把 Go 应用镜像从「几百 MB 压缩到几 MB」——push/pull 更快、存储更省、攻击面更小,一箭三雕。
latest标签「can change without warning」——它不指向任何具体版本,出问题时你根本说不清到底跑的是哪个版本。
对我的启发
- AI 编程工具/Agent:AI 生成的 Dockerfile 普遍"能跑就行"——不会主动加多阶段构建、
.dockerignore、HEALTHCHECK,也爱用latest。这恰好是 vibe coding 时代人的价值所在:AI 负责生成,人负责收尾和加固。反过来,用 Compose 把 web+db 做成一键启动的本地环境,也是给 Agent 搭可复现沙箱的地基。 - 个人知识管理:"固定版本"的本质是给未来的自己留确定性——镜像要钉住版本号,笔记和知识库同理:存档时留下原文快照和日期,才不怕源头"can change without warning"。
- 写作:「5 things I wish I knew when I started」是极好的技术写作框架——从自己的踩坑史里提炼清单,每节都按"问题→方案→逐行解释→收益"展开,比罗列知识点更让读者共情。
适合谁读
刚接触 Docker、镜像写完就完事的开发者;想让本地开发环境标准化的小团队;以及用 AI 生成基础设施代码、需要一双"审查的眼睛"来兜底工程细节的人。老手会觉得内容基础,但作为 checklist 和教学示例(每段代码都能直接抄走用)依然值得收藏。