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
最佳实践
- 使用 -d 选项: 在生产环境中总是使用后台模式
- 定期清理: 使用
docker-compose down -v清理不需要的卷 - 监控日志: 使用
docker-compose logs -f监控应用状态 - 健康检查: 定期使用
docker-compose ps检查服务状态 - 版本控制: 将 docker-compose.yml 纳入版本控制
- 环境分离: 为不同环境使用不同的 compose 文件
总结
Docker Compose 命令提供了完整的容器编排管理功能。掌握这些基础命令是高效使用 Docker Compose 的关键。通过合理组合使用这些命令,可以轻松管理复杂的多容器应用程序。