Tutorial: Preparar um registo de contentor georreplicado do Azure

Um registo de contentor do Azure é um registo privado do Docker implementado no Azure que pode manter próximo em rede das suas implementações. Neste conjunto de três tutoriais, vai aprender a utilizar a georreplicação para implementar uma aplicação web em ASP.NET Core a executar num contentor do Linux para duas instâncias das Aplicações Web para Contentores. Vai ver como o Azure implementa automaticamente a imagem para cada instância de imagem Web a partir do repositório georreplicado mais próximo.

Neste tutorial, a primeira parte de uma série de três:

  • Criar um registo de contentor georreplicado do Azure
  • Clonar o código-fonte da aplicação do GitHub
  • Criar uma imagem de contentor do Docker a partir da origem da aplicação
  • Envie a imagem do contentor para o seu registo

Nos tutoriais seguintes, vai implementar o contentor do seu registo privado para uma aplicação web a executar em duas regiões do Azure. Em seguida, atualiza o código na aplicação e ambas as instâncias da Aplicação Web com um único docker push no seu registo.

Antes de começar

Este tutorial requer a instalação local da CLI do Azure (versão 2.0.31 ou posterior). Executar az --version para localizar a versão. Se precisar de instalar ou atualizar, veja Install Azure CLI (Instalar o Azure CLI).

Deve estar familiarizado com os principais conceitos do Docker, como contentores, imagens de contentores e comandos simples do Docker da CLI. Para obter noções básicas sobre os contentores, veja Introdução ao Docker.

Para concluir este tutorial, precisa de uma instalação local do Docker. O Docker fornece instruções de instalação para os sistemas macOS, Windows e Linux.

O Azure Cloud Shell não inclui os componentes do Docker necessários para concluir todos os passos deste tutorial. Portanto, recomendamos uma instalação local da CLI do Azure e do ambiente de desenvolvimento do Docker.

Criar um registo de contentores

Para este tutorial, você precisa de um registro de contêiner do Azure na camada de serviço Premium. Para criar um novo registro de contêiner do Azure, siga as etapas nesta seção.

Gorjeta

Se você criou um registro anteriormente e precisa atualizar, consulte Alterando camadas.

Inicie sessão no portal do Azure.

Selecione Criar um recurso>Contentores>Azure Container Registry.

Criar um registo de contentor no portal do Azure

Configure seu novo registro com as seguintes configurações. Na guia Noções básicas:

  • Nome do registo: crie um nome de registo que seja globalmente exclusivo no Azure e contenha apenas 5-50 carateres alfanuméricos
  • Grupo de Recursos: Criar novo>myResourceGroup
  • Localização: West US
  • SKU: Premium (necessário para a georreplicação)

Selecione Rever + criar e, em seguida, Criar para criar a instância de registo.

Configurando um registro de contêiner no portal do Azure

Em todo o resto deste tutorial, utilizamos <acrName> como um marcador de posição para o Nome do registo de contentor que escolheu.

Gorjeta

Por os registos de contentor do Azure serem normalmente recursos de longo prazo utilizados em vários anfitriões de contentores, recomendamos que crie o seu registo no seu próprio grupo de recursos. À medida que configura registos e webhooks georreplicados, esses recursos adicionais são colocados no mesmo grupo de recursos.

Configurar georreplicação

Agora que tem um registo Premium, pode configurar a georreplicação. A sua aplicação web, que vai configurar no próximo tutorial para que execute em duas regiões, pode então puxar as suas imagens de contentor a partir do registo mais próximo.

Navegue até o novo registro de contêiner no portal do Azure e selecione Replicações em Serviços:

Replicações na IU de registo de contentor do portal do Azure

É mostrado um mapa que mostra hexágonos verdes que representam as regiões do Azure disponíveis para georreplicação:

Mapa de região no portal do Azure

Replique o seu registo para a região E.U.A. Leste ao selecionar o respetivo hexágono verde, selecione Criar em Criar replicação:

Criar a IU de replicação no portal do Azure

Quando a replicação estiver completa, o portal reflete Pronto para ambas as regiões. Utilize o botão Atualizar para atualizar o estado da replicação; pode demorar cerca de um minuto para que as réplicas sejam criadas e sincronizadas.

IU de estado de replicação no portal do Azure

Ativar conta de administrador

Nos tutoriais subsequentes, você implanta uma imagem de contêiner do Registro diretamente no Web App for Containers. Para habilitar esse recurso, você também deve habilitar a conta de administrador do registro.

Navegue até o novo registro de contêiner no portal do Azure e selecione Chaves de acesso em Configurações. Em Utilizador administrador, selecione Ativar.

Habilitar conta de administrador no portal do Azure

Iniciar sessão no registo de contentor

Agora que configurou a georreplicação, crie uma imagem de contentor e envie-a para o seu registo. Você deve primeiro fazer login no seu registro antes de enviar imagens para ele.

Utilize o comando az acr login para autenticar e colocar as credenciais em cache para o seu registo. Substitua <acrName> pelo nome do registo que criou anteriormente.

az acr login --name <acrName>

O comando devolver Login Succeeded quando concluído.

Obter o código da aplicação

O exemplo neste tutorial inclui uma pequena aplicação Web criada com o ASP.NET Core. A aplicação serve uma página HTML que mostra a região da qual a imagem foi implementada pelo Azure Container Registry.

Tutorial de aplicação mostrada no browser

Utilize o git para transferir o exemplo para um diretório local e cd para o diretório:

git clone https://github.com/Azure-Samples/acr-helloworld.git
cd acr-helloworld

Se não tiver o git instalado, poderá transferir o arquivo ZIP diretamente do GitHub.

Atualizar o Dockerfile

O Dockerfile incluído nos exemplos mostra como é que o contentor é criado. Ele começa a partir de uma imagem oficial de tempo de execução do ASP.NET Core, copia os arquivos do aplicativo no contêiner, instala dependências, compila a saída usando a imagem oficial do SDK do .NET Core e, finalmente, cria uma imagem aspnetcore otimizada.

O Dockerfile está localizado em ./AcrHelloworld/Dockerfile na origem clonada.

FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 AS base
# Update <acrName> with the name of your registry
# Example: uniqueregistryname.azurecr.io
ENV DOCKER_REGISTRY <acrName>.azurecr.io
WORKDIR /app
EXPOSE 80

FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build
WORKDIR /src
COPY *.sln ./
COPY AcrHelloworld/AcrHelloworld.csproj AcrHelloworld/
RUN dotnet restore
COPY . .
WORKDIR /src/AcrHelloworld
RUN dotnet build -c Release -o /app

FROM build AS publish
RUN dotnet publish -c Release -o /app

FROM base AS production
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "AcrHelloworld.dll"]

A aplicação na imagem acr-helloworld tenta determinar a região da qual o seu contentor foi implementado ao fazer consultas DNS para obter informações sobre o servidor de início de sessão do registo. Tem de especificar o nome do domínio completamente qualificado (FQDN) do servidor de início de sessão do registo na variável de ambiente DOCKER_REGISTRY no Dockerfile.

Primeiro, obtenha o servidor de sessão do registo com o comando az acr show. Substitua <acrName> com o nome do registo que criou nos passos anteriores.

az acr show --name <acrName> --query "{acrLoginServer:loginServer}" --output table

Saída:

AcrLoginServer
-----------------------------
uniqueregistryname.azurecr.io

Em seguida, atualize a linha ENV DOCKER_REGISTRY com o FQDN do seu servidor de sessão do registo. Este exemplo reflete o nome do registo de exemplo, uniqueregistryname:

ENV DOCKER_REGISTRY uniqueregistryname.azurecr.io

Criar imagem de contentor

Agora que atualizou o Dockerfile com o FQDN do servidor de início de sessão do registo, pode utilizar docker build para criar a imagem do contentor. Execute o seguinte comando para criar a imagem e marcá-la com o URL do seu registo privado, substituindo novamente <acrName> com o nome do seu registo:

docker build . -f ./AcrHelloworld/Dockerfile -t <acrName>.azurecr.io/acr-helloworld:v1

Várias linhas de saída são apresentadas conforme a imagem do Docker é criada (mostrada aqui truncada):

Sending build context to Docker daemon  523.8kB
Step 1/18 : FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 AS base
2.2: Pulling from mcr.microsoft.com/dotnet/core/aspnet
3e17c6eae66c: Pulling fs layer

[...]

Step 18/18 : ENTRYPOINT dotnet AcrHelloworld.dll
 ---> Running in 6906d98c47a1
 ---> c9ca1763cfb1
Removing intermediate container 6906d98c47a1
Successfully built c9ca1763cfb1
Successfully tagged uniqueregistryname.azurecr.io/acr-helloworld:v1

Utilize docker images para ver a imagem compilada e etiquetada:

$ docker images
REPOSITORY                                      TAG    IMAGE ID        CREATED               SIZE
uniqueregistryname.azurecr.io/acr-helloworld    v1     01ac48d5c8cf    About a minute ago    284MB
[...]

Enviar imagens para o Azure Container Registry

Em seguida, utilize o comando docker push para enviar a imagem acr-helloworld para o registo. Substitua <acrName> pelo nome do seu registo.

docker push <acrName>.azurecr.io/acr-helloworld:v1

Por ter configurado o seu registo para georreplicação, a sua imagem é automaticamente replicada para ambas as regiões E.U.A. Oeste e E.U.A. Leste com apenas este comando docker push.

$ docker push uniqueregistryname.azurecr.io/acr-helloworld:v1
The push refers to a repository [uniqueregistryname.azurecr.io/acr-helloworld]
cd54739c444b: Pushed
d6803756744a: Pushed
b7b1f3a15779: Pushed
a89567dff12d: Pushed
59c7b561ff56: Pushed
9a2f9413d9e4: Pushed
a75caa09eb1f: Pushed
v1: digest: sha256:0799014f91384bda5b87591170b1242bcd719f07a03d1f9a1ddbae72b3543970 size: 1792

Próximos passos

Neste tutorial, criou um registo de contentor georreplicado privado, criou uma imagem de contentor e então enviou essa imagem para o seu registo.

Avance para o próximo tutorial para implementar o contentor em várias Aplicações Web para Contentores, ao utilizar a georreplicação para servir as imagens localmente.