將容器映像匯入容器登錄

您可以輕鬆地將容器映射匯入 Azure 容器登錄,而不需使用 Docker 命令。 例如,將映像從開發登錄匯入至生產登錄,或從公用登錄複製基底映像。

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

  • 從公用登錄匯入映像

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

  • 從非 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 存放庫中。 在 image 參數的值 --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 認證,從 tensorflow Docker Hub 中的存放庫匯入公用映射:

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 Container Registry 匯入

例如,從 windows Microsoft Container Registry 中的存放庫匯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 位於與相同 Active Directory 租使用者中的 myregistry 不同的訂用帳戶中。 使用 --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 許可權存取的登錄匯入,您可以使用來源登錄的服務主體認證(如果有的話)。 提供具有來源登錄之 ACRPull 存取權之 Active Directory 服務主體 的 appID 和密碼。 使用服務主體對於需要將映像匯入登錄的組建系統和其他自動系統很有用。

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 和密碼。

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 命令參考。