Docker Compose 是用于编排多容器应用的核心工具,通过一个 docker-compose.yml 文件即可定义和运行所有关联服务。本文提供了从基础到实战的完整指南,涵盖核心优势、快速入门示例、全部命令详解(包括服务管理、镜像构建、配置验证等分类)以及多种环境下的工作流。您将掌握开发、测试和生产环境的部署技巧,学习高效调试和资源管理的最佳实践,并通过常用命令组合快速提升容器化应用的管理效率,实现真正的一键部署和环境一致性。

博主博客

一、什么是 Docker Compose?

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过一个 YAML 文件(通常是 docker-compose.yml)来配置应用程序的所有服务,然后使用简单的命令即可创建和启动所有服务。

二、核心优势

  • 一键部署:使用单个命令启动多个关联容器
  • 配置即代码:所有服务配置版本化,便于管理和共享
  • 环境一致性:确保开发、测试、生产环境的一致性
  • 服务编排:轻松管理容器间的依赖关系和启动顺序

三、快速开始

1. 安装 Docker Compose

# 检查是否已安装
docker-compose --version

# 安装 Docker Compose(Linux)
sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

2. 创建 docker-compose.yml

version: '3.8'
services:
  web:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
  db:
    image: postgres:13
    environment:
      POSTGRES_PASSWORD: example

3. 启动服务

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

# 后台启动所有服务
docker-compose up -d

# 启动特定服务
docker-compose up -d nginx

四、Docker Compose 命令详解

项目生命周期管理

命令 说明 常用参数
docker-compose up 创建并启动容器 -d 后台运行,--build 重新构建
docker-compose down 停止并移除所有资源 -v 同时删除卷,--rmi all 删除镜像
docker-compose start 启动已存在的容器
docker-compose stop 停止运行中的容器
docker-compose restart 重启服务

服务操作与调试

命令 说明 示例
docker-compose exec 在运行中的容器执行命令 docker-compose exec nginx bash
docker-compose run 运行一次性命令 docker-compose run --rm app python manage.py migrate
docker-compose logs 查看服务日志 docker-compose logs -f --tail=100 nginx
docker-compose ps 列出所有容器状态 docker-compose ps -a

镜像与构建管理

命令 说明 示例
docker-compose build 构建或重新构建服务镜像 docker-compose build --no-cache nginx
docker-compose pull 拉取服务的最新镜像 docker-compose pull
docker-compose push 推送服务镜像 docker-compose push
docker-compose images 列出使用的镜像

配置与验证

命令 说明 示例
docker-compose config 验证和查看配置 docker-compose config -q
docker-compose version 显示版本信息

其他实用命令

命令 说明 示例
docker-compose pause/unpause 暂停/恢复容器 docker-compose pause nginx
docker-compose kill 强制停止容器 docker-compose kill -s SIGINT nginx
docker-compose rm 删除已停止的容器 docker-compose rm -f nginx
docker-compose scale 扩展服务实例数量 docker-compose scale web=3
docker-compose top 显示容器进程 docker-compose top nginx
docker-compose port 查看端口绑定 docker-compose port nginx 80
docker-compose events 实时事件监听 docker-compose events --json nginx

五、实战示例集合

1. 开发环境部署

# 启动开发环境(包含热重载)
docker-compose -f docker-compose.dev.yml up

# 重新构建并启动
docker-compose up --build

# 查看实时日志
docker-compose logs -f app db

2. 数据库迁移

# 运行数据库迁移
docker-compose run --rm app python manage.py migrate

# 创建迁移文件
docker-compose run --rm app python manage.py makemigrations

3. 测试环境

# 运行测试
docker-compose run --rm app pytest

# 运行特定测试
docker-compose run --rm app pytest tests/test_api.py

4. 生产环境操作

# 使用生产配置文件
docker-compose -f docker-compose.prod.yml up -d

# 零停机更新
docker-compose pull
docker-compose up -d

六、常用工作流

1. 完整开发周期

# 1. 启动开发环境
docker-compose up -d

# 2. 查看日志
docker-compose logs -f

# 3. 进入容器调试
docker-compose exec app bash

# 4. 重新构建
docker-compose up -d --build

# 5. 清理环境
docker-compose down -v

2. 多环境管理

# 开发环境
docker-compose -f docker-compose.yml -f docker-compose.dev.yml up

# 测试环境
docker-compose -f docker-compose.yml -f docker-compose.test.yml up

# 生产环境
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up

七、最佳实践与小贴士

1. 配置文件管理

# 使用环境变量文件
docker-compose --env-file .env.prod up

# 验证配置文件
docker-compose config > docker-compose.resolved.yml

2. 性能优化

# 并行构建多个服务
docker-compose build --parallel

# 仅构建缺少的镜像
docker-compose build --pull

3. 资源清理

# 清理所有未使用的资源
docker-compose down --rmi all --volumes --remove-orphans

# 删除停止的容器
docker-compose rm -fsv

4. 网络与端口

# 查看服务网络信息
docker-compose network ls

# 检查端口映射
docker-compose port app 80

八、故障排除

1. 常见问题解决

# 容器启动失败时调试
docker-compose logs --tail=50 app

# 强制重新创建容器
docker-compose up -d --force-recreate

# 检查服务状态
docker-compose ps --services

2. 调试技巧

# 进入容器调试
docker-compose exec -it app sh

# 查看容器详情
docker-compose inspect app

# 实时监控事件
docker-compose events

九、版本迁移

从 v1 到 v2/v3 的变化:

# v1 语法(已弃用)
docker-compose up

# v2+ 语法
docker compose up  # 注意:去掉了连字符

总结

Docker Compose 是容器化开发不可或缺的工具,通过掌握这些命令和工作流,你可以:

  1. 高效管理多容器应用
  2. 保持开发生产环境一致
  3. 简化团队协作和部署流程
  4. 快速调试和故障排除

建议将常用的命令组合保存为脚本或 Makefile 目标,进一步提高工作效率。


学习资源推荐

记住:实践是最好的学习方式!从简单的项目开始,逐步尝试更复杂的配置,很快你就能熟练运用 Docker Compose 管理你的容器化应用了。