一句话理解 Docker Compose:它就像“一键部署开关”,通过一个 YAML 文件定义多个容器的依赖关系,用 docker compose up 一条命令就能启动整个应用集群!


一、为什么需要 Docker Compose?

1. 传统部署的痛点

  • 想运行一个 Web 应用 + MySQL 数据库 + Redis 缓存,需要手动执行多个 docker run 命令
  • 容器之间网络、端口、数据卷需要手动配置
  • 服务依赖顺序难以控制(如数据库必须先启动)

2. Docker Compose 的价值

  • 声明式配置:用 YAML 文件统一管理所有容器的配置
  • 一键启动/停止:docker compose up 自动处理依赖、网络和数据卷
  • 环境隔离:不同项目使用独立的网络和命名空间,互不干扰

二、安装 Docker Compose

1. 推荐安装方式(Compose v2)

# Linux 系统(需 Docker 20.10.13+)
docker compose version  # 直接检查是否已集成

# 若未集成,通过包管理器升级 Docker CLI 即可自动获得
sudo apt-get update
sudo apt-get install docker-compose-plugin

2. 验证安装

docker compose version
# 输出示例:
# Docker Compose version v2.29.7

三、核心概念速览

概念说明
服务 (Service)一个容器的抽象定义(如 Web、MySQL、Redis)
项目 (Project)多个服务的集合(默认以 docker-compose.yml 所在目录名命名)
网络 (Network)Compose 为项目自动创建独立网络,服务间可通过服务名直接通信
卷 (Volume)持久化数据或共享文件夹(如数据库数据、日志)

四、新手必学 5 个命令

1. docker compose up:启动所有服务

docker compose up -d         # -d 表示后台运行
docker compose logs -f       # 实时查看日志(-f 类似 tail -f)

2. docker compose down:停止并清理

docker compose down          # 停止容器、网络、卷(保留数据卷)
docker compose down -v       # 同时删除数据卷

3. docker compose build:构建镜像

docker compose build         # 构建所有服务(需 Dockerfile)
docker compose build web     # 构建指定服务

4. docker compose ps:查看服务状态

docker compose ps            # 类似 docker ps,但只显示当前项目的服务

5. docker compose config:校验配置文件

docker compose config        # 校验 YAML 格式并输出最终解析的配置

五、实战:用 Docker Compose 部署 Web + MySQL 应用

1. 创建 docker-compose.yml

version: '3.8'  # 指定 Compose 文件格式版本

services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html
    depends_on:
      - db

  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: mydb
    volumes:
      - mysql_data:/var/lib/mysql

volumes:
  mysql_data:  # 命名卷,数据持久化

2. 目录结构

project/
├── docker-compose.yml
├── html/                # Nginx 静态文件
│   └── index.html

3. 启动服务

# 启动所有服务(后台运行)
docker compose up -d

# 验证服务状态
docker compose ps

# 访问 http://localhost:8080 查看 Nginx 默认页面

六、进阶配置技巧

1. 服务依赖顺序

depends_on:
  db:
    condition: service_healthy  # 等待 db 健康检查通过后再启动 web

2. 环境变量管理

environment:
  - DB_PASSWORD=${DB_PASSWORD}  # 从 .env 文件读取值

创建 .env 文件:

DB_PASSWORD=mysecretpassword

3. 多环境配置

docker compose -f docker-compose.yml -f docker-compose.prod.yml up

七、常见问题排查

问题现象解决方案
服务启动失败docker compose logs 查看日志,检查依赖是否就绪
端口冲突修改 ports 映射(如 "8081:80")
数据丢失使用命名卷(如 volumes:mysql_data)
配置错误docker compose config 校验 YAML 格式

八、学习路线建议

  1. 先掌握基础命令:up、down、build、ps
  2. 理解 YAML 配置结构:服务、网络、卷的定义方式
  3. 动手实践简单项目:如 Web + 数据库
  4. 学习高级特性:环境变量、多配置文件、健康检查
  5. 探索生产级用法:与 CI/CD 集成、安全加固

九、扩展阅读


现在就创建你的第一个 docker-compose.yml,用一条命令启动整个应用集群吧! 🐳

更多推荐