共用方式為


將容器映像匯入到容器登錄

您可以輕易地將容器映像匯入 (複製) 到 Azure 容器登錄,不用使用 Docker 命令。 例如,從開發登錄將映像匯入到生產環境登錄,或者從公用登錄複製基底映像。

Azure Container Registry 會處理許多從現有登錄複製映像和其他成品的常見案例:

  • 從公用登錄匯入映像

  • 在相同或不同的 Azure 訂用帳戶或租用戶中匯入映像或 OCI 成品,包括來自另一個 Azure 容器登錄的 Helm 3 圖表

  • 從非 Azure 私人容器登錄匯入

匯入到 Azure 容器登錄的映像相較於使用 Docker CLI 命令,具有下列優點:

  • 因為您的用戶端環境不需要本機 Docker 安裝,所以可以匯入任何容器映像,無論支援的作業系統類型是什麼。

  • 如果您匯入多架構映像 (例如,官方 Docker 映像),則會複製資訊清單中指定和所有架構與平台的映像。

  • 如果您有目標登錄的存取權,則不需要登錄的公用端點。

重要

  • 匯入映像需要外部登錄支援 RFC 7233。 建議您使用支援 RFC 7233 範圍的登錄,同時搭配登錄 URI 使用 az acr import 命令以避免失敗。

限制

  • 所匯入映像的資訊清單數目上限為 50。
  • 針對從公用登錄匯入的映像,其圖層大小上限為 2 GiB。

為了匯入容器映像,本文會要求您在 Azure Cloud Shell 或在本機執行 Azure CLI (建議使用 2.0.55 版或更新版本)。 執行 az --version 以尋找版本。 如果您需要安裝或升級,請參閱安裝 Azure CLI

注意

如果您需要將相同的容器映像散佈到多個 Azure 區域,Azure Container Registry 也支援異地複寫。 藉由異地複寫登錄 (需要進階服務層級),您可以使用來自單一登錄的相同映像和標記名稱,為多個區域提供服務。

重要

自 2021 年 1 月起,已引進兩個 Azure 容器登錄之間映像匯入的變更:

  • 匯入至網路受限 Azure 容器登錄或從中匯入時,要求受限登錄透過受信任服務允許存取,以略過網路。 根據預設,會啟用設定,允許匯入。 如果未在具有私人端點或登錄防火牆規則的新建登錄中啟用設定,匯入將會失敗。
  • 在用作匯入來源或目標的現有網路受限 Azure 容器登錄中,啟用此網路安全性功能是選用的,但建議使用。

必要條件

如果您還沒有 Azure 容器登錄,請建立登錄。 請參閱快速入門:使用 Azure CLI 建立私人容器登錄來取得步驟。

若要將映像匯入到 Azure 容器登錄,您的身分識別必須具有目標登錄的寫入權限 (至少是參與者角色,或是允許 importImage 動作的自訂角色)。 請參閱 Azure Container Registry 角色和權限

從公用登錄匯入

重要

若要從公用登錄匯入至網路受限 Azure 容器登錄,要求受限登錄透過受信任服務允許存取,以略過網路。根據預設,會啟用設定,允許匯入。 如果未在具有私人端點或登錄防火牆規則的新建登錄中啟用設定,匯入將會失敗。

從 Docker Hub 匯入

例如,使用 az acr import 命令將多架構 hello-world:latest 映像從 Docker Hub 匯入到名為 myregistry 的登錄。 因為 hello-world 是來自 Docker Hub 的官方映像,此映像在預設 library 存放庫中。 在 --source 映像參數的值中包含存放庫名稱,以及選擇性包含標記。 (您可以選擇性依據其資訊清單摘要來識別映像,而不是依據標記,如此可確保映像的特定版本。)

az acr import \
  --name myregistry \
  --source docker.io/library/hello-world:latest \
  --image hello-world:latest

您可以藉由執行 az acr manifest list-metadata 命令,確認與此映像相關聯的多個資訊清單:

az acr manifest list-metadata \
  --name hello-world \
  --registry myregistry

若要依摘要匯入成品,而不新增標籤:

az acr import \
   --name myregistry \
   --source docker.io/library/hello-world@sha256:abc123 \
   --repository hello-world

如果您具有 Docker Hub 帳戶,建議您在從 Docker Hub 匯入映像時使用認證。 將 Docker Hub 使用者名稱和密碼或個人存取權杖作為參數傳遞至 az acr import。 下列範例會使用 Docker Hub 認證,從 Docker Hub 中的 tensorflow 存放庫匯入公用映像:

az acr import \
  --name myregistry \
  --source docker.io/tensorflow/tensorflow:latest-gpu \
  --image tensorflow:latest-gpu
  --username <Docker Hub user name>
  --password <Docker Hub token>

從 Microsoft 容器登錄匯入

例如,從 Microsoft 容器登錄中的 windows 存放庫匯入 ltsc2019 Windows Server Core 映像。

az acr import \
--name myregistry \
--source mcr.microsoft.com/windows/servercore:ltsc2019 \
--image servercore:ltsc2019

以相同的 AD 租用戶從 Azure 容器登錄匯入

您可以使用整合的 Microsoft Entra 權限,以相同的 AD 租用戶從 Azure 容器登錄匯入映像。

  • 您的身分識別必須具有 Microsoft Entra 權限,才能從來源登錄讀取 (讀者角色),以及匯入到目標登錄 (參與者角色或允許 importImage 動作的自訂角色)。

  • 登錄可以位於相同 Active Directory 租用戶中的相同或不同 Azure 訂用帳戶。

  • 對來源登錄的公用存取會停用。 如果停用公用存取,請依資源識別碼指定來源登錄,而不是依登錄登入伺服器名稱進行此動作。

  • 具有私人端點或登錄防火牆規則的來源登錄和/或目標登錄,必須確定受限登錄允許受信任服務以存取網路。

從相同訂用帳戶中的登錄匯入

例如,將 aci-helloworld:latest 映像從來源登錄 mysourceregistry 匯入到相同 Azure 訂用帳戶中的 myregistry

az acr import \
  --name myregistry \
  --source mysourceregistry.azurecr.io/aci-helloworld:latest \
  --image aci-helloworld:latest

下列範例會將 aci-helloworld:latest 映像從來源登錄 mysourceregistry 匯入至 myregistry,其中對登錄公用端點的存取已停用。 提供來源登錄的資源識別碼與 --registry。 請注意,--source 參數只會指定來源存放庫和標籤,不會提供登錄登入伺服器名稱。

az acr import \
  --name myregistry \
  --source aci-helloworld:latest \
  --image aci-helloworld:latest \
  --registry /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/sourceResourceGroup/providers/Microsoft.ContainerRegistry/registries/mysourceregistry

下列範例會依據資訊清單摘要 (SHA-256 雜湊,表示為 sha256:...) 來匯入映像,而非依據標記:

az acr import \
  --name myregistry \
  --source mysourceregistry.azurecr.io/aci-helloworld@sha256:123456abcdefg

從不同的訂用帳戶匯入登錄

注意

若要將映像從一個登錄匯入到另一個登錄,來源和目標登錄必須確定這兩個區域都已在訂用帳戶的資源提供者下註冊 Azure Container Registry (ACR)。

在下列範例中,mysourceregistry 位於與 myregistry 相同 Active Directory 租用戶中的不同訂用帳戶。 提供來源登錄的資源識別碼與 --registry。 請注意,--source 參數只會指定來源存放庫和標籤,不會提供登錄登入伺服器名稱。

az acr import \
  --name myregistry \
  --source aci-helloworld:latest \
  --image aci-hello-world:latest \
  --registry /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/sourceResourceGroup/providers/Microsoft.ContainerRegistry/registries/mysourceregistry

使用服務主體認證從登錄匯入

若要從您無法使用整合式 Active Directory 權限存取的登錄匯入,您可以對來源登錄使用服務主體認證 (如果有的話)。 提供 Active Directory 服務主體的 appID 和密碼,該服務主體具有來源登錄的 ACRPull 存取權。 在建置系統和其他必須將映像匯入到登錄的自動化系統時,使用服務主體將有其效用。

az acr import \
  --name myregistry \
  --source sourceregistry.azurecr.io/sourcerrepo:tag \
  --image targetimage:tag \
  --username <SP_App_ID> \
  --password <SP_Passwd>

以不同的 AD 租用戶從 Azure 容器登錄匯入

若要以不同的 Microsoft Entra 租用戶從 Azure 容器登錄匯入,請依登入伺服器名稱指定來源登錄,並提供可對登錄啟用提取存取的認證。

  • 不支援透過公用存取停用登錄的跨租用戶匯入。

利用使用者名稱和密碼進行跨租用戶匯入

例如,使用存放庫範圍的權杖和密碼,或 Active Directory 服務主體的 appID 和密碼,而此服務主體具有來源登錄的 ACRPull 存取權。

az acr import \
  --name myregistry \
  --source sourceregistry.azurecr.io/sourcerrepo:tag \
  --image targetimage:tag \
  --username <SP_App_ID> \
  --password <SP_Passwd>

使用存取權杖進行跨租用戶者匯入

  • 不支援透過公用存取停用登錄的跨租用戶匯入。

若要使用來源租用戶中具有登錄權限的身分識別來存取來源登錄,您可以取得存取權杖:

# Login to Azure CLI with the identity, for example a user-assigned managed identity
az login --identity --username <identity_ID>

# Get access token returned by `az account get-access-token`
az account get-access-token

在目標租用戶中,將存取權杖作為密碼傳遞至 az acr import 命令。 來源登錄會指定登入伺服器名稱。 請注意,此命令中不需要使用者名稱:

az acr import \
  --name myregistry \
  --source sourceregistry.azurecr.io/sourcerrepo:tag \
  --image targetimage:tag \
  --password <access-token>

從非 Azure 私人容器登錄匯入

藉由指定可對登錄啟用提取存取的認證,從非 Azure 私人登錄匯入映像。 例如,從私人 Docker 登錄提取映像:

az acr import \
  --name myregistry \
  --source docker.io/sourcerepo/sourceimage:tag \
  --image sourceimage:tag \
  --username <username> \
  --password <password>

下一步

在本文中,您會了解從公用登錄或其他私人登錄將容器映像匯入到 Azure 容器登錄。

  • 如需其他映像匯入選項,請參閱 az acr import 命令參考。