片段
目录
使用 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仅在未涉及片段时有效。