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.
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.
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:
É mostrado um mapa que mostra hexágonos verdes que representam as regiões do Azure disponíveis para georreplicação:
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:
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.
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.
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.
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.