擴充功能

擴充功能可以讓您的 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

nodeinfoechoit 服務都透過 &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

指定位元組值

值以 {數量}{位元組單位} 的格式將位元組值表示為字串:支援的單位為 b(位元組)、kkb(千位元組)、mmb(百萬位元組)和 ggb(十億位元組)。

    2b
    1024kb
    2048k
    300m
    1gb

指定持續時間

值以 {值}{單位} 的形式將持續時間表示為字串。支援的單位有 us(微秒)、ms(毫秒)、s(秒)、m(分鐘)和 h(小時)。值可以組合多個值,無需分隔符號。

  10ms
  40s
  1m30s
  1h5m30s20ms