Azure Container Registry — Armazenando imagens e artefatos
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