扩展

Fragments一样,扩展可用于使您的 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都包括x-function通过&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
库伯内特斯Kubernetes

指定字节值

值将字节值表示为字符串,{amount}{byte unit}格式为:支持的单位为b(字节)、kkb(千字节)、mmb(兆字节)和ggb(千兆字节)。

    2b
    1024kb
    2048k
    300m
    1gb

指定持续时间

值将持续时间表示为 形式的字符串{value}{unit}。支持的单位有us(微秒)、ms(毫秒)、s(秒)、m(分钟)和h(小时)。值可以组合多个值而无需分隔符。

  10ms
  40s
  1m30s
  1h5m30s20ms