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 docker-compose.yml -f docker-compose.admin.yml run backup_db

docker-compose.yml文件可能指定一个webapp服务。

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

如果docker-compose.admin.yml也指定了相同的服务,则任何匹配的字段都会覆盖之前的文件。新值将添加到webapp服务配置中。

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

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

使用带-(短划线)作为文件名-f从 stdin 读取配置。当使用 stdin 时,配置中的所有路径都相对于当前工作目录。

-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指定的第一个配置文件)的项目目录的basename
  • 如果没有指定配置文件,则为当前目录的basename。项目名称必须仅包含小写字母、数字、短划线和下划线,并且必须以小写字母或数字开头。如果项目目录或当前目录的basename违反此约束,则必须使用其他机制之一。
$ 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服务启动,backendproxy等待db服务健康后再启动。

试运行模式几乎适用于所有命令。您不能将试运行模式与不会更改 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监视服务构建上下文,并在文件更新时重建/刷新容器