共用方式為


關於 ACR 工作的基底映像更新

本文提供有關應用程式基底映像更新的背景資訊,以及這些更新如何觸發 Azure Container Registry 工作。

什麼是基底映像?

定義大多數容器映像的 Dockerfile,會指定供其作為基底的父映像,通常稱為其基底映像。 基底映像通常包含會套用容器其餘各層的作業系統,例如 Alpine Linux 或 Windows Nano Server。 此外也可能包含應用程式架構,例如 Node.js.NET Core。 這些基底映像本身通常是以公用上游映像為基底。 您有數個應用程式映像可能會共用一個通用基底映像。

基底映像常會由映像維護程式進行更新,以在映像中納入作業系統或架構的新功能或增強功能。 安全性修補程式是基底映像進行更新的另一個常見原因。 在這些上游更新時,您也必須更新基底映像以包含重大修正。 接著,還必須重建每個應用程式映像,以包含現在包含在基底映像中的這些上游修正。

在某些情況下,例如私人開發小組,基底映像可能會指定超過 OS 或架構。 例如,基底映像可能是需要追蹤的共用服務元件映像。 小組成員可能需要追蹤此基底映像以進行測試,或需要在開發應用程式映像時定期更新映像。

維護基底映像的複本

針對您的登錄中任何取決於公用登錄所維護的基本內容,例如 Docker Hub,建議您將內容複寫至 Azure 容器登錄或其他私人登錄。 然後,請確保您參考私人基底映像以建置自身的應用程式映像。 Azure Container Registry 提供映像匯入功能,您能從公用登錄或其他 Azure 容器登錄輕鬆地複製內容。 下一節說明在建立應用程式更新時,使用 ACR 工作以追蹤基底映像更新。 您可以在自身 Azure 容器登錄中追蹤基底映像更新,或選擇在上游公用登錄中追蹤基底映像更新。

追蹤基底映像更新

ACR 工作具有在容器的基底映像更新時自動為您建置映像的能力。 您可以使用這項功能來維護及更新 Azure 容器登錄中公用基底映像的複本,然後重建與基底映像相依的應用程式映像。

在建立容器映像時,ACR 工作會動態探索基底映像相依性。 因此,ACR 工作能偵測應用程式映像的基底映像何時更新。 運用一項預先設定的建置工作,ACR 工作能自動重建參考基底映像的每個應用程式映像。 透過這個自動偵測和重建功能,「ACR 工作」便可讓您針對參考已更新之基底映像的每個應用程式映像,省下手動追蹤及更新通常所需的時間與精力。

基底映像位置

針對來自 Dockerfile 的映像組建,ACR 工作會偵測下列位置中的基底映像相依性:

  • 執行工作所在的相同 Azure 容器登錄
  • 相同或不同區域中的另一個私人 Azure 容器登錄
  • Docker Hub 中的公用存放庫
  • Microsoft 容器登錄中的公用存放庫

如果 FROM 陳述式所指定的基底映像位於其中一個位置,則 ACR 工作會新增一個 Hook,以確保映像會在其基底有所更新時進行重建。

基底映像通知

更新基底映像和觸發相依工作之間的時間,取決於基底映像位置:

  • Docker Hub 或 MCR 中公用存放庫的基底映像 - 針對公用存放庫的基底映像,ACR 工作會在 10 到 60 分鐘之間的隨機間隔檢查映像更新。 相依工作會據此執行。
  • 來自 Azure 容器登錄的基底映像 - 針對 Azure 容器登錄中的基底映射,ACR 工作會在更新基底映像時立即觸發執行。 基底映像可能位於執行工作所在的相同 ACR 中,或位於任何區域的不同 ACR 中。

其他考量

  • 應用程式映像的基底映像 - 目前,ACR 工作只會追蹤應用程式 (執行階段) 映像的基底映像更新。 不會針對用於多階段 Dockerfile 的中繼 (建置階段) 映像追蹤基底映像更新。

  • 預設啟用 - 當您使用 az acr task create 命令建立 ACR 工作時,工作預設為「啟用」由基底映像更新觸發。 也就是 base-image-trigger-enabled 屬性設定為 True。 如果您想要在工作中停用此行為,請將屬性更新為 False。 例如,執行以下 az acr task update 命令:

    az acr task update --registry myregistry --name mytask --base-image-trigger-enabled False
    
  • 觸發以追蹤相依性 - 若要讓 ACR 工作能夠判斷和追蹤容器映像的相依性 (包括其基底映像),您必須先觸發工作以建立映像至少一次。 例如,使用 az acr task run 命令以手動觸發工作。

  • 基底映像的穩定標籤 - 若要在基底映像更新時觸發工作,基底映像必須具有「穩定」標籤,例如 node:9-alpine。 這個標籤通常適用於隨著 OS 和架構修補程式更新到最新穩定版本的基底映像。 如果基底映像是隨著新版本標籤更新,它就不會觸發工作。 如需有關映像標籤的詳細資訊,請參閱最佳做法指引

  • 其他工作觸發程序 - 在基底映像更新所觸發的工作中,您也可以根據 原始程式碼認可排程啟用觸發程序。 基底映像更新也可以觸發多步驟工作

下一步

針對在更新基底映像後自動執行應用程式映像建置的案例,請參閱以下教學課程: