Compose 部署規範
Deploy 是 Compose 規範的可選部分。它提供了一組部署規範,用於管理容器在不同環境中的行為。
屬性
endpoint_mode
endpoint_mode
指定了外部客戶端連線到服務時的服務發現方法。Compose 部署規範定義了兩個規範值:
endpoint_mode: vip
:為服務分配一個虛擬 IP (VIP),作為客戶端在網路上訪問服務的前端。平臺在客戶端和執行服務的節點之間路由請求,客戶端無需瞭解服務中有多少節點參與以及它們的 IP 地址或埠。endpoint_mode: dnsrr
:平臺為服務設定 DNS 條目,使服務名稱的 DNS 查詢返回 IP 地址列表(DNS 迴圈),客戶端直接連線到其中一個地址。
services:
frontend:
image: example/webapp
ports:
- "8080:80"
deploy:
mode: replicated
replicas: 2
endpoint_mode: vip
labels
labels
指定服務的元資料。這些標籤僅設定在服務上,而不設定在服務的任何容器上。這假定平臺具有一些可以匹配 Compose 應用程式模型的原生“服務”概念。
services:
frontend:
image: example/webapp
deploy:
labels:
com.example.description: "This label will appear on the web service"
mode
mode
定義了用於執行服務或作業的複製模型。選項包括:
global
:確保每個物理節點上持續執行且只有一個任務,直到停止。replicated
:在節點上持續執行指定數量的任務,直到停止(預設)。replicated-job
:執行定義數量的任務,直到完成狀態(以程式碼 0 退出)。- 總任務數由
replicas
決定。 - 併發度可以使用
max-concurrent
選項進行限制(僅限 CLI)。
- 總任務數由
global-job
:在每個物理節點上執行一個任務,直到完成狀態(以程式碼 0 退出)。- 新節點新增時自動執行。
services:
frontend:
image: example/webapp
deploy:
mode: global
batch-job:
image: example/processor
deploy:
mode: replicated-job
replicas: 5
maintenance:
image: example/updater
deploy:
mode: global-job
注意
- 作業模式(
replicated-job
和global-job
)專為完成並以程式碼 0 退出的任務設計。- 已完成的任務會保留,直到明確刪除。
- 控制併發的選項(如
max-concurrent
)僅透過 CLI 支援,在 Compose 中不可用。
有關作業選項和行為的更多詳細資訊,請參閱 Docker CLI 文件
placement
placement
指定了平臺選擇物理節點來執行服務容器的約束和偏好。
constraints
constraints
定義了平臺節點必須滿足的執行服務容器的必需屬性。有關更多示例,請參閱 CLI 參考文件。
deploy:
placement:
constraints:
- disktype=ssd
preferences
preferences
定義了一種策略(目前只支援 spread
策略),用於將任務均勻地分佈在資料中心節點標籤的值上。有關更多示例,請參閱 CLI 參考文件
deploy:
placement:
preferences:
- spread: node.labels.zone
replicas
如果服務是 replicated
(預設),replicas
指定在任何給定時間應執行的容器數量。
services:
frontend:
image: example/webapp
deploy:
mode: replicated
replicas: 6
resources
resources
配置容器在平臺上執行的物理資源限制。這些限制可以配置為:
limits
:平臺必須阻止容器分配超過限制的資源。reservations
:平臺必須保證容器至少可以分配配置的數量。
services:
frontend:
image: example/webapp
deploy:
resources:
limits:
cpus: '0.50'
memory: 50M
pids: 1
reservations:
cpus: '0.25'
memory: 20M
cpus
cpus
配置容器可以使用多少可用 CPU 資源(以核心數表示)的限制或預留。
memory
memory
配置容器可以分配的記憶體量的限制或預留,設定為表示位元組值的字串。
pids
pids
調整容器的 PIDs 限制,設定為整數。
devices
devices
配置容器可以使用的裝置預留。它包含一個預留列表,每個預留都設定為一個物件,包含以下引數:capabilities
、driver
、count
、device_ids
和 options
。
裝置使用功能列表進行預留,使 capabilities
成為唯一必填欄位。裝置必須滿足所有請求的功能才能成功預留。
capabilities
capabilities
設定為字串列表,表示通用和驅動程式特定功能。目前識別的通用功能如下:
gpu
:圖形加速器tpu
:AI 加速器
為避免名稱衝突,驅動程式特定功能必須以驅動程式名稱作為字首。例如,預留一個支援 NVIDIA CUDA 的加速器可能如下所示:
deploy:
resources:
reservations:
devices:
- capabilities: ["nvidia-compute"]
驅動程式
可以使用 driver
欄位請求預留裝置的不同驅動程式。該值指定為字串。
deploy:
resources:
reservations:
devices:
- capabilities: ["nvidia-compute"]
driver: nvidia
count
如果 count
設定為 all
或未指定,Compose 將預留所有滿足請求功能的裝置。否則,Compose 將預留至少指定數量的裝置。該值指定為整數。
deploy:
resources:
reservations:
devices:
- capabilities: ["tpu"]
count: 2
count
和 device_ids
欄位是互斥的。如果兩者都指定,Compose 將返回錯誤。
device_ids
如果設定了 device_ids
,Compose 將預留具有指定 ID 的裝置,前提是它們滿足請求的功能。該值指定為字串列表。
deploy:
resources:
reservations:
devices:
- capabilities: ["gpu"]
device_ids: ["GPU-f123d1c9-26bb-df9b-1c23-4a731f61d8c7"]
count
和 device_ids
欄位是互斥的。如果兩者都指定,Compose 將返回錯誤。
options
驅動程式特定選項可以透過 options
設定為鍵值對。
deploy:
resources:
reservations:
devices:
- capabilities: ["gpu"]
driver: gpuvendor
options:
virtualization: false
restart_policy
restart_policy
配置容器退出時是否以及如何重啟。如果未設定 restart_policy
,Compose 會考慮服務配置中設定的 restart
欄位。
condition
。當設定為:none
,容器不會自動重啟,無論退出狀態如何。on-failure
,如果容器因錯誤退出(非零退出程式碼),則會重啟。any
(預設),容器無論退出狀態如何都會重啟。
delay
:每次重啟嘗試之間等待的時間,指定為持續時間。預設值為 0,表示可以立即進行重啟嘗試。max_attempts
:放棄前允許的最大失敗重啟嘗試次數。(預設:無限重試。)只有當容器在window
定義的時間內未能成功重啟時,失敗嘗試才計入max_attempts
。例如,如果max_attempts
設定為2
並且容器在第一次嘗試中未能在視窗內重啟,Compose 將繼續重試,直到發生兩次此類失敗嘗試,即使這意味著嘗試不止兩次。window
:重啟後等待的時間,以確定是否成功,指定為持續時間(預設:重啟後立即評估結果)。
deploy:
restart_policy:
condition: on-failure
delay: 5s
max_attempts: 3
window: 120s
rollback_config
rollback_config
配置服務在更新失敗時如何回滾。
parallelism
:一次回滾的容器數量。如果設定為 0,則所有容器同時回滾。delay
:每個容器組回滾之間等待的時間(預設 0 秒)。failure_action
:如果回滾失敗,應採取的措施。可以是continue
或pause
(預設pause
)。monitor
:每個任務更新後監控失敗的持續時間(ns|us|ms|s|m|h)
(預設 0 秒)。max_failure_ratio
:回滾期間可容忍的失敗率(預設 0)。order
:回滾期間的操作順序。可以是stop-first
(舊任務在啟動新任務之前停止)或start-first
(新任務首先啟動,正在執行的任務短暫重疊)(預設stop-first
)。
update_config
update_config
配置服務應如何更新。對於配置滾動更新很有用。
parallelism
:一次更新的容器數量。delay
:更新一組容器之間等待的時間。failure_action
:如果更新失敗,應採取的措施。可以是continue
、rollback
或pause
(預設:pause
)。monitor
:每個任務更新後監控失敗的持續時間(ns|us|ms|s|m|h)
(預設 0 秒)。max_failure_ratio
:更新期間可容忍的失敗率。order
:更新期間的操作順序。可以是stop-first
(舊任務在啟動新任務之前停止)或start-first
(新任務首先啟動,正在執行的任務短暫重疊)(預設stop-first
)。
deploy:
update_config:
parallelism: 2
delay: 10s
order: stop-first