Zelfstudie: Een Azure-containerregister met geo-replicatie voorbereiden

Een Azure-containerregister is een privé Docker-register dat is geïmplementeerd in Azure en uw netwerk dicht bij uw implementaties houdt. In deze set van drie zelfstudieartikelen leert u over het gebruik van geo-replicatie om een ASP.NET Core-webtoepassing die wordt uitgevoerd in een Linux-container te implementeren in twee Web App for Containers-instanties. U ziet hoe Azure de installatiekopie automatisch vanuit de dichtstbijzijnde opslagplaats met geo-replicatie op elke Web App-instantie implementeert.

In deze zelfstudie, die het eerste deel is van een serie van drie, leert u het volgende:

  • Een Azure-containerregister met geo-replicatie maken
  • Toepassingsbroncode klonen vanuit GitHub
  • Een Docker-containerinstallatiekopie maken uit de toepassingsbron
  • De containerinstallatiekopie naar het register pushen

In volgende zelfstudies implementeert u de container vanuit uw privéregister naar een web-app die wordt uitgevoerd in de twee Azure-regio's. Vervolgens werkt u de code in de toepassing bij en werkt u beide Web App-instanties met een één docker push in het register bij.

Voordat u begint

Voor deze zelfstudie is een lokale installatie van de Azure CLI (versie 2.0.31 of hoger) vereist. Voer az --version uit om de versie te bekijken. Zie Azure CLI installeren als u de CLI wilt installeren of een upgrade wilt uitvoeren.

U moet bekend zijn met Docker-kernconcepten zoals containers, containerinstallatiekopieën en Docker CLI-basisopdrachten. Zie Aan de slag met Docker voor een uitleg van de basisprincipes van containers.

Voor het voltooien van deze zelfstudie, hebt u een lokale Docker-installatie nodig. Docker biedt installatie-instructies voor de systemen macOS, Windows en Linux.

Azure Cloud Shell bevat niet de vereiste Docker-onderdelen die nodig zijn om elke stap in deze zelfstudie te voltooien. Daarom raden we een lokale installatie van de Azure CLI en Docker-ontwikkelomgeving aan.

Een containerregister maken

Voor deze zelfstudie hebt u een Azure-containerregister in de Premium-servicelaag nodig. Om een nieuw Azure-containerregister te maken, volgt u de stappen in deze sectie.

Tip

Zie Wijzigingslagen als u eerder een register hebt gemaakt en een upgrade wilt uitvoeren.

Meld u aan bij de Azure-portal.

Selecteer Een resource maken>Containers>Azure Container Registry.

Een containerregister maken met Azure Portal

Configureer uw nieuwe register met de volgende instellingen. Op het tabblad Basis:

  • Registernaam: Een registernaam maken die globaal uniek is binnen Azure en 5-50 alfanumerieke tekens bevat
  • Resourcegroep: Nieuwe maken>myResourceGroup
  • Locatie: West US
  • SKU: Premium (vereist voor de geo-replicatie)

Selecteer Beoordelen en maken en Maken om het exemplaar van het register te maken.

Een containerregister configureren in de Azure Portal

In de rest van deze zelfstudie gebruiken we <acrName> als tijdelijke aanduiding voor de gekozen containerregisternaam.

Tip

Omdat Azure-containerregisters doorgaans lang meegaande resources zijn die op meerdere hosts van de container worden gebruikt, wordt u aangeraden het register in een eigen resourcegroep te maken. Als u registers met geo-replicatie en webhooks configureert, worden deze extra resources in dezelfde resourcegroep geplaatst.

Geo-replicatie configureren

Nu u een Premium-register hebt, kunt u geo-replicatie configureren. Uw web-app, die u in de volgende zelfstudie configureert voor uitvoering in twee regio's, kan vervolgens containerinstallatiekopieën uit het dichtstbijzijnde register pullen.

Navigeer naar uw nieuwe containerregister in Azure Portal en selecteer Replicaties onder Services:

Replicaties in de containerregister-UI van Azure Portal

Er wordt een kaart weergegeven met groene zeshoeken die Azure-regio's vertegenwoordigen die beschikbaar zijn voor geo-replicatie:

Kaart met regio's in Azure Portal

Repliceer uw register naar de regio VS - oost door de groene zeshoek te selecteren. Selecteer vervolgens Maken onder Replicatie maken:

Gebruikersinterface voor het maken van een replicatie in Azure Portal

Wanneer de replicatie is voltooid, geeft de portal Gereed weer voor beide regio's. Gebruik de knop Vernieuwen om de status van de replicatie te vernieuwen. Het kan een paar minuten duren voordat de replica's zijn gemaakt en gesynchroniseerd.

Gebruikersinterface voor de replicatiestatus in Azure Portal

Beheerdersaccount schakelen

In volgende zelfstudies implementeert u een containerinstallatiekopie vanuit het register rechtstreeks naar Web App for Containers. Als u deze mogelijkheid wilt inschakelen, moet u ook het beheerdersaccount van het register inschakelen.

Navigeer naar uw nieuwe containerregister in Azure Portal en selecteer Toegangssleutels onder Instellingen: Selecteer onder Gebruiker met beheerdersrechten de optie Inschakelen.

Beheerdersaccount inschakelen in Azure Portal

Aanmelden bij het containerregister

Nu u geo-replicatie hebt geconfigureerd, maakt u een containerinstallatiekopie en pusht u deze naar het register. U moet u eerst aanmelden bij uw register voordat u er installatiekopieën naar pusht.

Gebruik de opdracht az acr login om de referenties voor het register te verifiëren en in de cache te plaatsen. Vervang <acrName> door de naam van het register dat u eerder hebt gemaakt.

az acr login --name <acrName>

De opdracht retourneert Login Succeeded nadat deze is voltooid.

Toepassingscode ophalen

Het voorbeeld in deze zelfstudie bevat een kleine webtoepassing die is gebouwd in ASP.NET Core. De app dient voor een HTML-pagina waarop de regio wordt weergegeven waaruit de installatiekopie is geïmplementeerd door Azure Container Registry.

Zelfstudie-app weergegeven in browser

Gebruik Git om het voorbeeld te downloaden naar een lokale map en cd naar de map:

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

Als u git niet hebt geïnstalleerd, kunt u rechtstreeks vanuit GitHub het ZIP-archief downloaden.

Dockerfile bijwerken

Het Dockerfile dat deel uitmaakt van de voorbeeldopslagplaats laat zien hoe de container wordt gebouwd. Het begint met een officiële ASP.NET Core-runtime-installatiekopie, kopieert de toepassingsbestanden naar de container, installeert afhankelijkheden, compileert de uitvoer met de officiële .NET Core SDK-installatiekopie, en maakt tot slot een geoptimaliseerde aspnetcore-installatiekopie.

De Dockerfile bevindt zich in ./AcrHelloworld/Dockerfile in de gekloonde bron.

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"]

De toepassing in de acr-helloworld-installatiekopie probeert de regio te bepalen waaruit de container is geïmplementeerd door in DNS een query uit te voeren naar informatie over de aanmeldingsserver van het register. U moet de Fully Qualified Domain Name (FQDN) van de aanmeldingsserver van het register opgeven in de omgevingsvariabele DOCKER_REGISTRY in de Dockerfile.

Haal eerst de aanmeldingsserver van het register op met de opdracht az acr show. Vervang <acrName> door de naam van het register dat u in de vorige stappen hebt gemaakt.

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

Uitvoer:

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

Werk vervolgens de regel ENV DOCKER_REGISTRY bij met de FQDN van de aanmeldingsserver van uw register. In dit voorbeeld wordt de naam van het voorbeeldregister gebruikt, uniqueregistryname:

ENV DOCKER_REGISTRY uniqueregistryname.azurecr.io

Containerinstallatiekopie maken

Nu u de Dockerfile hebt bijgewerkt met de FQDN van de aanmeldingsserver van uw register, kunt u docker build gebruiken om de containerinstallatiekopie te maken. Voer de volgende opdracht uit om de installatiekopie te maken en te taggen met de URL van uw privéregister, waarbij u <acrName> opnieuw vervangt door de naam van uw register:

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

Terwijl de Docker-installatiekopie wordt gemaakt (hier ingekort weergegeven) worden verschillende uitvoerregels weergegeven:

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

Gebruik docker images om de gebouwde en getagde installatiekopie te zien:

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

Installatiekopie pushen naar Azure Container Registry

Gebruik vervolgens de opdracht docker push om de acr-helloworld-installatiekopie naar het register te pushen. Vervang <acrName> door de naam van uw register.

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

Omdat u het register voor de geo-replicatie hebt geconfigureerd, wordt uw installatiekopie automatisch gerepliceerd naar zowel de regio VS - west als de regio VS - oost met deze enkele docker push-opdracht.

$ 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

Volgende stappen

In deze zelfstudie hebt u een privécontainerregister met geo-replicatie gemaakt, een containerinstallatiekopie gemaakt en die installatiekopie vervolgens naar het register gepusht.

Ga naar de volgende zelfstudie om uw container te implementeren op meerdere Web Apps for Containers-instanties, met behulp van geo-replicatie om de installatiekopieën lokaal te gebruiken.