Docker Compose 命令详解 – wiki大全

我无法直接创建文件。但我可以把文章内容直接输出给你。


Docker Compose 命令详解

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。通过一个 YAML 文件来配置应用程序的服务,然后使用一个命令,就可以从该配置中创建并启动所有服务。这使得开发、测试和部署多容器应用变得极其简单。

本文将详细介绍 Docker Compose 的常用命令及其用法。


1. Docker Compose 简介

在大型应用中,通常会有多个服务(例如,一个 Web 应用、一个数据库、一个缓存服务等)协同工作。手动管理这些服务的 Docker 容器会非常繁琐。Docker Compose 旨在解决这一问题,它允许你使用一个 docker-compose.yml 文件来定义整个应用栈,包括服务、网络和卷。然后,你可以使用单个命令来启动、停止、重启或管理这些服务。

2. 核心 Docker Compose 命令

以下是最常用的一些 Docker Compose 命令:

2.1 docker compose up – 构建、(重新)创建、启动并连接到服务

这是最常用的命令。它会执行以下操作:
* 构建 (build)拉取 (pull) 尚未存在的服务镜像。
* 创建 (create)重新创建 (recreate) 服务容器。
* 启动 (start) 服务。
* 连接 (attach) 到服务容器的输出。

常用选项:

  • -d, --detach: 在后台运行容器,不占用当前终端。
  • --build: 在启动前强制重新构建镜像。这在 Dockerfile 或构建上下文发生变化时非常有用。
  • --no-deps: 不启动链接的服务。
  • --no-recreate: 如果容器已经存在,则不重新创建它。
  • --force-recreate: 强制重新创建容器,即使其配置没有发生变化。
  • --abort-on-container-exit: 任何容器退出时,停止所有容器。
  • -V, --renew-anon-volumes: 重新创建匿名卷。

示例:

bash
docker compose up # 启动所有服务并在前台显示日志
docker compose up -d # 在后台启动所有服务
docker compose up --build # 重新构建镜像后启动服务

2.2 docker compose down – 停止并移除服务

此命令会停止 up 命令启动的容器,并移除这些容器、网络和卷。

常用选项:

  • --volumes, -v: 移除 docker-compose.yml 文件中声明的匿名卷和已挂载的具名卷。
  • --rmi all: 移除所有镜像(等同于 docker rmi)。
  • --rmi local: 移除只由 compose 文件中的服务生成的镜像。
  • --remove-orphans: 移除在 docker-compose.yml 文件中未定义但与项目相关的服务容器。

示例:

bash
docker compose down # 停止并移除所有服务、网络
docker compose down -v # 停止并移除所有服务、网络和卷
docker compose down --rmi all # 停止并移除所有服务,并删除所有镜像

2.3 docker compose start – 启动已停止的服务

此命令用于启动一个或多个已停止的服务,但不会重新创建它们。

示例:

bash
docker compose start # 启动所有已停止的服务
docker compose start web db # 启动 web 和 db 服务

2.4 docker compose stop – 停止运行中的服务

此命令用于停止一个或多个运行中的服务,但不会移除容器。

**常用选项:

  • -t, --timeout <seconds>: 停止容器的超时时间(默认为 10 秒)。

示例:

bash
docker compose stop # 停止所有运行中的服务
docker compose stop web # 停止 web 服务

2.5 docker compose restart – 重启服务

此命令用于重启一个或多个服务。

常用选项:

  • -t, --timeout <seconds>: 重启容器的超时时间(默认为 10 秒)。

示例:

bash
docker compose restart # 重启所有服务
docker compose restart web # 重启 web 服务

2.6 docker compose ps – 列出服务容器

此命令会列出项目中所有服务的容器。

常用选项:

  • -a, --all: 显示所有容器(包括已停止的)。
  • -q, --quiet: 只显示容器 ID。

示例:

bash
docker compose ps # 列出当前正在运行的服务容器
docker compose ps -a # 列出所有服务容器(包括已停止的)

2.7 docker compose logs – 查看服务日志

此命令用于查看一个或多个服务的日志输出。

常用选项:

  • -f, --follow: 跟踪日志输出(实时显示)。
  • -t, --timestamps: 显示时间戳。
  • --tail <number>: 从日志末尾显示指定行数。

示例:

bash
docker compose logs # 查看所有服务的日志
docker compose logs -f web # 实时跟踪 web 服务的日志
docker compose logs --tail 50 db # 查看 db 服务最近 50 行日志

2.8 docker compose build – 构建或重建服务镜像

此命令用于构建或重建 docker-compose.yml 文件中定义的服务镜像。如果你修改了 Dockerfile,可以使用此命令更新镜像。

常用选项:

  • --no-cache: 构建镜像时不使用缓存。
  • --pull: 在构建前尝试拉取更新的基础镜像。

示例:

bash
docker compose build # 构建所有服务的镜像
docker compose build web # 构建 web 服务的镜像

2.9 docker compose pull – 拉取服务镜像

此命令用于拉取 docker-compose.yml 文件中定义的所有服务镜像的最新版本。

示例:

bash
docker compose pull # 拉取所有服务镜像
docker compose pull db # 拉取 db 服务的镜像

2.10 docker compose exec – 在运行中的容器中执行命令

此命令允许你在正在运行的服务容器中执行任意命令。

常用选项:

  • -d, --detach: 在后台运行命令。
  • -T: 禁用伪 TTY 分配(例如,当命令没有交互式输入时)。
  • -u, --user <user>: 以指定用户身份运行命令。

示例:

bash
docker compose exec web bash # 进入 web 服务的 bash 终端
docker compose exec -T db psql -U user -d database # 在 db 容器中执行 psql 命令

2.11 docker compose run – 运行一次性命令

此命令用于在服务容器中运行一次性命令。与 exec 不同,run 会创建一个新的临时容器来运行命令,通常用于一次性任务,如数据库迁移、种子数据等。

常用选项:

  • -d, --detach: 在后台运行命令。
  • --name <name>: 为容器指定名称。
  • --rm: 命令执行完毕后自动删除容器。
  • -e, --env <KEY=VALUE>: 设置环境变量。
  • -p, --publish <port>: 发布端口。

示例:

bash
docker compose run --rm web python manage.py migrate # 运行 web 服务的数据库迁移命令
docker compose run --rm --entrypoint bash web # 覆盖 entrypoint,直接进入 bash

2.12 docker compose config – 验证和查看配置

此命令会验证 docker-compose.yml 文件的配置,并打印出合并后的配置信息。这对于调试配置问题非常有用。

常用选项:

  • -q, --quiet: 只验证配置,不打印输出,如果配置有效则返回 0,否则返回非 0。
  • --services: 打印服务名称列表。
  • --volumes: 打印卷名称列表。

示例:

bash
docker compose config # 验证并打印完整的配置
docker compose config --services # 只列出服务名称

3. 全局选项

Docker Compose 命令还支持一些全局选项,这些选项通常放在 docker compose 之后,具体命令之前。

  • -f <file>, --file <file>: 指定 Compose 文件路径。默认为 docker-compose.yml
  • -p <project_name>, --project-name <project_name>: 指定项目名称。Compose 使用项目名称作为容器、网络和卷的前缀,以避免命名冲突。默认为当前目录名。
  • --env-file <file>: 指定一个或多个环境变量文件。

示例:

“`bash

使用非默认的 compose 文件

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

指定项目名称

docker compose -p myapp up -d
“`

4. 总结

Docker Compose 极大地简化了多容器应用的开发和部署。掌握这些核心命令,可以让你更高效地管理和操作你的 Dockerized 应用程序。通过 docker-compose.yml 文件声明应用结构,再配合 docker compose updocker compose down 等命令,即可实现对整个应用生命周期的全面控制。


提示:
* 始终确保你的 docker-compose.yml 文件格式正确。可以使用 docker compose config 命令进行验证。
* 在生产环境中,通常会使用不同的 Compose 文件(例如 docker-compose.prod.yml)来定义生产环境特有的配置。
* 如果你遇到问题,查看 docker compose logs 是第一步。

滚动至顶部