docker compose

描述Docker Compose
用法docker compose

描述

使用 Docker 定义和运行多容器应用程序

选项

选项默认值描述
--all-resources包括所有资源,即使是服务未使用的资源
--ansiauto控制何时打印 ANSI 控制字符(“never”|“always”|“auto”)
--compatibility在向后兼容模式下运行 compose
--dry-run以干运行模式执行命令
--env-file指定备用环境变量文件
-f, --fileCompose 配置文件
--parallel-1控制最大并行度,-1 表示无限制
--profile指定要启用的配置文件
--progressauto设置进度输出类型 (auto, tty, plain, json, quiet)
--project-directory指定备用工作目录
(默认值:第一个指定 Compose 文件的路径)
-p, --project-name项目名称

示例

使用 -f 指定一个或多个 Compose 文件的名称和路径

使用 -f 标志指定 Compose 配置文件的位置。

指定多个 Compose 文件

您可以提供多个 -f 配置文件。当您提供多个文件时,Compose 会将它们合并成一个配置。Compose 按照您提供的文件顺序构建配置。后续文件会覆盖并添加到前一个文件。

例如,考虑此命令行

$ docker compose -f compose.yaml -f compose.admin.yaml run backup_db

compose.yaml 文件可能指定一个 webapp 服务。

services:
  webapp:
    image: examples/web
    ports:
      - "8000:8000"
    volumes:
      - "/data"

如果 compose.admin.yaml 也指定了同一个服务,任何匹配的字段都会覆盖前一个文件。新值会添加到 webapp 服务配置中。

services:
  webapp:
    build: .
    environment:
      - DEBUG=1

当您使用多个 Compose 文件时,文件中的所有路径都相对于使用 -f 指定的第一个配置文件。您可以使用 --project-directory 选项覆盖此基本路径。

使用 -f-(破折号)作为文件名来从标准输入读取配置。当使用标准输入时,配置中的所有路径都相对于当前工作目录。

-f 标志是可选的。如果您未在命令行中提供此标志,Compose 会遍历工作目录及其父目录,查找 compose.yamldocker-compose.yaml 文件。

指定单个 Compose 文件的路径

您可以使用 -f 标志指定不在当前目录中的 Compose 文件路径,这可以通过命令行或在您的 shell 或环境变量文件中设置 COMPOSE_FILE 环境变量来完成。

例如,要在命令行中使用 -f 选项,假设您正在运行 Compose Rails 示例,并且在名为 sandbox/rails 的目录中有一个 compose.yaml 文件。您可以使用类似 docker compose pull 的命令,通过使用 -f 标志从任何位置获取 db 服务的 postgres 镜像,如下所示:

$ docker compose -f ~/sandbox/rails/compose.yaml pull db

使用 -p 指定项目名称

每个配置都有一个项目名称。Compose 使用以下机制设置项目名称,按优先级排序:

  • -p 命令行标志
  • COMPOSE_PROJECT_NAME 环境变量
  • 配置文件的顶级 name: 变量(或使用 -f 指定的一系列配置文件中的最后一个 name:
  • 包含配置文件的项目目录(或包含使用 -f 指定的第一个配置文件的项目目录)的基本名称
  • 如果未指定配置文件,则使用当前目录的基本名称。项目名称只能包含小写字母、十进制数字、破折号和下划线,并且必须以小写字母或十进制数字开头。如果项目目录或当前目录的基本名称违反了此约束,您必须使用其他机制之一。
$ docker compose -p my_project ps -a
NAME                 SERVICE    STATUS     PORTS
my_project_demo_1    demo       running

$ docker compose -p my_project logs
demo_1  | PING localhost (127.0.0.1): 56 data bytes
demo_1  | 64 bytes from 127.0.0.1: seq=0 ttl=64 time=0.095 ms

使用配置文件启用可选服务

使用 --profile 指定一个或多个活动的配置文件。调用 docker compose --profile frontend up 会启动配置文件为 frontend 的服务以及未指定任何配置文件的服务。您也可以启用多个配置文件,例如使用 docker compose --profile frontend --profile debug up 命令会启用 frontenddebug 配置文件。

配置文件也可以通过 COMPOSE_PROFILES 环境变量设置。

配置并行度

使用 --parallel 指定并发引擎调用的最大并行级别。调用 docker compose --parallel 1 pull 会一次拉取 Compose 文件中定义的一个可拉取镜像。这也可以用于控制构建并发性。

并行度也可以通过 COMPOSE_PARALLEL_LIMIT 环境变量设置。

设置环境变量

您可以为各种 docker compose 选项设置环境变量,包括 -f-p--profiles 标志。

设置 COMPOSE_FILE 环境变量相当于传递 -f 标志,COMPOSE_PROJECT_NAME 环境变量的作用与 -p 标志相同,COMPOSE_PROFILES 环境变量与 --profiles 标志等效,COMPOSE_PARALLEL_LIMIT 的作用与 --parallel 标志相同。

如果在命令行中显式设置了标志,则忽略关联的环境变量。

COMPOSE_IGNORE_ORPHANS 环境变量设置为 true 会阻止 docker compose 检测项目中的孤立容器。

COMPOSE_MENU 环境变量设置为 false 会在使用附加模式运行 docker compose up 时禁用帮助菜单。或者,您也可以运行 docker compose up --menu=false 来禁用帮助菜单。

使用干运行模式测试您的命令

使用 --dry-run 标志测试命令,而不更改您的应用程序栈状态。干运行模式会显示 Compose 在执行命令时应用的所有步骤,例如:

$ docker compose --dry-run up --build -d
[+] Pulling 1/1
 ✔ DRY-RUN MODE -  db Pulled                                                                                                                                                                                                               0.9s
[+] Running 10/8
 ✔ DRY-RUN MODE -    build service backend                                                                                                                                                                                                 0.0s
 ✔ DRY-RUN MODE -  ==> ==> writing image dryRun-754a08ddf8bcb1cf22f310f09206dd783d42f7dd                                                                                                                                                   0.0s
 ✔ DRY-RUN MODE -  ==> ==> naming to nginx-golang-mysql-backend                                                                                                                                                                            0.0s
 ✔ DRY-RUN MODE -  Network nginx-golang-mysql_default                                    Created                                                                                                                                           0.0s
 ✔ DRY-RUN MODE -  Container nginx-golang-mysql-db-1                                     Created                                                                                                                                           0.0s
 ✔ DRY-RUN MODE -  Container nginx-golang-mysql-backend-1                                Created                                                                                                                                           0.0s
 ✔ DRY-RUN MODE -  Container nginx-golang-mysql-proxy-1                                  Created                                                                                                                                           0.0s
 ✔ DRY-RUN MODE -  Container nginx-golang-mysql-db-1                                     Healthy                                                                                                                                           0.5s
 ✔ DRY-RUN MODE -  Container nginx-golang-mysql-backend-1                                Started                                                                                                                                           0.0s
 ✔ DRY-RUN MODE -  Container nginx-golang-mysql-proxy-1                                  Started                                     Started

从上面的示例中,您可以看到第一步是拉取 db 服务定义的镜像,然后构建 backend 服务。接下来,创建容器。db 服务启动,而 backendproxydb 服务健康后才启动。

干运行模式适用于几乎所有命令。您不能将干运行模式与不更改 Compose 栈状态的命令一起使用,例如 pslslogs 等。

子命令

命令描述
docker compose alpha实验性命令
docker compose build构建或重新构建服务
docker compose config以标准格式解析、解析和渲染 compose 文件
docker compose cp在服务容器和本地文件系统之间复制文件/文件夹
docker compose create为服务创建容器
docker compose down停止并移除容器、网络
docker compose events接收来自容器的实时事件
docker compose exec在运行中的容器中执行命令
docker compose images列出创建的容器使用的镜像
docker compose kill强制停止服务容器
docker compose logs查看容器的输出
docker compose ls列出正在运行的 compose 项目
docker compose pause暂停服务
docker compose port打印端口绑定的公共端口
docker compose ps列出容器
docker compose pull拉取服务镜像
docker compose push推送服务镜像
docker compose restart重启服务容器
docker compose rm移除已停止的服务容器
docker compose run在服务上运行一次性命令
docker compose start启动服务
docker compose stop停止服务
docker compose top显示正在运行的进程
docker compose unpause取消暂停服务
docker compose up创建并启动容器
docker compose version显示 Docker Compose 版本信息
docker compose wait阻塞直到所有(或指定)服务的容器停止。
docker compose watch监视服务的构建上下文并在文件更新时重新构建/刷新容器