互联网技术 / 互联网资讯 · 2023年11月23日 0

使用多个配置文件的Docker技术教程

使用多个 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]]]