进阶实战:Docker Compose 编排
当你的项目变得复杂,需要同时启动 Web 服务器、数据库、缓存和反向代理时,手动敲几十行 docker run 是不可接受的。Docker Compose 允许你用一个 YAML 文件定义并运行整个应用。
1. 理解 docker-compose.yml
Compose 文件的核心是 services(服务)。
▶ 实战:经典的 Web + Redis 架构示例
version: '3.8'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
depends_on:
- redis
redis:
image: "redis:alpine"2. 核心操作指令
Compose 的命令逻辑与 Docker 非常相似,但它操作的是整个“项目”。
| 操作 | 命令 | 说明 |
|---|---|---|
| 一键启动 | docker compose up -d | 根据 YAML 启动所有服务,-d 后台运行 |
| 查看状态 | docker compose ps | 查看本项目下的容器状态 |
| 实时日志 | docker compose logs -f | 聚合显示所有容器的日志输出 |
| 停止并移除 | docker compose down | 停止所有容器并删除网络、镜像等资源 |
| 进入特定服务 | docker compose exec web sh | 无需查 PID,直接按服务名进入 |
3. 环境变量与多环境配置
不要在 YAML 中硬编码敏感信息。
创建一个 .env 文件存放变量:
DB_PASSWORD=susu_secret_123
DB_PORT=3306services:
db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}4. 为什么需要 depends_on?
在分布式应用中,顺序很重要。depends_on 确保了 Docker 会先启动数据库,再启动依赖它的应用服务器。
注意
depends_on 只能保证容器启动顺序,不能保证容器内的服务已就绪。对于数据库初始化,建议在应用代码中加入重试逻辑。