更新 Azure 容器執行個體中的容器

在容器實例正常運作時,你可能會發現需要更新容器 群組中正在運行的容器。 例如,你可能想更新某個屬性,例如圖片版本、DNS 名稱或環境變數,或是刷新容器中應用程式當機的屬性。

透過重新部署一個至少修改過一個屬性的現有群組來更新正在運行的容器群組。 當你更新容器群組時,群組內所有正在運行的容器都會原地重新啟動,通常會在同一底層容器主機上。

附註

終止或刪除的容器群組無法更新。 一旦容器群組終止(處於成功或失敗狀態)或被刪除,該群組必須以新組織形式部署。 請參見其他 限制。

更新容器群組

要更新現有容器群組:

  • 發出建立指令(或使用 Azure 入口網站),並指定一個現有群組的名稱
  • 在重新部署時,修改或新增群組的至少一個屬性,而此屬性支援更新。 某些屬性 不支援更新。
  • 使用您先前提供的值來設定其他屬性。 如果你沒有為某個屬性設定值,它就會回復到預設值。

附註

如果你把所有屬性都設成你之前提供的值,且不修改或新增任何值,容器會根據 create 指令重新啟動。

Tip

YAML 檔案有助於維護容器群組的部署設定,並提供部署更新群組的起點。 如果你用不同方法建立群組,可以用 az container export 將設定匯出成 YAML,

範例

以下 Azure CLI 範例更新容器群組並更換新的 DNS 名稱標籤。 由於群組的 DNS 名稱標籤屬性是可更新的,容器群組會重新部署,容器也會重新啟動。

初始部署時使用 DNS 名稱標籤 myapplication-staging:

# Create container group
az container create --resource-group myResourceGroup --name mycontainer \
    --image nginx:alpine --dns-name-label myapplication-staging

使用新的 DNS 名稱標籤 application 更新容器群組,並將其餘屬性設為先前使用的值:

# Update DNS name label (restarts container), leave other properties unchanged
az container create --resource-group myResourceGroup --name mycontainer \
    --image nginx:alpine --dns-name-label myapplication

更新優點

更新現有容器群組的主要好處是部署速度更快。 當你重新部署現有容器群組時,其容器映像層會從先前部署快取的層中拉取。 與新部署時從登錄檔直接拉取所有映像層不同,只有修改過的圖層(如果有的話)會被拉取。

對於以較大型容器映像檔為基礎的應用程式,例如 Windows Server Core,若採用更新而非刪除後重新部署,部署速度可顯著提升。

Limitations

  • 並非容器群組的所有屬性都支援更新。 若要變更容器群組的某些屬性,您必須先刪除該群組,然後予以重新部署。 請參見 需要移除容器的屬性。
  • 當你更新容器群組時,容器群組中的所有容器都會重新啟動。 您無法在多容器群組中執行特定容器的更新或就地重新啟動。
  • 容器群組的 IP 位址通常會在更新間保留,但不保證會保持不變。 只要容器群組部署到同一底層主機,容器群組就會保留其 IP 位址。 雖然罕見,但有些 Azure 內部事件可能導致重新部署到其他主機。 為了減輕這個問題,我們建議為你的容器實例使用 DNS 名稱標籤。
  • 終止或刪除的容器群組無法更新。 一旦容器群組被停止(處於 終止 狀態)或刪除,該群組就會以新群組形式部署。

附註

如果 Azure 容器群組綁定在 Azure 儲存體 設定檔上,更新指令可能無法運作。

需要容器刪除的屬性

並非所有容器群組屬性都能更新。 例如,要更改容器的重新啟動政策,必須先刪除容器群組,然後再重新建立。

這些屬性的變更需要在重新部署前刪除容器群組:

  • OS 類型
  • CPU、記憶體或 GPU 資源
  • 重新啟動原則
  • 網路設定檔
  • 可用性區域

Important

網路設定檔 自 2021-07-01 API 版本起已淘汰。 如果你使用這個版本或較新的版本,請忽略任何與網路設定檔相關的步驟和操作。

當你刪除容器群組並重新建立時,它不是「重新部署」,而是重新建立。 所有映像層都是從登錄檔全新拉取,而非先前部署快取的圖層。 容器的 IP 位址也可能因部署到不同的底層主機而改變。

下一步

本文多次提及 容器群組 。 Azure 容器執行個體 中的每個容器都部署在一個容器群組中,且容器群組可以包含多個容器。 以下文章提供更多關於容器群組的資訊: