片段
目录
使用 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 合并 仅适用于映射,不能用于序列。
在上面的示例中,环境变量必须使用 FOO: BAR
映射语法声明,而序列语法 - FOO=BAR
仅在不涉及片段时有效。