容器与运行环境
容器解决环境一致性,不自动解决生产可靠性
生产运行环境的核心不是“成功写出 Dockerfile”,而是任何有权限的维护者都能从固定版本代码生成同一类制品,替换实例后服务仍然可用,并能快速回到上一版本。
- 固定 Node.js、Python、Java 或其他运行时的大版本与依赖锁文件。
- 构建过程只能依赖仓库内容和显式构建参数,不读取个人目录。
- 本地
.env只作为开发便利,生产秘密由部署平台注入。 - 不把数据库、上传文件或唯一任务状态写进容器层。
- 构建和运行阶段分离,生产镜像不携带编译缓存和不必要工具。
一个最小 Node.js 结构可以这样组织:
示例需要按框架调整。重点是固定基础镜像版本策略、使用锁文件、缩小运行制品并避免以 root 身份运行;不要把密钥写成 ARG、ENV 或复制进镜像。
| 层级 | 回答的问题 | 失败后的动作 |
|---|---|---|
进程存活 | 进程是否卡死 | 重启实例 |
服务就绪 | 是否可以承接新请求 | 暂停流量 |
依赖状态 | 数据库、队列等是否异常 | 告警、降级,不一定重启 |
把所有依赖都塞进存活检查可能造成故障时重启风暴;只返回固定 200 又会把失效实例继续留在流量池。应分别设计探针并验证负载均衡器真实使用了就绪状态。
每次发布至少记录:代码提交、镜像或制品摘要、配置版本、数据库迁移版本、执行人、时间、结果和回滚目标。生产环境只拉取不可变版本,不复用含义变化的 latest 作为唯一依据。
小型项目可以使用轻量服务器加受控容器编排,或中国云厂商的托管容器服务。只有当多服务治理、资源隔离、弹性和平台团队需求明确时再选择 Kubernetes。
- 在干净环境完成一次构建和启动。
- 删除并重建实例,验证数据与文件不丢失。
- 模拟就绪检查失败,确认流量被摘除而不是继续报错。
- 部署上一版本并记录用时。
- 扫描镜像中的密钥、已知漏洞和多余包。
参考:Docker 多阶段构建、Docker Rootless 模式。核验日期:2026-07-14。
Built with