Azure Container Registry — Armazenando imagens e artefatos

Renicius Pagotto Fostaini
9 min readOct 6, 2022

--

E ai pessoal, no post de hoje vamos falar sobre Azure Container Registry, uma excelente alternativa ao Docker Hub para armazenamento de imagens e artefatos públicos e privados.

Aprenderemos também como utilizar o Azure CLI e o Docker CLI para criação e upload de imagens docker.

Quer aprender mais sobre Docker? Acesse aqui o post onde explico conceitos e comandos básicos e o passo a passo da criação de um dockerfile.

O que Azure Container Registry?

É um serviço de armazenamento e gerenciamento de imagens e artefatos onde seu funcionamento é baseado no Docker Registry.

O Azure Container Registry possui suporte a distribuição OCI, que é uma especificação agnóstica de fornecedor/provedor responsável por habilitar o armazenamento, compartilhamento e proteção de artefatos e imagens.

O que são Artefatos?

Artefatos são objetos utilizados por algum processo, por exemplo, dockerfile, appconfig, appsettings, helm chart, entre outros.

Conceitos Básicos do Azure Container Registry

O Azure Container Registry possui alguns conceito básicos como namespace, repositórios e tags que são essenciais para uma correta utilização do recurso.

Repositório

É uma coleção de imagens ou artefatos com o mesmo nome, porém com tags diferentes. O repositório pode conter um namespace que permitem identificar repositórios relacionados. Para utilizar um namespace, utilizamos uma delimitação do nome feita com uma barra.

Exemplo de repositório:

  • productapi:v1
  • productapi:v2
  • productapi:latest

Exemplos de respositórios com namespaces:

  • product/productapi:v1
  • product/catalogapi:v1
  • notification/emailapi:v1
  • notification/pushapi:v1

Tag

A tag é basicamente um meio de versionamento de uma imagem ou artefato. Podemos ter diferentes versões de uma mesma imagem/artefato, porém com tags diferentes.

Exemplo de tags:

  • customerapi:latest
  • customerapi:v1
  • customerapi:v2

Demonstração

Na demonstração de hoje, vamos explicar o passo a passo do provisionamento de uma conta do Azure Container Registry através do Portal do Azure e também via Azure CLI e também demonstraremos a criação e o upload de uma imagem para o mesmo.

Pré-requisitos

Provisionando o Azure Container Registry via Portal do Azure

Abra o Portal do Azure e na barra de pesquisa digite o nome do recurso, no caso Azure Container Registry e em seguida selecione o mesmo.

Na próxima tela de listagem do recurso, clique em + Create.

Nessa tela precisamos fornecer algumas informações que serão utilizadas para a criação do recurso.

Para melhor entendimento, abaixo temos uma explicação detalhada de cada informação:

  • Subscription: Nome da Subscription que será utilizada no provisionamento de um novo serviço.
  • Resource Group: Nome do Resource Group a ser utilizado e que está associado com a Subscription. Caso não possua nenhum, selecione a opção Create new logo abaixo do drop down para criar um novo.
  • Registry name: Nome a ser dado para o serviço.
  • Location: Localização onde o serviço será provisionado.
  • Availabity Zones: Quando selecionado, oferece alta disponibilidade e resiliência para todos os registros.
  • SKU: É o tipo da camada de serviço desejada. Estão disponíveis as camadas Basic, Standard e Premium e cada uma delas tem sua particularidade.

Em seguida clique em Review + Create e após a validação das informações pelo gerenciador de recurso, clique em Create.

Finalizado o provisionamento de uma nova conta do Azure Container Registry, vamos acessá-la e no menu lateral selecione a opção Repositories.

Dentro da opção Repositories é onde os artefatos/imagens ficam armazenados, porém em nosso caso, como acabamos de criar o recurso, o repositório está vazio.

Provisionando o Azure Container Registry via Azure CLI

Outra alternativa de provisionamento do Azure Container Registry é via Azure CLI, a famosa linha de comando. Para isso precisaremos utilizar um sequência de comandos que serão detalhados abaixo.

Com o Azure CLI instalado em nossa máquina, o primeiro passo é realizar a autenticação na conta do Azure utilizando o seguinte comando.

az login

Com a autenticação feita, precisamos definir a Subscription que vamos utilizar para o provisionamento dos recursos, para isso utilize o seguinte comando.

az account set -s nome-da-subscription

No comando az account definimos qual recurso queremos acessar no Azure, nesse caso queremos utilizar a nossa Subscription. O comando set é responsável por informar que queremos definir uma Subscription específica e o argumento -s é onde passamos o nome da Subscription desejada.

Uma vez autenticado e com a Subscription definida, vamos provisionar um novo recurso do Azure Container Registry utilizando o seguinte comando abaixo.

az acr create -g "nome-resource-group" -n "nome-recurso" --sku nome-sku

O comando az acr create é onde informamos o recurso desejado e a ação sobre esse recurso, no caso o acrônimo acr significa Azure Container Registry e a ação desejada é o create que é o comando de criação. Temos também o comando delete, update, list, entre outros.

O argumento -g ou --resource-group é onde definimos o Resource Group a ser utilizado, lembrando que este deve estar vinculado a uma Subscription. O argumento -n ou --name é utilizado para nomear o recurso e por fim, o argumento --sku é o tipo de camada de serviço desejado, caso nenhuma informação seja especificada, o recurso será criado com o tipo Standard por padrão.

Após a execução desse comando um novo recurso do Azure Container Registry será provisionado e você poderá visualiza-lo através do portal do Azure.

Um ponto importante a ser mencionado é que todo recurso do Azure Container Registry possui uma URL de acesso para o gerenciamento dos artefatos/imagens. Essa informação pode ser encontrada na página do recurso e possui o nome de Login server.

Criação do projeto e dockerfile

Para as demonstrações de hoje, precisaremos de um projeto simples do tipo API e que possua um dockerfile para a criação de uma imagem docker.

Para isso, vamos criar um novo projeto no Visual Studio com a opção Docker habilitada.

Com a criação de um novo projeto concluído, note que na Solution possuímos um Dockerfile com todas as configurações necessárias e pronto para uso. Lembrando que esse Dockerfile é fornecido junto ao template do projeto.

Concluímos aqui a criação de um projeto bem simplista, no caso utilizamos o próprio template oferecido pelo .NET, porém o ponto mais importante é o Dockerfile que utilizaremos para a criação da nossa imagem.

Criação e upload da imagem com Docker CLI

Com o Docker CLI devidamento instalado em nossa máquina, o primeiro passo é realizar a criação de uma imagem da nossa aplicação utilizando o dockerfile.

Abra o terminal de linha de comando da sua máquina, acesse a pasta raiz da aplicação que acabamos de criar e execute o seguinte comando para a criação da imagem.

docker build -t nome-da-imagem -f AzureApiContainer/Dockerfile .

O comando docker build é responsável por definir a ação desejada, o argumento -t é onde passamos o nome desejado para a nossa imagem, o argumento -f é a localização do dockerfile da aplicação e por fim o ponto final após o dockerfile representa a intenção de executar o dockerfile daquele contexto.

Com a criação da imagem concluída, execute o comando docker images para verificação da imagem. No meu caso, defini o nome de azureapicontainer para a imagem.

Agora é o momento de definir um novo nome para a imagem que contenha a URL do nosso servidor de registro (Login server), ou seja, o Azure Container Registry.

docker tag azureapicontainer:latest pagottoacr.azurecr.io/azureapicontainer:v1

Uma nova imagem será criada utilizando o nome e a tag que acabamos de informar.

O funcionamento do comando de adicionar uma nova tag junto com a URL do serviço, funciona da seguinte maneira

docker tag nome-da-imagem:tag login-server/nome-imagem-destino:tag

O comando docker tag é onde definimos a ação de criar uma nova versão da mesma imagem com tag e nome diferente. Precisamos também informar a imagem de origem e a imagem de destino, porém no caso da imagem de destino, precisamos adicionar no ínicio e separado por barra, o nome do servidor de registro, ou seja, o Login server da página do Azure Container Registry do Azure no qual falamos acima.

Com a imagem finalizada e pronta para upload, primeiramente precisamos realizar uma autenticação no Azure Container Registry. Para essa autenticação, utilizamos o seguinte comando abaixo.

az acr login -n nome-azure-container-registry

O comando az acr login define a ação que desejamos executar, no caso uma autenticação (login) no Azure Container Registry (acr). No argumento -n devemos passar o nome da conta/serviço do Azure Container Registry que iremos utilizar para armazenar a imagem.

Após a autenticação, finalmente estamos prontos para realizar o upload da imagem utilizando o seguinte comando.

docker push nome-imagem-servidor-tag

O comando docker push define a ação de upload de imagem onde precisamos especificar a imagem a ser utilizada, nesse caso utilizaremos a imagem que possui o nome do servidor de registro. Com isso o docker irá utilizar o nome do servidor especificado para se conectar e realizar o upload.

Em meu caso, eu utilizei o comando abaixo para o upload da imagem.

docker push pagottoacr.azurecr.io/azureapicontainer:v1

Criação e upload da imagem com Azure CLI

Para o criação de uma imagem com o Azure CLI, utilizaremos o Azure Container Registry Tasks (ACR Tasks), que são comandos de criação, envio(upload) e execução de uma imagem de container nativamente no Azure, sem a necessidade de possuir o Docker instalado localmente.

Para a criação de uma imagem via Azure CLI, abra o terminal de linha de comando da sua máquina, acesse novamente a pasta raiz da aplicação e execute o seguinte comando.

az acr build -t "nome-imagem" -r nome-registry -f diretorio-dockerfile .

O comando az acr build define a ação desejada, no nosso caso a criação de uma nova imagem. O argumento -t é onde definimos o nome da nossa imagem. O argumento -r é o onde especificamos o nome do Azure Container Registry que vamos utilizar. O argumento -f é a localização do dockerfile da nossa aplicação e por fim o ponto final após o dockerfile representa a intenção de executar o dockerfile daquele contexto.

Ao executar o comando, a criação e o upload da imagem serão feitos automaicamente para o Azure Container Registry.

Visualização da imagem no Azure Container Registry

Realizado a criação e o upload de uma imagem via Docker CLI ou Azure CLI, abra o Portal do Azure novamente e selecione o recurso Azure Container Registry que provisionamos.

No menu lateral, selecione a opção Repositories

Com isso, finalmente conseguimos ver a nossa imagem armazenada no serviço.

Acessando a imagem/repositório, conseguimos visualizar as diferentes versões disponíveis.

Com isso temos a nossa imagem armazenada no Azure Container Registry e disponível para uso em qualquer processo.

E ai, gostou desse post? Quer conversar um pouco mais sobre Azure Container Registry? Deixe um comentário com suas dúvidas e idéias ou entre em contato através do LinkedIn.

Referências

Managed container registries — Azure Container Registry | Microsoft Learn

--

--