将配置文件与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
在这里,服务frontend
和phpmyadmin
被分别分配给配置文件
frontend
,debug
因此仅在启用它们各自的配置文件时才启动。
没有profiles
属性的服务将始终启用,即在这种情况下,运行docker-compose up
只会启动backend
和db
。
有效的配置文件名称遵循的正则表达式格式[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
文件之上,这将启动服务backend
,
db
和phpmyadmin
。
可以通过传递多个--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