核心用法
Docker Compose 通过 YAML 文件定义多容器应用的服务、网络和存储,实现一键启动完整应用栈。
关键配置模式:
- 依赖就绪控制:
depends_on默认仅等待容器启动,结合condition: service_healthy可实现真正的服务就绪等待 - 健康检查:
healthcheck配合start_period为慢启动服务(数据库、Java 应用)提供初始化缓冲期 - 覆盖文件模式:基础配置 + 开发/生产覆盖文件,实现环境隔离
- Profiles:通过
--profile按需启用调试工具、测试数据库等可选服务
日常操作陷阱:
docker compose down -v会永久删除所有卷,生产环境极其危险- 匿名卷随
down销毁,命名卷需显式-v才会删除 - 环境变量优先级:Shell >
.env>env_file:>environment:
显著优点
1. 基础设施即代码:版本控制应用拓扑,团队环境一致性
2. 开发生产一致性:同一配置多环境覆盖,减少"在我机器上能跑"
3. 资源前置管控:开发阶段设置内存限制,提前暴露问题
4. 生态标准地位:Docker 官方工具,社区资源最丰富
潜在局限
- 单机限制:原生不支持多主机编排(需结合 Swarm/Kubernetes)
- 状态管理复杂:卷生命周期与数据备份策略需人工设计
- 配置膨胀:大型项目 Compose 文件可达数千行,维护成本上升
- 健康检查开销:频繁探测对高并发服务可能产生额外负载
适合人群
- 全栈开发者构建本地开发环境
- 中小团队的标准化部署(<10 服务)
- CI/CD 流水线的集成测试阶段
- 教学与原型验证场景
常规风险
| 风险点 | 说明 |
|--------|------|
| 数据误删 | `-v` 参数习惯性使用导致生产数据丢失 |
| 密钥泄露 | 缺少 `.dockerignore` 将 `.env`、密钥打包入镜像 |
| 资源耗尽 | 未设 limits 的容器耗尽主机内存 |
| 配置漂移 | 多环境覆盖文件管理不当导致生产配置错误 |
| 虚假健康 | 健康检查配置不当,未就绪服务接收流量 |