Partilhar via


Guia de início rápido: criar um registro de contêiner privado usando a CLI do Azure

O Registro de Contêiner do Azure é um serviço de registro privado para criar, armazenar e gerenciar imagens de contêiner e artefatos relacionados. Neste início rápido, você cria uma instância de registro de contêiner do Azure com a CLI do Azure. Em seguida, use os comandos do Docker para enviar uma imagem de contêiner para o registro e, finalmente, puxe e execute a imagem do seu registro.

Este início rápido requer que você esteja executando a CLI do Azure (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).

Também tem de ter o Docker instalado localmente. O Docker disponibiliza pacotes que o configuram facilmente em qualquer sistema macOS, Windows ou Linux.

Uma vez que o Azure Cloud Shell não inclui todos os componentes do Docker necessários (o daemon dockerd), não é possível utilizar o Cloud Shell para este guia de início rápido.

Criar um grupo de recursos

Crie um grupo de recursos com o comando az group create. Um grupo de recursos do Azure é um contentor lógico no qual os recursos do Azure são implementados e geridos.

O exemplo seguinte cria um grupo de recursos com o nome myResourceGroup na localização eastus.

az group create --name myResourceGroup --location eastus

Configurar parâmetros para um registro de contêiner

Neste início rápido, você cria um Registro Padrão , que é suficiente para a maioria dos fluxos de trabalho do Registro de Contêiner do Azure. Para obter detalhes sobre as camadas de serviço disponíveis, consulte Camadas de serviço do Registro de contêiner.

Crie uma instância do ACR com o comando az acr create. O nome do Registro deve ser exclusivo no Azure e conter de 5 a 50 caracteres alfanuméricos minúsculos. No exemplo a seguir, mycontainerregistry é usado. Atualize para um valor exclusivo.

Configurar Opção de Rótulo de Nome de Domínio (DNL)

O recurso DNL (Domain Name Label) fortalece a segurança, impedindo ataques de invasão de subdomínio de nomes DNS do registro. Esses ataques ocorrem quando um registro é excluído e outra entidade reutiliza o mesmo nome de registro, potencialmente fazendo com que referências downstream sejam extraídas do registro recriado pela outra entidade.

DNL resolve isso anexando um hash exclusivo ao nome DNS do registro. Isso garante que, mesmo que o mesmo nome do Registro seja reutilizado por outra entidade, os nomes DNS serão diferentes devido ao hash exclusivo. Isso protege as suas referências a jusante de apontarem inadvertidamente para o registo recriado pela outra entidade.

Ao criar um registro a partir do comando az acr create , você pode especificar o sinalizador --dnl-scope opcional e escolher entre as opções disponíveis:

  • Unsecure: Cria o nome DNS as-is, com base no nome do Registro (por exemplo, contosoacrregistry.azurecr.io). Esta opção não inclui proteção DNL.
  • TenantReuse: Acrescenta um hash exclusivo com base no locatário e no nome do Registro, garantindo que o nome DNS seja exclusivo dentro do locatário.
  • SubscriptionReuse: Acrescenta um hash exclusivo com base na assinatura, locatário e nome do Registro, garantindo que o nome DNS seja exclusivo dentro da assinatura.
  • ResourceGroupReuse: Acrescenta um hash exclusivo com base no grupo de recursos, assinatura, locatário e nome do Registro, garantindo que o nome DNS seja exclusivo dentro do grupo de recursos.
  • NoReuse: Gera um nome DNS exclusivo com um hash exclusivo sempre que o registro é criado, independentemente de outros fatores, garantindo que o nome DNS seja sempre exclusivo.

Observação

Configuração imutável: O escopo DNL selecionado durante a criação do registro é permanente e não pode ser modificado posteriormente. Isso garante um comportamento consistente do DNS e evita interrupções nas referências downstream.

Implicações do nome DNS das opções de DNL

Formato de nome DNS: Para todas as opções habilitadas para DNL, exceto Unsecure, o nome DNS segue o formato registryname-hash.azurecr.io, onde o traço (-) serve como delineador de hash. Para evitar conflitos, o traço (-) não é permitido no nome do registo. Por exemplo, um registro nomeado contosoacrregistry com o TenantReuse escopo DNL terá um nome DNS como contosoacrregistry-e7ggejfuhzhgedc8.azurecr.io.

Referências downstream: O nome DNS pode diferir do nome do registo, necessitando de atualizações em arquivos downstream, como Dockerfiles, Kubernetes YAML e Helm charts, para refletir o nome DNS completo com o hash DNL. Por exemplo, se pretender que o seu Dockerfile downstream faça referência a um registo chamado contosoacrregistry com o escopo DNL TenantReuse , será necessário atualizar a referência para contosoacrregistry-e7ggejfuhzhgedc8.azurecr.io no seu Dockerfile downstream.

Configurar o modo de permissões de atribuição de função

Opcionalmente, você pode usar o --role-assignment-mode parâmetro para especificar o modo de atribuição de função do Registro. Esta opção determina como o controlo de acesso baseado em funções (RBAC) e as atribuições de funções do Microsoft Entra são geridas para o registo, incluindo o uso do controlo de acesso baseado em atributos (ABAC) do Microsoft Entra para permissões de repositório do Microsoft Entra.

Especifique rbac-abac para este parâmetro manter as atribuições de função padrão do Microsoft Entra RBAC e, opcionalmente, aplique as condições do Microsoft Entra ABAC para controle de acesso refinado no nível do repositório.

Para obter mais informações sobre essa opção, consulte Microsoft Entra attribute-based access control (ABAC) para permissões de repositório.

Criar um registo de contentores

az acr create --resource-group myResourceGroup \
  --name mycontainerregistry --sku Standard \
  --role-assignment-mode 'rbac-abac' \
  --dnl-scope TenantReuse

Quando o registo é criado, o resultado é semelhante ao seguinte:

{
  "adminUserEnabled": false,
  "creationDate": "2019-01-08T22:32:13.175925+00:00",
  "id": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/myResourceGroup/providers/Microsoft.ContainerRegistry/registries/mycontainerregistry",
  "location": "eastus",
  "loginServer": "mycontainerregistry-e7ggejfuhzhgedc8.azurecr.io",
  "name": "mycontainerregistry",
  "provisioningState": "Succeeded",
  "resourceGroup": "myResourceGroup",
  "sku": {
    "name": "Standard",
    "tier": "Standard"
  },
  "status": null,
  "storageAccount": null,
  "tags": {},
  "type": "Microsoft.ContainerRegistry/registries",
  "roleAssignmentMode": "AbacRepositoryPermissions",
  "autoGeneratedDomainNameLabelScope": "TenantReuse"
}

Repare no loginServer na saída, que corresponde ao nome totalmente qualificado do registro (em minúsculas). Ao longo do restante deste guia de início rápido, <registry-name> é um espaço reservado para o nome do registo de contêineres, e <login-server> é um espaço reservado para o nome do servidor de logon do registo.

Gorjeta

Neste início rápido, você cria um Registro Padrão , que é suficiente para a maioria dos fluxos de trabalho do Registro de Contêiner do Azure. Escolha outros níveis para aumentar o armazenamento e a largura de banda para imagens, além de capacidades como conexão usando um ponto final privado. Para obter detalhes sobre as camadas de serviço disponíveis (SKUs), consulte Camadas de serviço do registo de contentores.

Iniciar sessão no sistema de registo

Antes de enviar e extrair imagens de contêiner, você deve fazer login no registro. Para tal, utilize o comando az acr login. Especifique apenas o nome do recurso do Registro ao fazer logon com a CLI do Azure. Não use o nome do servidor de login completamente qualificado.

az acr login --name <registry-name>

Exemplo:

az acr login --name mycontainerregistry

O comando devolve uma mensagem de Login Succeeded depois de estar concluído.

Enviar imagem para o repositório

Para enviar uma imagem para um registo do Azure Container, primeiro tem de ter uma imagem. Se você ainda não tiver nenhuma imagem de contêiner local, execute o seguinte comando docker pull para extrair uma imagem pública existente. Para este exemplo, extraia a hello-world imagem do Microsoft Container Registry.

docker pull mcr.microsoft.com/hello-world

Antes de enviar uma imagem para o seu registro, você deve marcá-la usando a tag docker com o nome totalmente qualificado do seu servidor de login do registro.

  • O formato de nome do servidor de login para registros protegidos por DNL (Domain Name Label) com um hash de nome DNS exclusivo incluído é mycontainerregistry-abc123.azurecr.io.
  • O formato de nome do servidor de login para registros criados com a Unsecure opção DNL é mycontainerregistry.azurecr.io.

Por exemplo, se o seu registo foi criado com o Tenant Reuse âmbito DNL, o servidor de início de sessão poderá parecer mycontainerregistry-abc123.azurecr.io com um hash no nome DNS. Se o seu registro foi criado com a Unsecure opção DNL, o servidor de login ficaria como mycontainerregistry.azurecr.io sem o hash.

Para obter mais detalhes sobre as opções de DNL durante a criação do Registro e as implicações do nome DNS, consulte Guia de início rápido - Criar registro no portal.

Exemplo: Marcar uma imagem antes de usar o comando push

Marque a imagem usando o comando docker tag usando o servidor de login do seu registro.

Etiquetagem de imagem para um registo não-DNL:

docker tag mcr.microsoft.com/hello-world mycontainerregistry.azurecr.io/hello-world:v1

Etiquetagem de imagem para um registo habilitado para DNL.

docker tag mcr.microsoft.com/hello-world mycontainerregistry-abc123.azurecr.io/hello-world:v1

Por fim, use docker push para enviar a imagem para a instância do registo. Substitua <login-server> pelo nome do servidor de login da sua instância do Registro. Este exemplo cria o repositório hello-world , contendo a hello-world:v1 imagem.

docker push <login-server>/hello-world:v1

Depois de enviar a imagem para o registo do contentor, remova a imagem hello-world:v1 do ambiente Docker local. (Observe que esse comando docker rmi não remove a imagem do repositório hello-world em seu registro de contêiner do Azure.)

docker rmi <login-server>/hello-world:v1

Listar imagens de contêiner

O exemplo a seguir lista os repositórios em seu registro:

az acr repository list --name <registry-name> --output table

Saída:

Result
----------------
hello-world

O exemplo seguinte lista as tags no repositório hello-world.

az acr repository show-tags --name <registry-name> --repository hello-world --output table

Saída:

Result
--------
v1

Executar imagem do repositório

Agora, pode obter e executar a imagem do contentor a partir do registo de contentores utilizando hello-world:v1:

docker run <login-server>/hello-world:v1  

Saída de exemplo:

Unable to find image 'mycontainerregistry.azurecr.io/hello-world:v1' locally
v1: Pulling from hello-world
Digest: sha256:662dd8e65ef7ccf13f417962c2f77567d3b132f12c95909de6c85ac3c326a345
Status: Downloaded newer image for mycontainerregistry.azurecr.io/hello-world:v1

Hello from Docker!
This message shows that your installation appears to be working correctly.

[...]

Limpar recursos

Quando não for mais necessário, você poderá usar o comando az group delete para remover o grupo de recursos, o registro de contêiner e as imagens de contêiner armazenadas lá.

az group delete --name myResourceGroup

Próximos passos

Neste início rápido, você criou um Registro de Contêiner do Azure com a CLI do Azure, enviou uma imagem de contêiner para o Registro e extraiu e executou a imagem do Registro. Continue para os tutoriais do Registro de Contêiner do Azure para obter uma visão mais profunda do ACR.