片段
目录
使用 Compose,您可以使用内置的YAML 功能,让您的 Compose 文件更整洁、更高效。锚点和别名允许您创建可复用的代码块。如果您开始发现跨越多个服务的通用配置,这将非常有用。使用可复用的代码块可以最大限度地减少潜在的错误。
锚点使用 & 符号创建。该符号后跟别名。稍后可以使用 * 符号配合该别名来引用锚点后面的值。请确保 & 和 * 字符与后面的别名之间没有空格。
您可以在单个 Compose 文件中使用多个锚点和别名。
示例 1
volumes:
db-data: &default-volume
driver: default
metrics: *default-volume在上面的示例中,基于 db-data 卷创建了 default-volume 锚点。随后该锚点被别名 *default-volume 重用,以定义 metrics 卷。
锚点解析发生在变量插值之前,因此变量不能用于设置锚点或别名。
示例 2
services:
first:
image: my-image:latest
environment: &env
- CONFIG_KEY
- EXAMPLE_KEY
- DEMO_VAR
second:
image: another-image:latest
environment: *env如果您有一个要在多个服务中使用的锚点,请将其与扩展结合使用,以使您的 Compose 文件更易于维护。
示例 3
您可能希望部分覆盖值。Compose 遵循 YAML 合并类型 中概述的规则。
在以下示例中,metrics 卷规范使用别名以避免重复,但覆盖了 name 属性:
services:
backend:
image: example/database
volumes:
- db-data
- metrics
volumes:
db-data: &default-volume
driver: default
name: "data"
metrics:
<<: *default-volume
name: "metrics"示例 4
您还可以扩展锚点以添加附加值。
services:
first:
image: my-image:latest
environment: &env
FOO: BAR
ZOT: QUIX
second:
image: another-image:latest
environment:
<<: *env
YET_ANOTHER: VARIABLE注意
YAML 合并 仅适用于映射(mapping),不能用于序列(sequence)。
在上面的示例中,环境变量必须使用 FOO: BAR 映射语法进行声明,而序列语法 - FOO=BAR 仅在不涉及片段时才有效。