扩展字段可用于让你的 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 扩展字段中。这定义了一个包含 environment 字段的新节点。YAML 锚点 &env 被使用,以便两个服务都能以 *env 的形式引用该扩展字段的值。

x-env: &env
  environment:
    - CONFIG_KEY
    - EXAMPLE_KEY
 
services:
  first:
    <<: *env
    image: my-image:latest
  second:
    <<: *env
    image: another-image:latest

示例3:nodeinfo 和 echoit 服务都通过 &function 锚点引入了 x-function 扩展字段,然后设置了各自特定的 image 和 environment。

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

示例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 合并仅适用于映射(mappings),不能用于序列(sequences)。

在上面的示例中,环境变量使用了 FOO: BAR 的映射语法声明,而序列语法 - FOO=BAR 仅在未涉及片段合并时有效。

指定字节值:数值以 {数值}{字节单位} 格式的字符串表示字节值:支持的单位包括 b(字节)、k 或 kb(千字节)、m 或 mb(兆字节)和 g 或 gb(吉字节)。

2b
1024kb
2048k
300m
1gb

指定时间段:数值以 {数值}{单位} 格式的字符串表示持续时间。支持的单位包括:us(微秒)、ms(毫秒)、s(秒)、m(分钟)和 h(小时)。数值可以组合多个值而无需分隔符。

  10ms
  40s
  1m30s
  1h5m30s20ms

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐