扩展 Compose 文件
Docker Compose 的 extends
属性允许您在不同的文件甚至不同的文件之间共享通用配置
项目。
如果您有多个服务重用一个通用的
配置选项集。使用 You 可以定义一组通用的
服务选项,并可从任何位置引用它。您可以参考
另一个 Compose 文件,然后选择您自己也想使用的服务
应用程序,并能够根据自己的需要覆盖某些属性。extends
重要
使用多个 Compose 文件时,必须确保文件中的所有路径 是相对于基本 Compose 文件(即 main-project 文件夹中的 Compose 文件)的。这是必需的,因为扩展文件 不必是有效的 Compose 文件。扩展文件可以包含 配置。跟踪服务的哪个片段相对于哪个路径 困难且令人困惑,因此为了使路径更易于理解,所有路径都必须 相对于 base 文件进行定义。
运作方式
从另一个文件扩展服务
以以下示例为例:
services:
web:
extends:
file: common-services.yml
service: webapp
这会指示 Compose 仅重复使用服务的属性
定义。服务本身不是最终项目的一部分。webapp
common-services.yml
webapp
如果如下所示:common-services.yml
services:
webapp:
build: .
ports:
- "8000:8000"
volumes:
- "/data"
您得到的结果与使用相同的 、 和 配置编写的结果完全相同
直接在 下定义的值。docker-compose.yml
build
ports
volumes
web
要在从另一个文件扩展服务时将服务包含在最终项目中,您需要在当前 Compose 文件中显式包含这两个服务。例如(注意这是一个非规范性示例):webapp
services:
web:
build: alpine
command: echo
extends:
file: common-services.yml
service: webapp
webapp:
extends:
file: common-services.yml
service: webapp
或者,您可以使用 include。
在同一文件中扩展服务
如果您在同一个 Compose 文件中定义服务并从另一个服务扩展一个服务,则原始服务和扩展服务都将是最终配置的一部分。例如:
services:
web:
build: alpine
extends: webapp
webapp:
environment:
- DEBUG=1
在同一文件内和从另一个文件扩展服务
您可以进一步在本地定义或重新定义配置 :compose.yaml
services:
web:
extends:
file: common-services.yml
service: webapp
environment:
- DEBUG=1
cpu_shares: 5
important_web:
extends: web
cpu_shares: 10
其他示例
当您拥有多个服务时,扩展单个服务非常有用 具有通用配置。以下示例是一个包含两个 services、Web 应用程序和 queue worker。两种服务使用相同的 代码库并共享许多配置选项。
该文件定义了通用配置:common.yaml
services:
app:
build: .
environment:
CONFIG_FILE_PATH: /code/config
API_KEY: xxxyyy
cpu_shares: 5
定义了使用公共
配置:docker-compose.yaml
services:
webapp:
extends:
file: common.yaml
service: app
command: /code/run_web_app
ports:
- 8080:8080
depends_on:
- queue
- db
queue_worker:
extends:
file: common.yaml
service: app
command: /code/run_worker
depends_on:
- queue
例外和限制
volumes_from
并且永远不会在使用 .存在这些异常以避免隐式依赖关系;你总是
define locally 的 define 中。这可确保服务之间的依赖关系
在读取当前文件时清晰可见。在本地定义这些
确保对引用文件的更改不会破坏任何内容。depends_on
extends
volumes_from
extends
如果您只需要共享一个服务,并且您
熟悉要扩展到的文件,因此您可以调整
配置。但是,当您想要重复使用时,这不是一个可接受的解决方案
别人不熟悉的配置,而你不知道它自己的
依赖。
相对路径
当与指向另一个文件夹的属性一起使用时,相对路径
被 extended 的服务所声明的
Extending 服务使用时相同的文件。以下示例对此进行了说明:extends
file
Base Compose 文件:
services:
webapp:
image: example
extends:
file: ../commons/compose.yaml
service: base
文件:commons/compose.yaml
services:
base:
env_file: ./container.env
生成的服务引用原始文件
在目录中。这可以通过检查实际模型来确认:container.env
commons
docker compose config
services:
webapp:
image: example
env_file:
- ../commons/container.env