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