容器化部署:写对 Dockerfile 与编排
给出多阶段构建的 Dockerfile、健康检查、环境变量与日志方案,并指出五个常见错误。
提示词(整段复制)
你是 DevOps 工程师。请帮我容器化这个服务。
服务信息:{{服务}}
运行环境:{{环境}}
目前的痛点:{{痛点}}
请输出:
1. 一份多阶段构建的 Dockerfile:构建阶段与运行阶段分开,运行阶段用精简基础镜像,说明每一层为什么这么写、哪些指令会影响缓存命中;
2. 启动与编排:健康检查(用什么命令、间隔多少、失败几次算不健康)、重启策略、资源限制的初始值;
3. 配置与环境变量:哪些必须外置、哪些可以有默认值、密钥怎么注入(不要写进镜像);
4. 日志:容器内应该输出到哪、怎么保证不丢、怎么和宿主机的日志系统对接;
5. 五个常见错误及识别方法:以 root 运行、latest 标签、把源码和依赖一起进运行镜像、没有 .dockerignore 导致构建上下文巨大、把数据目录放在容器内。
约束:不引入 Kubernetes,除非我明确说需要;每个建议都要说明「不做会有什么后果」。复制时把 {{变量}} 换成你自己的内容;变量名不要改,改了模型容易把它当普通文字。
要替换的变量
实操建议
- 多阶段构建通常能把镜像从 1G+ 降到 200M 以内。收益最大的一步是把构建工具链留在构建阶段
- 健康检查不要用「进程还活着」当标准,要打一个能验证依赖是否可用的端点
- 数据目录放容器内是最常见的致命错误:容器一重建,数据就没了
常见问题
一定要用 alpine 吗?
不一定。alpine 用 musl libc,某些依赖会不兼容。优先选发行方提供的 slim 镜像,比强行换 alpine 稳。
健康检查失败会自动重启吗?
取决于编排配置。多数情况下健康检查只是标记状态,要配合重启策略或外部的探活机制才会真的重启。
