擴充套件

擴充套件可用於使 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` 僅在沒有片段參與時有效。

資訊性歷史記錄

本節內容僅供參考。在撰寫本文時,已知存在以下字首。

字首供應商/組織
dockerDocker
kubernetesKubernetes

指定位元組值

值以 `{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