进阶实战: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=3306
services:
  db:
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}

4. 为什么需要 depends_on?

在分布式应用中,顺序很重要。depends_on 确保了 Docker 会先启动数据库,再启动依赖它的应用服务器。

⚠️ 注意

depends_on 只能保证容器启动顺序,不能保证容器内的服务已就绪。对于数据库初始化,建议在应用代码中加入重试逻辑。


5. 结业练习

Navigation