片段

使用 Compose,你可以利用內建的 YAML 功能使你的 Compose 檔案更整潔、更高效。錨點和別名允許你建立可重用的塊。如果你發現多個服務之間存在通用配置,這將非常有用。擁有可重用的塊可以最大限度地減少潛在的錯誤。

錨點使用 & 符號建立。該符號後跟一個別名。稍後你可以使用 * 符號和此別名來引用錨點後面的值。請確保 &* 字元與後面的別名之間沒有空格。

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

示例 1

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

在上面的示例中,基於 db-data 卷建立了一個 default-volume 錨點。它後來被別名 *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 僅在不涉及片段時有效。