Docker Compose 基础命令

概述

Docker Compose 提供了一套完整的命令行工具来管理多容器应用程序。本文将详细介绍 Docker Compose 的基础命令及其使用方法。

命令格式

docker-compose [OPTIONS] COMMAND [ARGS...]

核心命令

1. docker-compose up

启动并运行整个应用程序栈。

基本用法

# 启动所有服务
docker-compose up

# 后台运行
docker-compose up -d

# 启动指定服务
docker-compose up web db

# 强制重新构建镜像
docker-compose up --build

# 不使用缓存构建
docker-compose up --build --no-cache

常用选项

  • -d, --detach: 后台运行容器
  • --build: 启动前构建镜像
  • --no-cache: 构建时不使用缓存
  • --force-recreate: 强制重新创建容器
  • --no-recreate: 不重新创建已存在的容器
  • --remove-orphans: 删除孤立容器
  • --scale SERVICE=NUM: 扩展服务实例数量

示例

# 后台启动并构建
docker-compose up -d --build

# 扩展 web 服务到 3 个实例
docker-compose up --scale web=3

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

2. docker-compose down

停止并删除容器、网络、卷和镜像。

基本用法

# 停止并删除容器和网络
docker-compose down

# 同时删除卷
docker-compose down -v

# 同时删除镜像
docker-compose down --rmi all

# 删除孤立容器
docker-compose down --remove-orphans

常用选项

  • -v, --volumes: 删除命名卷和匿名卷
  • --rmi TYPE: 删除镜像 (all|local)
  • --remove-orphans: 删除孤立容器
  • -t, --timeout TIMEOUT: 设置停止超时时间

3. docker-compose build

构建或重新构建服务镜像。

基本用法

# 构建所有服务
docker-compose build

# 构建指定服务
docker-compose build web

# 不使用缓存构建
docker-compose build --no-cache

# 并行构建
docker-compose build --parallel

常用选项

  • --no-cache: 不使用缓存
  • --pull: 总是尝试拉取最新版本的基础镜像
  • --parallel: 并行构建镜像
  • --compress: 使用 gzip 压缩构建上下文

4. docker-compose start/stop/restart

控制服务的启动、停止和重启。

# 启动服务
docker-compose start
docker-compose start web

# 停止服务
docker-compose stop
docker-compose stop web

# 重启服务
docker-compose restart
docker-compose restart web

5. docker-compose ps

显示容器状态。

# 显示所有容器
docker-compose ps

# 显示所有容器(包括停止的)
docker-compose ps -a

# 只显示服务名
docker-compose ps --services

# 显示安静模式(只显示 ID)
docker-compose ps -q

6. docker-compose logs

查看服务日志。

基本用法

# 查看所有服务日志
docker-compose logs

# 查看指定服务日志
docker-compose logs web

# 实时跟踪日志
docker-compose logs -f

# 显示最后 100 行日志
docker-compose logs --tail=100

# 显示带时间戳的日志
docker-compose logs -t

常用选项

  • -f, --follow: 实时跟踪日志输出
  • -t, --timestamps: 显示时间戳
  • --tail="all": 显示日志末尾的行数
  • --since: 显示某个时间之后的日志
  • --until: 显示某个时间之前的日志

示例

# 查看 web 服务最近 50 行日志并实时跟踪
docker-compose logs -f --tail=50 web

# 查看昨天以来的日志
docker-compose logs --since="24h" web

# 查看多个服务的日志
docker-compose logs web db redis

7. docker-compose exec

在运行的容器中执行命令。

# 在 web 容器中执行 bash
docker-compose exec web bash

# 在 web 容器中执行命令
docker-compose exec web ls -la

# 以特定用户身份执行
docker-compose exec --user root web bash

# 不分配 TTY
docker-compose exec -T web cat /etc/hosts

8. docker-compose run

运行一次性命令。

# 运行一次性容器
docker-compose run web python manage.py migrate

# 不启动依赖服务
docker-compose run --no-deps web python test.py

# 删除容器运行后
docker-compose run --rm web python script.py

# 指定端口
docker-compose run -p 8080:8000 web python manage.py runserver

9. docker-compose pull

拉取服务镜像。

# 拉取所有服务镜像
docker-compose pull

# 拉取指定服务镜像
docker-compose pull web

# 忽略拉取失败
docker-compose pull --ignore-pull-failures

# 并行拉取
docker-compose pull --parallel

10. docker-compose push

推送服务镜像到仓库。

# 推送所有服务镜像
docker-compose push

# 推送指定服务镜像
docker-compose push web

# 忽略推送失败
docker-compose push --ignore-push-failures

高级命令

1. docker-compose config

验证并查看 Compose 文件配置。

# 验证配置文件
docker-compose config

# 只显示服务名
docker-compose config --services

# 只显示卷名
docker-compose config --volumes

# 解析变量后的配置
docker-compose config --resolve-image-digests

2. docker-compose top

显示运行中的进程。

# 显示所有服务的进程
docker-compose top

# 显示指定服务的进程
docker-compose top web

3. docker-compose port

显示端口映射。

# 显示服务的端口映射
docker-compose port web 80

# 显示所有端口映射
docker-compose port web

4. docker-compose images

列出容器使用的镜像。

# 列出所有镜像
docker-compose images

# 只显示镜像 ID
docker-compose images -q

5. docker-compose events

实时显示容器事件。

# 显示所有事件
docker-compose events

# 显示指定服务事件
docker-compose events web

# 显示 JSON 格式事件
docker-compose events --json

文件和项目选项

指定 Compose 文件

# 使用指定的 compose 文件
docker-compose -f docker-compose.prod.yml up

# 使用多个 compose 文件
docker-compose -f docker-compose.yml -f docker-compose.override.yml up

指定项目名称

# 指定项目名称
docker-compose -p myproject up

# 或使用环境变量
export COMPOSE_PROJECT_NAME=myproject
docker-compose up

指定工作目录

# 在指定目录运行
docker-compose --project-directory /path/to/project up

实用技巧

1. 组合命令

# 停止并重新启动
docker-compose down && docker-compose up -d

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

# 查看特定服务状态和日志
docker-compose ps web && docker-compose logs --tail=20 web

2. 使用别名

# 在 .bashrc 或 .zshrc 中添加
alias dc='docker-compose'
alias dcu='docker-compose up -d'
alias dcd='docker-compose down'
alias dcl='docker-compose logs -f'
alias dcp='docker-compose ps'

3. 环境变量

# 设置常用环境变量
export COMPOSE_PROJECT_NAME=myapp
export COMPOSE_FILE=docker-compose.yml:docker-compose.override.yml
export COMPOSE_HTTP_TIMEOUT=120

4. 调试技巧

# 验证配置
docker-compose config

# 查看详细输出
docker-compose --verbose up

# 检查服务健康状态
docker-compose ps
docker-compose logs service_name

常见使用场景

开发环境

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

# 查看日志
docker-compose logs -f

# 进入容器调试
docker-compose exec web bash

# 重启服务
docker-compose restart web

生产部署

# 拉取最新镜像
docker-compose pull

# 启动服务
docker-compose up -d

# 检查状态
docker-compose ps

# 查看日志
docker-compose logs --tail=100

测试环境

# 构建并运行测试
docker-compose -f docker-compose.test.yml up --build --abort-on-container-exit

# 运行特定测试
docker-compose run --rm test python -m pytest tests/

# 清理测试环境
docker-compose -f docker-compose.test.yml down -v

最佳实践

  1. 使用 -d 选项: 在生产环境中总是使用后台模式
  2. 定期清理: 使用 docker-compose down -v 清理不需要的卷
  3. 监控日志: 使用 docker-compose logs -f 监控应用状态
  4. 健康检查: 定期使用 docker-compose ps 检查服务状态
  5. 版本控制: 将 docker-compose.yml 纳入版本控制
  6. 环境分离: 为不同环境使用不同的 compose 文件

总结

Docker Compose 命令提供了完整的容器编排管理功能。掌握这些基础命令是高效使用 Docker Compose 的关键。通过合理组合使用这些命令,可以轻松管理复杂的多容器应用程序。

powered by Gitbook© 2025 编外计划 | 最后修改: 2025-08-29 15:40:15

results matching ""

    No results matching ""