扩展
扩展可用于使 Compose 文件更有效率,更易于维护。
使用前缀 x-
作为顶层元素,对要重用的配置进行模块化。Compose 会忽略所有以 x-
开头的字段,这是 Compose 唯一会静默忽略未识别字段的例外。
扩展也可以与 锚点和别名 一起使用。
它们也可以在 Compose 文件中任何不期望用户定义键的结构内使用。Compose 使用它们来启用实验性功能,就像浏览器添加对 自定义 CSS 功能 一样。
示例 1
x-custom:
foo:
- bar
- zot
services:
webapp:
image: example/webapp
x-foo: bar
service:
backend:
deploy:
placement:
x-aws-role: "arn:aws:iam::XXXXXXXXXXXX:role/foo"
x-aws-region: "eu-west-3"
x-azure-region: "france-central"
示例 2
x-env: &env
environment:
- CONFIG_KEY
- EXAMPLE_KEY
services:
first:
<<: *env
image: my-image:latest
second:
<<: *env
image: another-image:latest
在这个例子中,环境变量不属于任何服务。它们已经被完全从服务中提取出来,并放置到 `x-env` 扩展字段中。这定义了一个新的节点,包含了环境字段。使用了 `&env` YAML 锚点,以便两个服务都可以引用扩展字段的值,使用 `*env`。
示例 3
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
`nodeinfo` 和 `echoit` 服务都通过 `&function` 锚点包含 `x-function` 扩展,然后分别设置它们的特定镜像和环境。
示例 4
使用 YAML 合并 也可能使用多个扩展,并根据具体需要共享和覆盖其他属性。
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
注意
YAML 合并 仅适用于映射,不能用于序列。
在上面的示例中,环境变量使用 `FOO: BAR` 映射语法声明,而序列语法 `- FOO=BAR` 仅在没有片段参与时有效。
信息性历史记录
本节内容仅供参考。在撰写本文时,已知存在以下前缀。
前缀 | 供应商/组织 |
---|---|
docker | Docker |
kubernetes | Kubernetes |
指定字节值
值以 `{amount}{byte unit}` 格式的字符串形式表示字节值:支持的单位是 `b`(字节)、`k` 或 `kb`(千字节)、`m` 或 `mb`(兆字节)和 `g` 或 `gb`(吉字节)。
2b
1024kb
2048k
300m
1gb
指定持续时间
值以 `{value}{unit}` 格式的字符串形式表示持续时间。支持的单位是 `us`(微秒)、`ms`(毫秒)、`s`(秒)、`m`(分钟)和 `h`(小时)。值可以组合多个值,无需分隔符。
10ms
40s
1m30s
1h5m30s20ms