Импорт образов контейнеров в реестр контейнеров
Образы контейнеров можно легко импортировать (копировать) в Реестр контейнеров 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.
Импорт изображений позволяет переместить содержимое в реестр контейнеров в другом регионе Azure, подписке или клиенте Microsoft Entra. Дополнительные сведения см. в статье Ручное перемещение реестра контейнеров в другой регион.
Отключите экспорт артефактов из реестра контейнеров с ограниченным доступом к сети.