Docker Compose 用于本地多服务协同验证,Kubernetes 用于生产集群编排;二者需通过配置分层、镜像一致、环境变量优先级及 CI/CD 流水线实现平滑迁移。

用 Docker Compose 快速本地验证,再平滑迁移到 Kubernetes 生产环境,是当前主流的容器化项目落地路径。关键不在工具本身,而在配置结构、服务抽象和环境分层的设计逻辑。
一、Docker Compose:聚焦单机多服务协同
Docker Compose 本质是定义一组容器如何启动、互联与依赖,适合开发、测试和小型部署场景。核心是 docker-compose.yml 文件,需明确三类要素:
-
服务(services):每个 service 对应一个应用组件(如 web、api、db),指定镜像、端口映射、环境变量、依赖关系(via
depends_on) -
网络(networks):默认创建 bridge 网络,服务间可通过服务名直接通信(如
curl http://db:5432) -
卷(volumes):持久化数据(如数据库文件)或挂载配置(如
./conf/nginx.conf:/etc/nginx/nginx.conf)
建议将不同环境的配置拆分为基础版(docker-compose.yml)和覆盖版(docker-compose.override.yml),后者用于开发时挂载源码、开启调试日志等,不提交到生产分支。
二、Kubernetes:面向集群的声明式编排
Kubernetes 不是“Compose 的升级版”,而是解决不同维度的问题:弹性伸缩、滚动更新、跨节点调度、健康探针、服务发现等。从 Compose 迁移的关键是理解对象映射:
- service → Deployment + Service:Deployment 控制 Pod 副本与更新策略;Service 提供稳定访问入口(ClusterIP / NodePort / LoadBalancer)
- volumes → ConfigMap / Secret / PersistentVolumeClaim:配置与密钥分离管理,敏感信息不硬编码
- environment & depends_on → InitContainer + readinessProbe:用 InitContainer 等待依赖就绪;用 readinessProbe 判断服务是否真正可提供流量
避免直接手写大量 YAML。可用 kompose convert 将 docker-compose.yml 初步转为 Kubernetes 清单,但必须人工校验并补全探针、资源限制、RBAC 等生产必需字段。
三、打通本地与集群:配置分层与镜像一致性
开发环境跑得通,上线就出问题?大概率卡在环境差异。解决思路是统一构建产物、分层注入配置:
- 所有环境使用同一套 Docker 镜像(tag 建议用 Git Commit SHA),禁止 “build on deploy”
- 应用内读取配置优先级设为:环境变量 > 配置文件 > 默认值,K8s 中通过 envFrom + configMapRef 注入
- 数据库地址、API 网关域名等外部依赖,用 K8s Service 名或 Helm values 抽象,避免写死 IP 或域名
本地调试可借助 Telepresence 或 ksync,让本地进程接入远程集群网络,复用集群中的 DB、Redis 等服务,减少“本地能跑,上环境就崩”的盲区。
四、CI/CD 流水线串联示例(精简版)
一个轻量但可落地的自动化链路:
- Git Push 触发 CI(如 GitHub Actions)→ 构建镜像 → 推送至私有 Registry(如 Harbor)
- 镜像推送成功后,触发 CD 脚本 → 渲染 Kubernetes YAML(用 envsubst 或 Helm template)→ kubectl apply -f
- 上线后自动执行 kubectl rollout status deployment/web 等待就绪,并调用简单 HTTP 接口做冒烟测试
不强求一步到位上 Argo CD 或 Flux。先确保镜像构建、推送、部署三步可重复、可追溯,再逐步加入灰度、回滚、指标监控等能力。










