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.
Dricks
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 en resurs>Behållare>Azure Container Registry.
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.
I resten av den här självstudien använder vi <acrName>
som platshållare för det containerregisternamn du väljer.
Dricks
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 under Tjänster:
En karta visas som visar gröna sexhörningar som representerar Azure-regioner som är tillgängliga för geo-replikering:
Replikera ditt register till regionen USA, östra genom att välja dess gröna sexhörning. Välj sedan Skapa under Skapa replikering:
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.
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.
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.
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 börjar 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.