将配置文件与Compose一起使用

预计阅读时间:4分钟

通过有选择地启用服务,配置文件允许针对各种用途和环境调整Compose应用程序模型。这是通过将每个服务分配给零个或多个配置文件来实现的。如果未分配,则始终启动服务,但是如果分配,则仅在激活配置文件后才启动。

这样一来,您就可以在一个docker-compose.yml文件中定义其他服务,而这些服务只能在特定情况下启动,例如用于调试或开发任务。

为服务分配配置文件

服务通过profiles属性与配置文件相关联,该 属性采用一组配置文件名称:

version: "3.9"
services:
  frontend:
    image: frontend
    profiles: ["frontend"]

  phpmyadmin:
    image: phpmyadmin
    depends_on:
      - db
    profiles:
      - debug

  backend:
    image: backend

  db:
    image: mysql

在这里,服务frontendphpmyadmin被分别分配给配置文件 frontenddebug因此仅在启用它们各自的配置文件时才启动。

没有profiles属性的服务将始终启用,即在这种情况下,运行docker-compose up只会启动backenddb

有效的配置文件名称遵循的正则表达式格式[a-zA-Z0-9][a-zA-Z0-9_.-]+

笔记

您的应用程序的核心服务不应分配,profiles因此它们将始终启用并自动启动。

启用个人资料

要启用概要文件,请提供--profile 命令行选项或使用COMPOSE_PROFILES环境变量

$ docker-compose --profile debug up
$ COMPOSE_PROFILES=debug docker-compose up

上面的命令都将在debug启用配置文件的情况下启动您的应用程序。使用docker-compose.yml文件之上,这将启动服务backenddbphpmyadmin

可以通过传递多个--profile标志或COMPOSE_PROFILES环境变量的逗号分隔列表来指定多个概要文件:

$ docker-compose --profile frontend --profile debug up
$ COMPOSE_PROFILES=frontend,debug docker-compose up

自动启用配置文件和依赖性解析

当将已分配了服务的服务profiles明确指定为命令行目标时,其配置文件将自动启用,因此您无需手动启用它们。这可以用于一次性服务和调试工具。作为示例,请考虑以下配置:

version: "3.9"
services:
  backend:
    image: backend

  db:
    image: mysql

  db-migrations:
    image: backend
    command: myapp migrate
    depends_on:
      - db
    profiles:
      - tools
# will only start backend and db
$ docker-compose up -d

# this will run db-migrations (and - if necessary - start db)
# by implicitly enabling profile `tools`
$ docker-compose run db-migrations

但是请记住,docker-compose这只会在命令行上自动启用服务的配置文件,而不会自动启用任何依赖项。这意味着目标服务的所有服务都depends_on必须具有一个共同的配置文件,始终启用(通过省略profiles)或明确启用匹配的配置文件:

version: "3.9"
services:
  web:
    image: web

  mock-backend:
    image: backend
    profiles: ["dev"]
    depends_on:
      - db

  db:
    image: mysql
    profiles: ["dev"]

  phpmyadmin:
    image: phpmyadmin
    profiles: ["debug"]
    depends_on:
      - db
# will only start "web"
$ docker-compose up -d

# this will start mock-backend (and - if necessary - db)
# by implicitly enabling profile `dev`
$ docker-compose up -d mock-backend

# this will fail because profile "dev" is disabled
$ docker-compose up phpmyadmin

虽然定位phpmyadmin将自动启用其配置文件-即 debug-它不会自动启用配置文件所要求的(S)db-即dev。要解决此问题,您必须将debug配置文件添加到db服务中:

db:
  image: mysql
  profiles: ["debug", "dev"]

db明确启用以下配置文件:

# profile "debug" is enabled automatically by targeting phpmyadmin
$ docker-compose --profile dev up phpmyadmin
$ COMPOSE_PROFILES=dev docker-compose up phpmyadmin

撰写文件

cli撰写档案档案参考