片段
目錄
使用 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
僅在不涉及片段時有效。