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

在容器實例的正常作業期間,您可能會發現需要更新容器群組中執行中的容器。 例如,您可能想要更新映像版本、DNS 名稱或環境變數之類的屬性,或重新整理應用程式當機之容器中的屬性。

使用至少一個已修改的屬性來重新部署現有群組,以更新執行中容器群組中的容器。 當您更新容器群組時,群組中的所有執行中容器都會就地重新啟動,而這通常是在相同的基礎容器主機上。

注意

無法更新已終止或已刪除的容器群組。 終止 (處於成功或失敗狀態) 或刪除容器群組之後,必須將群組部署為新的群組。 請參閱其他限制

更新容器群組

若要更新現有容器群組:

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

注意

如果您將所有屬性設定為您先前提供的值,而且不會修改或新增任何屬性,容器將會重新啟動以回應 create 命令。

提示

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 名稱標籤、 應用程式更新容器群組,並使用先前使用的值來設定其餘屬性:

# 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) 部署速度大幅提升。

限制

  • 並非容器群組的所有屬性都支援更新。 若要變更容器群組的某些屬性,您必須先刪除該群組,然後予以重新部署。 請參閱需要容器刪除的屬性
  • 當您更新容器群組時,容器群組中的所有容器都會重新啟動。 您無法在多容器群組中執行特定容器的更新或就地重新啟動。
  • 在更新之間,通常會保留容器群組的 IP 位址,但不保證會維持不變。 只要容器群組部署至相同的基礎主機,容器群組就會保留其 IP 位址。 雖然罕見,但有一些 Azure 內部事件可能會導致重新部署至不同的主機。 若要解決此問題,建議對您的容器執行個體使用 DNS 名稱標籤。
  • 無法更新已終止或已刪除的容器群組。 停止 (處於 [已終止] 狀態) 或刪除容器群組之後,會將群組部署為新的群組。

注意

如果 Azure 容器群組已連結至 Azure 儲存體設定檔,可能就無法運作更新命令。

需要刪除容器的屬性

並非所有容器群組屬性都可以更新。 例如,若要變更容器的重新啟動原則,您必須先刪除容器群組,然後重新予以建立。

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

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

重要

2021-07-01 API 版本起,網路設定檔便已淘汰。 如果您使用此版本或更新版本,請忽略網路設定檔相關的任何步驟和動作。

當您刪除容器群組並加以重新建立時,它並非「重新部署」,而是新建立的。 所有映射層都會從登錄中擷取,而不是從先前部署快取的圖層提取。 容器的 IP 位址也可能會因為部署到不同的基礎主機而變更。

下一步

本文提及 容器群組 數次。 Azure 容器執行個體中的每個容器都會部署在容器群組中,而容器群組可以包含多個容器。 下列文章提供容器群組的詳細資訊: