Importar imagens de contêiner para um registro de contêiner

Pode facilmente importar (copiar) imagens de contentores para um registo de contentores do Azure sem usar comandos Docker. Por exemplo, pode importar imagens de um registo de desenvolvimento para um registo de produção, ou copiar imagens base de um registo público.

O Registro de Contêiner do Azure lida com muitos cenários comuns para copiar imagens e outros artefatos de um registro existente:

  • Importa imagens de um registo público.

  • Importe imagens ou artefactos OCI, incluindo charts do Helm 3, de outro registo de contentores do Azure na mesma subscrição do Azure, no mesmo inquilino do Azure, ou entre subscrições e inquilinos.

  • Importar imagens de um registo privado de contentores que não seja do Azure.

Importar imagens para um registo de contentores do Azure tem os seguintes benefícios em comparação com o uso de comandos CLI do Docker:

  • Se o seu ambiente cliente não precisar de uma instalação local do Docker, pode importar qualquer imagem de contentor, independentemente do tipo de SO suportado.

  • Se você importar imagens de várias arquiteturas (como imagens oficiais do Docker), as imagens de todas as arquiteturas e plataformas especificadas na lista de manifesto serão copiadas.

  • Se você tiver acesso ao registro de destino, não precisará do ponto de extremidade público do registro.

Importante

A importação de imagens requer suporte externo de registo RFC 7233. Para evitar falhas, utilize um registo que suporte intervalos RFC 7233 enquanto utiliza o az acr import comando com o URI do registo.

Limitações

  • O número máximo de manifestos para uma imagem importada é 50.

Para importar imagens de contentores, execute a CLI do Azure no Azure Cloud Shell ou localmente.

Observação

Se precisar distribuir imagens de contêineres idênticas em várias regiões do Azure, o Azure Container Registry também suporta geo-replicação. Ao geo-replicar um registo (é necessário o nível de serviço Premium), pode servir múltiplas regiões com nomes de imagens e tags idênticos a partir de um único registo.

Importante

Para importar para ou a partir de um registo de contentores Azure restrito à rede, o registo restrito deve permitir o acesso por serviços de confiança para contornar a rede. Por predefinição, esta definição está ativada, pelo que a importação funciona. Se criares um registo com um endpoint privado ou com regras de firewall de registo e não ativares a definição, a importação falha.

Pré-requisitos

Se você ainda não tiver um registro de contêiner do Azure, crie um registro. Para conhecer as etapas, consulte Guia de início rápido: criar um registro de contêiner privado usando a CLI do Azure.

Para importar uma imagem para um Registro de Contêiner do Azure, sua identidade deve ter permissões para disparar importações no Registro de destino (Container Registry Data Importer and Data Reader função). Consulte Visão geral das permissões e funções do Azure Container Registry Entra.

Importar imagens de contentores a partir de um registo público

Importante

Para importar de um registo público para um registo de contentores Azure restrito à rede, o registo restrito deve permitir o acesso de serviços de confiança para contornar a rede. Por defeito, esta definição está ativada, por isso a importação funciona. Se desativar esta configuração num registo recém-criado com um endpoint privado ou com regras de firewall de registo, a importação falha.

Importar imagens de contentores a partir do Docker Hub

Por exemplo, use o comando az acr import para importar a imagem multiarquitetura hello-world:latest do Docker Hub para um registro chamado myregistry. Como hello-world é uma imagem oficial do Docker Hub, essa imagem está no repositório padrão library . Inclua o nome do repositório e, opcionalmente, uma tag no valor do parâmetro de imagem --source. (Opcionalmente, você pode identificar uma imagem por seu resumo de manifesto em vez de por tag, o que garante uma versão específica de uma imagem.)

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

Você pode verificar se vários manifestos estão associados a esta imagem executando o comando az acr manifest list-metadata :

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

Para importar um artefato por resumo sem adicionar uma tag:

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

Se tiver uma conta no Docker Hub, use as credenciais ao importar uma imagem do Docker Hub. Passe o nome de usuário do Docker Hub e a senha ou um token de acesso pessoal como parâmetros para az acr import. O exemplo a seguir importa uma imagem pública do tensorflow repositório no Docker Hub, usando credenciais do 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>

Importar imagens de contentores do Microsoft Container Registry

Por exemplo, importe a imagem Windows Server Core do repositório ltsc2022 da Microsoft Container Registry.

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

Importar imagens de contentores a partir de um registo de contentores do Azure no mesmo tenant Microsoft Entra

Pode importar uma imagem de um registo de contentores do Azure no mesmo tenant Microsoft Entra usando permissões integradas do Microsoft Entra.

  • A sua identidade deve ter permissões para visualizar e extrair imagens, etiquetas e referenciadores OCI do registo de origem (Container Registry Data Importer and Data Reader função atribuída ao registo de origem).

  • A sua identidade deve também ter permissões para ler imagens e ativar importações no registo alvo (Container Registry Data Importer and Data Reader função atribuída ao registo alvo).

  • O registo pode estar na mesma subscrição Azure ou numa diferente no mesmo tenant Microsoft Entra.

  • O acesso público ao registo de origem está desativado. Se o acesso público estiver desabilitado, especifique o registro de origem por ID de recurso em vez de por nome do servidor de login do Registro.

  • O registro de origem e/ou o registro de destino com um ponto de extremidade privado ou regras de firewall de registro devem garantir que o registro restrito permita que serviços confiáveis acessem a rede.

Importar imagens de contentores de um registo na mesma subscrição

Por exemplo, faça a importação da aci-helloworld:latest imagem de um registo de origem mysourceregistry para myregistry na mesma subscrição do Azure.

O exemplo a seguir importa a aci-helloworld:latest imagem para myregistry de um registo de origem mysourceregistry no qual o acesso ao endereço público do registo está desativado. Forneça o ID do recurso do registro de origem com o --registry parâmetro. Observe que o --source parâmetro especifica apenas o repositório de origem e a tag, não o nome do servidor de login do Registro.

Para utilizar a autenticação de identidade do Microsoft Entra para o registo de origem, inclua a opção --registry <source-registry-resource-id>.

az acr import \
  --name myregistry \
  --source aci-helloworld:latest \
  --image aci-helloworld:latest \
  --registry /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/sourceResourceGroup/providers/Microsoft.ContainerRegistry/registries/mysourceregistry

Importar imagens de contentores de um registo numa subscrição diferente

Observação

Para importar uma imagem de um registro para outro, os registros de origem e de destino devem garantir que ambas as regiões estejam registradas no Registro de Contêiner do Azure (ACR) sob os provedores de recursos da assinatura.

No exemplo seguinte, o mysourceregistry está numa subscrição diferente do myregistry no mesmo tenant. Forneça o ID do recurso do registo de origem usando o --registry parâmetro. O --source parâmetro especifica apenas o repositório de origem e a etiqueta, não o nome do servidor de login do registo.

az acr import \
  --name myregistry \
  --source aci-helloworld:latest \
  --image aci-hello-world:latest \
  --registry /subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/sourceResourceGroup/providers/Microsoft.ContainerRegistry/registries/mysourceregistry

Importar imagens de contentores de um registo usando credenciais de principal de serviço

Para importar de um registo ao qual não se pode aceder usando permissões integradas do Active Directory, use as credenciais do principal de serviço (se disponíveis) para o registo de origem. Introduza o ID da aplicação e a palavra-passe de um principal de serviço do Microsoft Entra que tenha a atribuição de função correta para aceder ao registo de origem.

  • Para os princípios de serviço do Microsoft Entra, certifique-se de que quer Container Registry Repository Reader (para registos com ABAC ativado) quer AcrPull (para registos sem ABAC ativado) esteja atribuído.

O uso de uma identidade de serviço é útil para sistemas de compilação e outros sistemas autónomos que precisam importar imagens para o registo.

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

Importar imagens de contentores a partir de um registo de contentores do Azure num tenant diferente

Para importar imagens de um registo de contentores do Azure num tenant diferente do Microsoft Entra, especifique o registo de origem pelo nome do servidor de login e forneça credenciais que permitam o acesso pull ao registo.

A importação entre tenants não é suportada num registo com o acesso público desativado.

Importação entre inquilinos com nome de utilizador e senha

Por exemplo, use um token e uma senha que não tenham o escopo do repositório do Microsoft Entra ou o appID e a senha de uma entidade de serviço do Microsoft Entra que tenha atribuições de função corretas para o registro de origem.

  • Para princípios de serviço do Microsoft Entra, certifique-se de que Container Registry Repository Reader (para registos com ABAC) ou AcrPull (para registos sem ABAC) esteja atribuído no registo de origem.
az acr import \
  --name myregistry \
  --source sourceregistry.azurecr.io/sourcerepo:tag \
  --image targetimage:tag \
  --username <SP_App_ID> \
  --password <SP_Passwd>

Importação entre locatários com token de acesso

Para aceder ao registo de origem usando uma identidade no tenant de origem que tenha permissões de registo, obtenha um token de acesso:

# 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

No locatário de destino, passe o token de acesso como senha para o comando az acr import. O registro de origem especifica o nome do servidor de logon. Não é necessário nenhum nome de utilizador neste comando:

az acr import \
  --name myregistry \
  --source sourceregistry.azurecr.io/sourcerepo:tag \
  --image targetimage:tag \
  --password ($token|ConvertFrom-Json).accessToken

Importar imagens de contentores a partir de um registo privado de contentores que não seja do Azure

Importe uma imagem de um registro privado que não seja do Azure especificando credenciais que permitem o acesso pull ao registro. Por exemplo, extraia uma imagem de um registro privado do Docker:

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

Resolução de problemas com importações de imagens de contentores

Se detetar um erro ao importar uma imagem, consulte a tabela seguinte para mais informações.

Mensagem de erro Explanation
The remote server may not be RFC 7233 compliant A especificação de distribuição permite a forma de cabeçalho de intervalo de Range: bytes=<start>-<end>. No entanto, o servidor remoto pode não estar em conformidade com a RFC 7233.
Unexpected response status code Foi obtido um código de estado de resposta inesperado do repositório de origem ao efetuar uma consulta por intervalo.
Unexpected length of body in response O comprimento do conteúdo recebido não corresponde ao tamanho esperado. O tamanho esperado é determinado pelo tamanho do blob e pelo cabeçalho de intervalo.

Próximos passos

Neste artigo, você aprendeu sobre como importar imagens de contêiner para um registro de contêiner do Azure de um registro público ou de outro registro privado.