Esercitazione: Preparare un registro contenitori di Azure con replica geograficaTutorial: Prepare a geo-replicated Azure container registry

Un registro contenitori di Azure è un registro Docker privato distribuito in Azure che è possibile mantenere in una posizione di rete vicina alle distribuzioni.An Azure container registry is a private Docker registry deployed in Azure that you can keep network-close to your deployments. In questa serie di tre esercitazioni vengono fornite istruzioni su come usare la replica geografica per distribuire un'applicazione Web ASP.NET Core in esecuzione in un contenitore Linux in due istanze di app Web per i contenitori.In this set of three tutorial articles, you learn how to use geo-replication to deploy an ASP.NET Core web application running in a Linux container to two Web Apps for Containers instances. Verrà descritto come in Azure l'immagine viene distribuita automaticamente in ciascuna istanza dell'app Web dal repository con replica geografica più vicina.You'll see how Azure automatically deploys the image to each Web App instance from the closest geo-replicated repository.

In questa esercitazione, che è la prima di una serie in tre parti, viene descritto come eseguire le attività seguenti:In this tutorial, part one in a three-part series:

  • Creare un registro contenitori di Azure con replica geograficaCreate a geo-replicated Azure container registry
  • Clonare il codice sorgente dell'applicazione da GitHubClone application source code from GitHub
  • Compilare un'immagine del contenitore Docker dall'origine applicazioneBuild a Docker container image from application source
  • Eseguire il push dell'immagine del contenitore nel registroPush the container image to your registry

Nelle esercitazioni successive si distribuirà il contenitore dal registro privato a un'app Web in esecuzione in due aree di Azure.In subsequent tutorials, you deploy the container from your private registry to a web app running in two Azure regions. Si aggiornerà quindi il codice nell'applicazione e verranno infine aggiornate entrambe le istanze dell'app Web con un singolo docker push nel registro.You then update the code in the application, and update both Web App instances with a single docker push to your registry.

Prima di iniziareBefore you begin

Questa esercitazione richiede un'installazione locale dell'interfaccia della riga di comando di Azure (versione 2.0.31 o successiva).This tutorial requires a local installation of the Azure CLI (version 2.0.31 or later). Eseguire az --version per trovare la versione.Run az --version to find the version. Se è necessario eseguire l'installazione o l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure.If you need to install or upgrade, see Install Azure CLI.

È consigliabile conoscere i concetti principali di Docker, come i contenitori, le immagini dei contenitori e i comandi di base dell'interfaccia della riga di comando di Docker.You should be familiar with core Docker concepts such as containers, container images, and basic Docker CLI commands. Per una panoramica sulle nozioni di base dei contenitori, vedere l'introduzione a Docker.For a primer on container basics, see Get started with Docker.

Per completare questa esercitazione è necessaria un'installazione locale di Docker.To complete this tutorial, you need a local Docker installation. Docker offre istruzioni di installazione per sistemi macOS, Windows e Linux.Docker provides installation instructions for macOS, Windows, and Linux systems.

Azure Cloud Shell non include i componenti di Docker necessari per completare ogni passaggio di questa esercitazione.Azure Cloud Shell does not include the Docker components required to complete every step this tutorial. È quindi consigliabile un'installazione locale dell'ambiente di sviluppo dell'interfaccia della riga di comando di Azure e di Docker.Therefore, we recommend a local installation of the Azure CLI and Docker development environment.

Creare un registro contenitoriCreate a container registry

Accedere al portale di Azure.Sign in to the Azure portal.

Selezionare Crea una risorsa > Contenitori > Registro Azure Container.Select Create a resource > Containers > Azure Container Registry.

Creazione di un registro contenitori con il portale di Azure

Configurare il nuovo registro con le impostazioni seguenti:Configure your new registry with the following settings:

  • Nome registro: creare un nome di registro univoco a livello globale all'interno di Azure e contenente da 5 a 50 caratteri alfanumerici.Registry name: Create a registry name that's globally unique within Azure, and contains 5-50 alphanumeric characters
  • Gruppo di risorse: Crea nuovo > myResourceGroupResource Group: Create new > myResourceGroup
  • Percorso: West USLocation: West US
  • Utente amministratore: Enable (obbligatorio per app Web per contenitori per eseguire il pull delle immagini)Admin user: Enable (required for Web App for Containers to pull images)
  • SKU: Premium (obbligatorio per la replica geografica)SKU: Premium (required for geo-replication)

Selezionare Crea per distribuire l'istanza del record di controllo di accesso.Select Create to deploy the ACR instance.

Creazione di un registro contenitori con il portale di Azure

Nella parte restante di questa esercitazione si usa <acrName> come segnaposto per il nome del registro contenitori scelto.Throughout the rest of this tutorial, we use <acrName> as a placeholder for the container Registry name that you chose.

Suggerimento

Poiché i Registri contenitori di Azure sono in genere risorse di lunga durata usate tra più host del contenitore, è consigliabile creare il registro in un gruppo di risorse specifico.Because Azure container registries are typically long-lived resources that are used across multiple container hosts, we recommend that you create your registry in its own resource group. Durante la configurazione di registri con replica geografica e webhook queste risorse aggiuntive vengono inserite nello stesso gruppo di risorse.As you configure geo-replicated registries and webhooks, these additional resources are placed in the same resource group.

Configurare la replica geograficaConfigure geo-replication

Dopo aver creato un registro Premium, è possibile configurare la replica geografica.Now that you have a Premium registry, you can configure geo-replication. L'app web, che nella prossima esercitazione viene configurata per l'esecuzione in due aree, possono quindi eseguire il pull delle relative immagini del contenitore dal registro più vicino.Your web app, which you configure in the next tutorial to run in two regions, can then pull its container images from the nearest registry.

Passare al nuovo registro contenitori nel portale di Azure e selezionare Repliche in Servizi:Navigate to your new container registry in the Azure portal and select Replications under SERVICES:

Repliche nell'interfaccia utente del registro contenitori del portale di Azure

Viene visualizzata una mappa che mostra esagoni verdi a indicare le aree di Azure disponibili per la replica geografica:A map is displayed showing green hexagons representing Azure regions available for geo-replication:

Mappa delle aree nel portale di Azure

Replicare il registro per l'area Stati Uniti orientali selezionando il relativo esagono verde e quindi selezionare Crea in Crea replica:Replicate your registry to the East US region by selecting its green hexagon, then select Create under Create replication:

Interfaccia utente Crea replica nel portale di Azure

Dopo aver completato la replica, nel portale viene visualizzato Pronta per entrambe le aree.When the replication is complete, the portal reflects Ready for both regions. Usare il pulsante Aggiorna per aggiornare lo stato della replica. La creazione o la sincronizzazione delle repliche può richiedere un minuto circa.Use the Refresh button to refresh the status of the replication; it can take a minute or so for the replicas to be created and synchronized.

Interfaccia utente Stato replica nel portale di Azure

Accesso al registro contenitoriContainer registry login

Dopo aver configurato la replica geografica, generare un'immagine del contenitore ed eseguirne il push nel registro.Now that you've configured geo-replication, build a container image and push it to your registry. È necessario accedere all'istanza di Registro Azure Container prima di eseguirvi il push delle immagini.You must first log in to your ACR instance before pushing images to it.

Usare il comando az acr login per autenticare e memorizzare nella cache le credenziali del registro.Use the az acr login command to authenticate and cache the credentials for your registry. Sostituire <acrName> con il nome del registro creato in precedenza.Replace <acrName> with the name of the registry you created earlier.

az acr login --name <acrName>

Il comando restituisce Login Succeeded al termine dell'esecuzione.The command returns Login Succeeded when complete.

Ottenere il codice dell'applicazioneGet application code

L'esempio in questa esercitazione include un'applicazione Web di piccole dimensioni creata con ASP.NET Core.The sample in this tutorial includes a small web application built with ASP.NET Core. L'app usa una pagina HTML che visualizza l'area da cui l'immagine viene distribuita da Registro Azure Container.The app serves an HTML page that displays the region from which the image was deployed by Azure Container Registry.

App dell'esercitazione visualizzata in un browser

Usare git per scaricare l'esempio in una directory locale ed eseguire il comando cd nella directory:Use git to download the sample into a local directory, and cd into the directory:

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

Se git non è installato, è possibile scaricare l'archivio ZIP direttamente da GitHub.If you don't have git installed, you can download the ZIP archive directly from GitHub.

Aggiornare il documento DockerfileUpdate Dockerfile

Il documento Dockerfile fornito nell'esempio illustra come viene compilato il contenitore.The Dockerfile included in the sample shows how the container is built. Questo documento usa un'immagine aspnetcore ufficiale come punto di partenza, copia i file dell'applicazione nel contenitore, installa le dipendenze, compila l'output usando l'immagine aspnetcore-build ufficiale e infine compila un'immagine aspnetcore ottimizzata.It starts from an official aspnetcore image, copies the application files into the container, installs dependencies, compiles the output using the official aspnetcore-build image, and finally, builds an optimized aspnetcore image.

Il documento Dockerfile si trova nella directory ./AcrHelloworld/Dockerfile nell'origine clonata.The Dockerfile is located at ./AcrHelloworld/Dockerfile in the cloned source.

FROM microsoft/aspnetcore:2.0 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 microsoft/aspnetcore-build:2.0 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"]

L'applicazione nell'immagine acr helloworld tenta di determinare l'area da cui il contenitore è stato distribuito eseguendo una query DNS sulle informazioni relative al server di accesso del registro.The application in the acr-helloworld image tries to determine the region from which its container was deployed by querying DNS for information about the registry's login server. È necessario specificare il nome di dominio completo (FQDN) del server di accesso del registro nella variabile di ambiente DOCKER_REGISTRY nel documento Dockerfile.You must specify your registry login server's fully qualified domain name (FQDN) in the DOCKER_REGISTRY environment variable in the Dockerfile.

Per prima cosa, recuperare il server di accesso del registro con il comando az acr show.First, get the registry's login server with the az acr show command. Sostituire <acrName> con il nome del registro creato nei passaggi precedenti.Replace <acrName> with the name of the registry you created in previous steps.

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

Output:Output:

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

Aggiornare quindi la riga ENV DOCKER_REGISTRY con il nome di dominio completo del server di accesso del registro.Next, update the ENV DOCKER_REGISTRY line with the FQDN of your registry's login server. Questo esempio riporta il nome del registro di esempio, uniqueregistryname:This example reflects the example registry name, uniqueregistryname:

ENV DOCKER_REGISTRY uniqueregistryname.azurecr.io

Compilare l'immagine del contenitoreBuild container image

Dopo aver aggiornato il documento Dockerfile con il nome di dominio completo del server di accesso del registro, è possibile usare docker build per creare l'immagine del contenitore.Now that you've updated the Dockerfile with the FQDN of your registry login server, you can use docker build to create the container image. Eseguire il comando seguente per compilare l'immagine e contrassegnarla con l'URL del registro privato, sostituendo nuovamente <acrName> con il nome del registro in uso:Run the following command to build the image and tag it with the URL of your private registry, again replacing <acrName> with the name of your registry:

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

Durante la compilazione dell'immagine Docker vengono visualizzate più righe di output (troncate in questo esempio):Several lines of output are displayed as the Docker image is built (shown here truncated):

Sending build context to Docker daemon  523.8kB
Step 1/18 : FROM microsoft/aspnetcore:2.0 AS base
2.0: Pulling from microsoft/aspnetcore
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

Usare docker images per visualizzare l'immagine compilata e contrassegnata:Use docker images to see the built and tagged image:

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

Eseguire il push dell'immagine in Registro Azure ContainerPush image to Azure Container Registry

Usare quindi il comando docker push per eseguire il push dell'immagine acr-helloworld nel registro.Next, use the docker push command to push the acr-helloworld image to your registry. Sostituire <acrName> con il nome del registro.Replace <acrName> with the name of your registry.

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

Poiché il registro è stato configurato per la replica geografica, l'immagine viene replicata automaticamente sia nell'area Stati Uniti occidentali che nell'area Stati Uniti orientali con questo singolo comando docker push.Because you've configured your registry for geo-replication, your image is automatically replicated to both the West US and East US regions with this single docker push command.

$ 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

Passaggi successiviNext steps

In questa esercitazione è stato creato un registro contenitori privato con replica geografica, è stata compilata un'immagine del contenitore e quindi è stato eseguito il push di tale immagine nel registro.In this tutorial, you created a private, geo-replicated container registry, built a container image, and then pushed that image to your registry.

Passare all'esercitazione successiva per distribuire il contenitore in più istanze di app Web per contenitori usando la replica geografica per gestire le immagini in locale.Advance to the next tutorial to deploy your container to multiple Web Apps for Containers instances, using geo-replication to serve the images locally.