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

Você pode facilmente importar (copiar) imagens de contêiner para um registro de contêiner do Azure, sem usar comandos do Docker. Por exemplo, importe imagens de um registro de desenvolvimento para um registro de produção ou copie imagens de base de um registro público.

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

  • Importar imagens de um registo público

  • Importar imagens ou artefatos OCI, incluindo gráficos Helm 3 de outro registro de contêiner do Azure, na mesma assinatura ou em um locatário diferente do Azure

  • Importar de um registro de contêiner privado que não seja do Azure

A importação de imagem para um registro de contêiner do Azure tem os seguintes benefícios em relação ao uso de comandos da CLI do Docker:

  • Como seu ambiente cliente não precisa de uma instalação local do Docker, importe qualquer imagem de contêiner, independentemente do tipo de sistema operacional suportado.

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

  • O acesso ao registro de destino não precisa usar o ponto de extremidade público do registro.

Importante

  • A importação de imagens requer o suporte de registro externo RFC 7233. Recomendamos usar um registro que suporte intervalos RFC 7233 ao usar o comando az acr import com o URI do registro para evitar falhas.

Limitações

  • O número máximo de manifestos para uma imagem importada é 50.
  • O tamanho máximo da camada para uma imagem importada de um registro público é de 2 GiB.

Para importar imagens de contêiner, este artigo requer que você execute a CLI do Azure no Azure Cloud Shell ou localmente (versão 2.0.55 ou posterior recomendada). Executar az --version para localizar a versão. Se precisar de instalar ou atualizar, veja Install Azure CLI (Instalar o Azure CLI).

Nota

Se você precisar distribuir imagens de contêiner idênticas em várias regiões do Azure, o Registro de Contêiner do Azure também dá suporte à replicação geográfica. Ao replicar geograficamente um registro (camada de serviço Premium necessária), você pode atender várias regiões com nomes idênticos de imagens e tags a partir de um único registro.

Importante

As alterações na importação de imagens entre dois registros de contêiner do Azure foram introduzidas a partir de janeiro de 2021:

  • A importação de ou para um registro de contêiner do Azure restrito à rede requer que o registro restrito permita o acesso por serviços confiáveis para ignorar a rede. Por padrão, a configuração está habilitada, permitindo a importação. Se a configuração não estiver habilitada em um registro recém-criado com um ponto de extremidade privado ou com regras de firewall do Registro, a importação falhará.
  • Em um registro de contêiner do Azure restrito à rede existente que é usado como uma fonte ou destino de importação, habilitar esse recurso de segurança de rede é opcional, mas recomendado.

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 de gravação no registro de destino (pelo menos a função de Colaborador ou uma função personalizada que permita a ação importImage). Consulte Funções e permissões do Registro de Contêiner do Azure.

Importar de um registo público

Importante

Para importar de um registro público para um registro de contêiner do Azure restrito à rede, é necessário que o registro restrito permita o acesso por serviços confiáveis para ignorar a rede. Por padrão, a configuração está habilitada, permitindo a importação. Se a configuração não estiver habilitada em um registro recém-criado com um ponto de extremidade privado ou com regras de firewall do Registro, a importação falhará.

Importar 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 --source parâmetro image. (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 você tiver uma conta do Docker Hub, recomendamos usar 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 do Microsoft Container Registry

Por exemplo, importe a ltsc2019 imagem do Windows Server Core do windows repositório no Microsoft Container Registry.

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

Importar de um registro de contêiner do Azure no mesmo locatário do AD

Você pode importar uma imagem de um registro de contêiner do Azure no mesmo locatário do AD usando permissões integradas do Microsoft Entra.

  • Sua identidade deve ter permissões do Microsoft Entra para ler do registro de origem (função Leitor) e importar para o registro de destino (função de Colaborador ou uma função personalizada que permita a ação importImage).

  • O registro pode estar na mesma assinatura do Azure ou em uma assinatura diferente no mesmo locatário do Ative Directory.

  • O acesso público ao registo de origem pode estar 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.

  • Se o registro de origem e/ou o registro de destino tiver um ponto de extremidade privado ou regras de firewall de registro forem aplicadas, certifique-se de que o registro restrito permita que serviços confiáveis acessem a rede.

Importar de um registo na mesma subscrição

Por exemplo, importe a aci-helloworld:latest imagem de um registro de origem mysourceregistry para myregistry na mesma assinatura do Azure.

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

O exemplo a seguir importa a aci-helloworld:latest imagem para myregistry de um registro de origem mysourceregistry no qual o acesso ao ponto de extremidade público do registro está desabilitado. 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.

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

O exemplo a seguir importa uma imagem através do resumo do manifesto (hash SHA-256, representado como sha256:...) em vez da etiqueta:

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

Importar de um registo numa subscrição diferente

Nota

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 a seguir, mysourceregistry está em uma assinatura diferente de myregistry no mesmo locatário do Ative Directory. 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.

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

Importar de um registro usando credenciais da entidade de serviço

Para importar de um registro que você não pode acessar usando permissões integradas do Ative Directory, você pode usar credenciais de entidade de serviço (se disponíveis) para o registro de origem. Forneça o appID e a senha de uma entidade de serviço do Ative Directory que tenha acesso ACRPull ao registro de origem. O uso de uma entidade de serviço é útil para sistemas de compilação e outros sistemas autônomos que precisam importar imagens para o registro.

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

Importar de um registro de contêiner do Azure em um locatário do AD diferente

Para importar de um registro de contêiner do Azure em um locatário diferente do Microsoft Entra, especifique o registro de origem pelo nome do servidor de logon e forneça credenciais que habilitem o acesso pull ao registro.

Importação entre locatários com nome de usuário e senha

Por exemplo, use um token e senha com escopo de repositório ou o appID e a senha de uma entidade de serviço do Ative Directory que tenha acesso ACRPull ao registro de origem.

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

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

Para acessar o registro de origem usando uma identidade no locatário de origem que tenha permissões de registro, você pode obter 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 uma senha para o az acr import comando. O registro de origem é especificado pelo nome do servidor de login. Observe que nenhum nome de usuário é necessário neste comando:

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

Nota

O locatário cruzado não funciona nas nuvens. A importação entre locatários em pontos de extremidade privados também não é suportada.

Importar de um registro de contêiner privado 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>

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.