Импорт образов контейнеров в реестр контейнеров

Образы контейнеров можно легко импортировать (копировать) в Реестр контейнеров Azure, не используя команды Docker. Например, импортируйте образы из реестра разработки в реестр рабочей среды или скопируйте базовые образы из общедоступного реестра.

Реестр контейнеров Azure обрабатывает ряд распространенных сценариев для копирования образов и других артефактов из имеющегося реестра:

  • Импорт образов из общедоступного реестра

  • Импортируйте образ или артефакты OCI, включая диаграммы Helm 3, из другого реестра контейнеров Azure в той же или другой подписке или клиенте Azure.

  • Импорт из закрытого реестра контейнеров, не относящегося к Azure

Импорт образов в Реестр контейнеров Azure имеет следующие преимущества по сравнению с использованием команд CLI Docker:

  • Так как для вашей клиентской среды не требуется локальная установка Docker, импортируйте любой образ контейнера независимо от поддерживаемого типа ОС.

  • При импорте образов с несколькими архитектурами (например, официальные образы Docker) копируются образы для всех архитектур и платформ, указанных в списке манифеста.

  • Доступ к целевому реестру необязательно должен использовать общедоступную конечную точку реестра.

Внимание

  • Для импорта образов требуется поддержка внешнего реестра RFC 7233. Рекомендуется использовать реестр, поддерживающий диапазоны RFC 7233 при использовании команды az acr import с URI реестра, чтобы избежать сбоев.

Ограничения

  • Максимальное число манифестов для импортированного изображения — 50.
  • Максимальный размер слоя для образа, импортированного из общедоступного реестра, — 2 ГиБ.

Чтобы импортировать образы контейнеров при работе с этой статьей, требуется запустить Azure CLI в Azure Cloud Shell или локально (рекомендуется версия 2.0.55 или более поздняя). Чтобы узнать версию, выполните команду az --version. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.

Примечание.

Если нужно распространить идентичные образы контейнеров в нескольких регионах Azure, Реестр контейнеров Azure также поддерживает георепликацию. Путем георепликации реестра (требуется уровень служб "Премиум") можно обслуживать несколько регионов с одинаковыми именами образов и тегов из одного реестра.

Внимание

Изменения в импорте образов между двумя реестрами контейнеров Azure были введены с января 2021 года:

  • Для импорта в реестр контейнеров Azure с ограничением сети или из него требуется наличие ограниченного реестра, чтобы разрешить доступ доверенных служб для обхода сети. По умолчанию этот параметр включен, разрешая импорт. Если этот параметр не включен во вновь созданном реестре с частной конечной точкой или с правилами брандмауэра реестра, импорт завершится ошибкой.
  • В существующем реестре контейнеров Azure с ограничением сети, который используется в качестве источника или целевого объекта импорта, включение этой функции сетевой безопасности является необязательным, но рекомендуется.

Необходимые компоненты

Если у вас еще нет Реестра контейнеров Azure, создайте его. Необходимые инструкции см. в разделе Краткое руководство. Создание закрытого реестра контейнеров с помощью Azure CLI.

Чтобы импортировать образ в Реестр контейнеров Azure, необходимо обладать разрешениями на запись в целевой реестр (по крайней мере роль "Участник" или настраиваемая роль, которая разрешает действие importImage). Ознакомьтесь со статьей Роли и разрешения реестра контейнеров Azure.

Импорт из общедоступного реестра

Внимание

Для импорта из общедоступного реестра в реестр контейнеров Azure с ограниченным доступом из сети для ограниченного реестра должен быть разрешен доступ доверенным службам в обход сети. По умолчанию этот параметр включен, что делает импорт возможным. Если этот параметр не включен во вновь созданном реестре с частной конечной точкой или с правилами брандмауэра реестра, импорт завершится ошибкой.

Импорт из центра Docker

Например, используйте команду az acr import, чтобы импортировать образ hello-world:latest с несколькими архитектурами из центра Docker в реестр с именем myregistry. Так как hello-world — это официальный образ из центра Docker, этот образ находится в используемом по умолчанию репозитории 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. В следующем примере выполняется импорт общедоступного образа из репозитория tensorflow в Docker Hub с помощью учетных данных 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>

Импорт из Реестра контейнеров Майкрософт

Например, импортируйте образ Windows Server Core ltsc2019 из репозитория windows в Microsoft Container Registry.

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

Импорт из реестра контейнеров Azure в том же клиенте AD

Образ можно импортировать из реестра контейнеров Azure в том же клиенте AD с помощью интегрированных разрешений Microsoft Entra.

  • Удостоверение должно иметь разрешения Microsoft Entra для чтения из исходного реестра (роль читателя) и импорта в целевой реестр (роль участника или настраиваемую роль , которая разрешает действие importImage).

  • Реестр может находиться в той же или другой подписке Azure в одном клиенте Active Directory.

  • Общий доступ к исходному реестру может быть отключен. Если общий доступ отключен, укажите исходный реестр по идентификатору ресурса, а не по имени сервера входа в реестр.

  • Если к исходному и (или) целевому реестру применены правила брандмауэра частной конечной точки или реестра, убедитесь, что ограниченный реестр разрешает доверенным службам доступ к сети.

Импорт из реестра в одной и той же подписке

Например, импортируйте образ aci-helloworld:latest из исходного реестра mysourceregistry в myregistry в той же подписке Azure.

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

В следующем примере показано, как импортировать образ aci-helloworld:latest в myregistry из исходного реестра mysourceregistry, в котором доступ к общедоступной конечной точке реестра отключен. Укажите идентификатор ресурса исходного реестра с параметром --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 (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 с разрешениями на доступ ACRPull к исходному реестру. Субъект-службу можно использовать для систем сборки и других автоматических систем, чтобы импортировать образы в ваш реестр.

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

Импорт из реестра контейнеров Azure в другом клиенте AD

Чтобы импортировать из реестра контейнеров Azure в другом клиенте Microsoft Entra, укажите исходный реестр по имени сервера входа и укажите учетные данные, которые позволяют доступ на вытягивание в реестр.

Межклиентский импорт с помощью имени пользователя и пароля

Например, используйте маркер в области репозитория и пароль, а также appID и пароль субъекта-службы Active Directory с доступом 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.