片段

使用 Compose,您可以使用內建的 YAML 功能來使您的 Compose 檔案更整潔、更高效。錨點和別名允許您建立可重複使用的程式碼塊。如果您開始發現跨多個服務的通用配置,這將非常有用。擁有可重複使用的程式碼塊可以最大程度地減少潛在的錯誤。

錨點使用 & 符號建立。符號後跟一個別名。您可以在後面的程式碼中使用 * 符號和該別名來引用錨點後面的值。請確保 &* 字元以及後面的別名之間沒有空格。

您可以在單個 Compose 檔案中使用多個錨點和別名。

示例 1

volumes:
  db-data: &default-volume
    driver: default
  metrics: *default-volume

在上面的示例中,default-volume 錨點基於 db-data 卷建立。它稍後由別名 *default-volume 重用以定義 metrics 卷。

錨點解析發生在 變數插值 之前,因此不能使用變數來設定錨點或別名。

示例 2

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

如果您有一個要在多個服務中使用的錨點,請將其與 擴充套件 結合使用,以使您的 Compose 檔案更容易維護。

示例 3

您可能需要部分覆蓋值。Compose 遵循由 YAML 合併型別 概述的規則。

在以下示例中,metrics 卷規範使用別名來避免重複,但覆蓋了 name 屬性。

services:
  backend:
    image: example/database
    volumes:
      - db-data
      - metrics
volumes:
  db-data: &default-volume
    driver: default
    name: "data"
  metrics:
    <<: *default-volume
    name: "metrics"

示例 4

您還可以擴充套件錨點以新增其他值。

services:
  first:
    image: my-image:latest
    environment: &env
      FOO: BAR
      ZOT: QUIX
  second:
    image: another-image:latest
    environment:
      <<: *env
      YET_ANOTHER: VARIABLE

注意

YAML 合併 僅適用於對映,不能用於序列。

在上面的示例中,環境變數必須使用 FOO: BAR 對映語法宣告,而序列語法 - FOO=BAR 僅在不涉及片段時有效。