Självstudier: Förbereda ett geo-replikerat Azure Container Registry

Ett Azure-containerregister är ett privat Docker-register som distribueras i Azure så att du kan lagra containerregistren nära distributionerna i nätverket. I den här serien med tre självstudieartiklar får du lära dig att använda geo-replikering för att distribuera ett ASP.NET Core-webbprogram som körs i en Linux-behållare eller två Web Apps for Containers-instanser. Du ser hur Azure automatiskt distribuerar avbildningen till varje webbappinstans från den närmaste geo-replikerade lagringsplatsen.

I den här självstudien ingår i en serie med tre delar:

  • Skapa ett georeplikerat Azure-containerregister
  • Klona programmets källkod från GitHub
  • Skapa en Docker-containeravbildning från programkällkoden
  • Överföra containeravbildningen till registret

I efterföljande självstudier distribuerar du containern från ditt privata register till en webbapp som körs i två Azure-regioner. Du uppdaterar sedan koden i programmet, och uppdaterar båda Web App-instanserna med en enda docker push till registret.

Innan du börjar

För den här självstudien krävs en lokal installation av Azure CLI (version 2.0.31 eller senare). Kör az --version för att hitta versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI.

Du bör känna till viktiga Docker-begrepp som containrar, containeravbildningar och grundläggande Docker CLI-kommandon. Läs mer om grunderna för containrar i Kom igång med Docker.

I den här självstudien behöver du en lokal Docker-installation. I Docker finns installationsanvisningar för macOS, Windows och Linux.

Azure Cloud Shell inkluderar inte de Docker-komponenter som krävs för att slutföra stegen i den här självstudien. Vi rekommenderar därför en lokal installation av Azure CLI och Docker-utvecklingsmiljön.

Skapa ett containerregister

I den här självstudien behöver du ett Azure-containerregister på Premium-tjänstnivån. Följ stegen i det här avsnittet om du vill skapa ett nytt Azure-containerregister.

Tips

Om du tidigare har skapat ett register och behöver uppgradera kan du läsa Ändra nivåer.

Logga in på Azure-portalen.

Välj Skapa enresurscontainer>>Azure Container Registry.

Skapa ett containerregister i Azure-portalen

Konfigurera det nya registret med följande inställningar. På fliken Grundläggande :

  • Registernamn: Skapa ett registernamn som är globalt unikt i Azure och som innehåller 5–50 alfanumeriska tecken
  • Resursgrupp: Skapa ny>myResourceGroup
  • Plats: West US
  • SKU: Premium (krävs för geo-replikering)

Välj Granska + skapa och sedan Skapa för att skapa registerinstansen.

Konfigurera ett containerregister i Azure Portal

Under resten av den här självstudien använder <acrName> vi som platshållare för containerns registernamn som du har valt.

Tips

Eftersom Azure-containerregister vanligtvis är långlivade resurser som används av flera containervärdar rekommenderar vi att du skapar ditt register i en egen resursgrupp. När du konfigurerar georeplikerade register och webhooks placeras de här ytterligare resurserna i samma resursgrupp.

Konfigurera geo-replikering

Nu när du har ett Premium-register kan du konfigurera geo-replikering. Din webbapp, som du konfigurerar i nästa självstudie för att köras i två regioner, kan då hämta sina containeravbildningar från det närmaste registret.

Gå till det nya containerregistret i Azure Portal och välj Replikering underTjänster:

Replikeringar i användargränssnittet i containerregister i Azure-portalen

En karta visas som visar gröna sexhörningar som representerar Azure-regioner som är tillgängliga för geo-replikering:

Regionskarta i Azure Portal

Replikera ditt register till regionen USA, östra genom att välja dess gröna sexhörning. Välj sedan Skapa under Skapa replikering:

Skapa replikerings-UI i Azure-portalen

När replikeringen är slutförd visar portalen Klar för båda regionerna. Använd knappen Uppdatera för att uppdatera replikeringens status. Det kan ta en minut eller så innan replikerna har skapats och synkroniserats.

Status för replikerings-UI i Azure-portalen

Aktivera administratörskonto

I efterföljande självstudier distribuerar du en containeravbildning från registret direkt till Web App for Containers. Om du vill aktivera den här funktionen måste du även aktivera registrets administratörskonto.

Gå till det nya containerregistret i Azure Portal och välj Åtkomstnycklar under Inställningar. Under Administratörsanvändare väljer du Aktivera.

Aktivera administratörskonto i Azure Portal

Logga in på containerregistret

Nu när du har konfigurerat geo-replikering ska du skapa en containeravbildning och push-överföra den till registret. Du måste först logga in i registret innan du skickar avbildningar till det.

Använd kommandot az acr login för att autentisera och cachelagra autentiseringsuppgifterna för registret. Byt ut <acrName> mot namnet på registret som du skapade tidigare.

az acr login --name <acrName>

Kommandot returnerar Login Succeeded när det har slutförts.

Hämta programkod

Exemplet i den här självstudien innehåller en liten webbapp som är skapad med ASP.NET Core. Appen använder en HTML-sida som visar regionen som avbildningen distribuerades från av Azure Container Registry.

Självstudieappen visas i webbläsare

Använd git för att ladda ned exemplet till en lokal katalog, och cd till katalogen:

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

Om du inte har git installerat, kan du hämta ZIP-arkivet direkt från GitHub.

Uppdatera Dockerfile

Den Dockerfile som finns i exemplet visar hur containern är byggd. Den startar från en officiell ASP.NET Core körningsavbildning, kopierar programfilerna till containern, installerar beroenden, kompilerar utdata med den officiella .NET Core SDK-avbildningen och skapar slutligen en optimerad aspnetcore-avbildning.

Dockerfile finns på ./AcrHelloworld/Dockerfile i den klonade källan.

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

Programmet i avbildningen acr-helloworld försöker bestämma region som dess container distribuerades från genom att fråga DNS om information om registrets inloggningsserver. Du måste ange det fullständiga domännamnet (FQDN) för registrets inloggningsserver i miljövariabeln DOCKER_REGISTRY i Dockerfile.

Hämta först registrets inloggningsserver med kommandot az acr show. Ersätt <acrName> med namnet på registret som du skapade i föregående steg.

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

Utdata:

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

Därefter uppdaterar du raden ENV DOCKER_REGISTRY med FQDN för registrets inloggningsserver. Det här exemplet visar exempelregistrets namn uniqueregistryname:

ENV DOCKER_REGISTRY uniqueregistryname.azurecr.io

Skapa containeravbildning

Nu när du har uppdaterat Dockerfile med FQDN för registrets inloggningsserver, kan du använda docker build för att skapa containeravbildningen. Kör följande kommando för att skapa avbildningen och tagga den med URL-adressen till ditt privata register, där du återigen ersätter <acrName> med namnet på ditt register:

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

Flera rader med utdata visas när Docker-avbildningen har skapats (visas trunkerat här):

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

Använd docker images för att se den skapade och taggade avbildningen:

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

Push-överför avbildningen till Azure Container Registry

Använd därefter kommandot docker push för att skicka avbildningen acr-helloworld till ditt register. Byt ut <acrName> mot namnet på ditt register.

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

Eftersom du har konfigurerat registret för georeplikering replikeras avbildningen automatiskt till både regionerna USA, västra och USA, östra med kommandot 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

Nästa steg

I den här självstudien har du skapat ett privat, geo-replikerat containerregister, skapat en containeravbildning och sedan push-överfört avbildningen till ditt register.

Fortsätt till nästa självstudie för att distribuera behållaren till flera Web Apps for Containers-instanser, samt använd geo-replikering för att hantera avbildningarna lokalt.