碎片
借助 Compose,您可以使用内置的 YAML功能来使您的 Compose 文件更整洁、更高效。锚点和别名允许您创建可重复使用的块。如果您开始查找跨越多个服务的通用配置,这将非常有用。拥有可重复使用的块可以最大限度地减少潜在的错误。
锚点是使用&
符号创建的。该符号后面是别名。您可以稍后将此别名与符号一起使用*
来引用锚点后面的值。确保&
和*
字符与以下别名之间没有空格。
您可以在单个 Compose 文件中使用多个锚点和别名。
实施例1
volumes:
db-data: &default-volume
driver: default
metrics: *default-volume
在上面的示例中,default-volume
基于db-data
体积创建锚点。稍后别名会重用它*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
仅在不涉及片段时才有效。