一句话总结
Docker Compose 是 Docker 官方的多容器编排工具,通过一个 docker-compose.yml 文件定义多个服务、网络、数据卷,一条命令启动所有服务。核心概念:services(服务定义,每个服务对应一个容器)、networks(自定义网络,服务间通过服务名通信)、volumes(数据卷,持久化数据)。常用命令:docker-compose up -d(后台启动)、docker-compose down(停止并删除)、docker-compose logs -f(查看日志)。Compose 适合单机多容器编排,Kubernetes 适合集群编排。
初级理解
docker-compose.yml 示例
中级深入
常用命令
depends_on 与健康检查
高级进阶
Compose 网络原理
Docker Compose vs Kubernetes
| 对比维度 | Docker Compose | Kubernetes |
|---|---|---|
| 定位 | 单机多容器编排 | 集群容器编排 |
| 规模 | 单台服务器 | 多节点集群 |
| 配置 | docker-compose.yml | YAML(Deployment/Service/...) |
| 服务发现 | 服务名 DNS | Service + CoreDNS |
| 负载均衡 | 需额外配置 | Service 内置 |
| 滚动更新 | 不支持 | Deployment 内置 |
| 自愈 | restart: always | 自动重启+重新调度 |
| 适用场景 | 开发/测试/单机部署 | 生产环境/大规模集群 |
实战场景
面试模拟
面试官:Docker Compose 是什么?和 Kubernetes 有什么区别?
你:Docker Compose 是单机多容器编排工具,通过 docker-compose.yml 定义服务、网络、卷,一条命令启动。Kubernetes 是集群编排平台,支持多节点、自动调度、滚动更新、自愈等。Compose 适合开发测试和单机部署,K8s 适合生产集群。Compose 简单易用,K8s 功能强大但复杂。
面试官:depends_on 能保证服务就绪吗?如何解决?
你:depends_on 只控制启动顺序,不等待服务就绪(如 MySQL 可能还没完成初始化)。解决方案:1)使用 condition: service_healthy 配合 healthcheck;2)应用层重试(Spring Boot 连接重试);3)使用 wait-for-it.sh 等脚本等待端口可用。