9.2.4 锚点和别名
Fragements
可以利用内置的YAML功能使Compose文件更加整洁和高效。通过锚点(anchors)和别名(aliases)允许你创建可重复使用的块。这在你开始发现存在跨多个服务的常见配置时非常有用。具有可重复使用的块可以最小化潜在的错误。
锚点是使用 "&" 符号创建的,该符号后面跟着一个别名名称。稍后使用 "*" 符号来引用紧随锚点后面的值。请确保在 "&" 和 "*" 与别名之间没有空格。
可以在单个Compose文件中使用多个锚点和别名。
示例 1
services:
first:
image: my-image:latest
environment: &env
- CONFIG_KEY
- EXAMPLE_KEY
- DEMO_VAR
second:
image: another-image:latest
environment: *env
示例2
services:
first:
image: my-image:latest
environment: &env
FOO: BAR
ZOT: QUIX
second:
image: another-image:latest
environment:
<<: *env
YET_ANOTHER: VARIABLE
YAML仅适用于映射(mappings),不能与序列(sequences)一起使用。
在上面的示例中,环境变量必须使用 "FOO: BAR" 的映射语法进行声明,而序列语法 "- FOO=BAR" 仅在不包含片段"<<: *env"时有效。
Extensions
与片段(Fragements)一样,扩展(Extensions)可以用来使您的Compose文件更加高效和易于维护。扩展还可以与锚点和别名一起使用。
使用前缀 "x-" 作为顶层元素,以模块化您希望重用的配置。Compose会忽略以 "x-" 开头的任何字段
示例 1
x-function: &function
labels:
function: "true"
depends_on:
- gateway
networks:
- functions
deploy:
placement:
constraints:
- 'node.platform.os == linux'
services:
# Node.js gives OS info about the node (Host)
nodeinfo:
<<: *function
image: functions/nodeinfo:latest
environment:
no_proxy: "gateway"
https_proxy: $https_proxy
# Uses `cat` to echo back response, fastest function to execute.
echoit:
<<: *function
image: functions/alpine:health
environment:
fprocess: "cat"
no_proxy: "gateway"
https_proxy: $https_proxy
示例2
x-environment: &default-environment
FOO: BAR
ZOT: QUIX
x-keys: &keys
KEY: VALUE
services:
frontend:
image: example/webapp
environment:
<< : [*default-environment, *keys]
YET_ANOTHER: VARIABLE
Last updated
Was this helpful?