真实应用通常由多个服务组成:Web + 数据库 + 缓存。手动用 docker run 逐个启动太麻烦,Docker Compose 用一个 YAML 文件把它们编排起来。

一、安装

dnf install -y docker-compose-plugin   # 新版作为 docker 插件
docker compose version

二、编写 docker-compose.yml

以一个 Web + MySQL + Redis 的组合为例:

services:
  web:
    image: nginx
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
    depends_on:
      - db
  db:
    image: mysql:8
    environment:
      MYSQL_ROOT_PASSWORD: secret
    volumes:
      - dbdata:/var/lib/mysql
  redis:
    image: redis
volumes:
  dbdata:

三、一键启停

docker compose up -d      # 后台启动所有服务
docker compose ps         # 查看状态
docker compose logs -f web # 看 web 日志
docker compose down        # 停止并删除容器

四、关键概念

depends_on 只控制启动顺序,不等服务"就绪"。数据库可能要先于 Web 启动完,需配合健康检查或重试机制。

五、环境隔离

.env 文件管理不同环境的配置:

# .env
MYSQL_PASSWORD=production_secret
# docker-compose.yml 中引用
environment:
  MYSQL_PASSWORD: ${MYSQL_PASSWORD}

六、小结

Compose 让多容器应用的定义变成代码,可版本化、可复现。开发环境用它最爽,一键拉起完整服务栈。生产环境则可升级到 Kubernetes。