使用多个 Compose 文件可以根据不同的环境或工作流程,对 Compose 应用程序进行个性化配置。
默认情况下,Compose 会读取两个文件,一个是 docker-compose.yml,另一个是可选的 docker-compose.override.yml 文件。根据约定,docker-compose.yml 包含基本配置,而替代文件则可以提供对现有服务或全新服务的配置替代。
如果在两个文件中都定义了相同的服务,Compose 将根据添加和覆盖的规则来合并配置。
要使用多个替代文件或不同名称的文件,可以通过 -f 选项指定文件列表。Compose 将按照您在命令行上指定的顺序合并文件。有关更多信息,请参见 docker-compose 命令参考的 -f 部分。
在使用多个配置文件时,要确保所有路径都是相对于基本的 Compose 文件(由指定的第一个 Compose 文件 -f 定义)的。这是必要的,因为替代文件不一定是有效的撰写文件,它们可能只包含一些小的配置片段。追踪服务相关的片段与路径的关系可能会造成混淆,因此所有路径必须相对于基本文件进行定义,以便于理解。
用例示例
本节将介绍两个常见的用例,分别是针对不同环境的 Compose 应用程序变更,以及运行管理任务。
不同环境的配置
一个常见的用例是将开发环境下的 Compose 应用程序转换为生产环境(如生产、演示或持续集成)。为支持这些差异,您可以将 Compose 配置拆分为多个不同的文件:
首先定义服务规范的基本文件:
docker-compose.yml
web:
image: example/My_web_app:latest
depends_on:
– db
– cache
db:
image: postgres:latest
cache:
image: redis:latest
在这个示例中,开发配置将一些端口暴露给主机,同时将代码作为卷挂载,并构建 Web 镜像。
docker-compose.override.yml
web:
build: .
volumes:
– .:/code
ports:
– 8883:80
environment:
DEBUG: ‘true’
db:
command: ‘-d’
ports:
– 5432:5432
cache:
ports:
– 6379:6379
运行 docker-compose up 时,它会自动读取覆盖文件。
现在,可以在生产环境中使用此 Compose 应用程序。接下来,创建另一个替代文件(该文件可以存放在其他 Git 仓库中,或由其他团队管理)。
docker-compose.prod.yml
web:
ports:
– 80:80
environment:
PRODUCTION: ‘true’
cache:
environment:
TTL: ‘500’
要使用此生产 Compose 文件进行部署,可以运行:
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
该部署将使用配置中的所有三个服务,即 docker-compose.yml 和 docker-compose.prod.yml(但不使用开发配置 docker-compose.override.yml)。
有关生产环境中撰写的更多信息,请参见相关文档。
管理任务
另一个常见用例是针对 Compose 应用程序中的一个或多个服务运行临时任务或管理任务。以下示例演示如何进行数据库备份。
从 docker-compose.yml 开始:
web:
image: example/My_web_app:latest
depends_on:
– db
db:
image: postgres:latest
在 docker-compose.admin.yml 中添加新服务以运行数据库导出或备份。
dbadmin:
build: database_admin/
depends_on:
– db
要启动正常环境,请运行 docker-compose up -d。要执行数据库备份,请同时包含 docker-compose.admin.yml。
docker-compose -f docker-compose.yml -f docker-compose.admin.yml
运行 dbadmin db-backup
[[[IMG_1]]]
[[[IMG_2]]]
[[[IMG_3]]]
