Tutoriel : Préparer un registre de conteneurs Azure géorépliqué
Un registre de conteneurs Azure est un registre Docker privé déployé dans Azure que vous pouvez conserver dans un réseau proche de vos déploiements. Dans le cadre de cet ensemble de trois articles de didacticiel, vous apprendrez à utiliser la géoréplication pour déployer une application web ASP.NET Core exécutée dans un conteneur Linux dans deux instances Web App pour conteneurs. Vous découvrirez comment Azure déploie automatiquement l’image dans chaque instance Web App à partir du référentiel géorépliqué le plus proche.
Ce didacticiel, première partie d’une série qui en compte trois, explique comment :
- Créer un registre de conteneurs Azure géorépliqué.
- Cloner le code source de l’application à partir de GitHub.
- Générer une image conteneur Docker à partir de la source de l’application.
- Envoyer l’image conteneur à votre registre.
Dans les didacticiels suivants, vous déploierez le conteneur de votre registre privé vers une application web exécutée dans deux régions Azure. Vous mettrez à jour le code dans l’application et mettrez à jour les deux instances Web App avec une seule commande docker push
de transmission au registre.
Avant de commencer
Ce didacticiel requiert une installation locale d’Azure CLI (version 2.0.31 ou ultérieure). Exécutez az --version
pour trouver la version. Si vous devez installer ou mettre à niveau, voir Installer Azure CLI.
Vous devez maîtriser les principaux concepts Docker tels que les conteneurs, les images de conteneur et les commandes Docker CLI de base. Pour apprendre les principes de base des conteneurs, consultez Bien démarrer avec Docker.
Pour suivre ce didacticiel, vous avez besoin d’une installation locale de Docker. Docker fournit des instructions d’installation pour les systèmes macOS, Windows et Linux.
Azure Cloud Shell n’inclut pas les composants Docker requis pour effectuer chaque étape de ce didacticiel. Par conséquent, nous recommandons une installation locale de l’interface Azure CLI et de l’environnement de développement Docker.
Créer un registre de conteneur
Pour ce tutoriel, vous avez besoin d’un registre de conteneurs Azure dans le niveau de service Premium. Pour créer un nouveau registre de conteneurs Azure, effectuez les étapes de cette section.
Conseil
Si vous avez précédemment créé un registre et que vous devez effectuer une mise à niveau, consultez Changement de niveau.
Connectez-vous au portail Azure.
Sélectionnez Créer une ressource>Conteneurs>Azure Container Registry.
Configurez votre nouveau registre avec les paramètres suivants. Sous l’onglet Informations de base :
- Nom du registre : créez un nom de registre qui est globalement unique dans Azure et contient entre 5 et 50 caractères alphanumériques
- Groupe de ressources : Créer un nouveau>
myResourceGroup
- Emplacement :
West US
- Référence :
Premium
(requise pour la géoréplication)
Sélectionnez Vérifier + créer, puis Créer pour créer l’instance du Registre.
Dans le reste de ce didacticiel, nous utilisons <acrName>
en lieu et place du nom du registre de conteneurs.
Conseil
Comme les registres de conteneurs Azure sont généralement des ressources durables qui sont utilisées dans plusieurs hôtes de conteneur, nous vous recommandons de créer votre registre dans son propre groupe de ressources. Quand vous configurez des registres et des Webhooks géorépliqués, ces ressources supplémentaires sont placées dans le même groupe de ressources.
Configuration de la géo-réplication
Maintenant que vous disposez d’un registre Premium, vous pouvez configurer la géoréplication. Votre application web, que vous configurerez dans le didacticiel suivant de manière qu’elle s’exécute dans deux régions, peut ensuite extraire ses images conteneur du registre le plus proche.
Accédez à votre nouveau registre de conteneurs dans le portail Azure, puis sélectionnez Réplications sous Services :
Une carte où les régions Azure disponibles pour la géoréplication sont représentées par des hexagones verts s’affiche :
Répliquez votre registre dans la région USA Est en sélectionnant l’hexagone vert correspondant, puis sélectionnez Créer sous Créer une réplication :
Une fois la réplication terminée, le portail indique l’état Prêt pour les deux régions. Utilisez le bouton Actualiser pour actualiser l’état de la réplication. La création et la synchronisation des réplicas peuvent prendre environ une minute.
Activer un compte administrateur
Dans les tutoriels suivants, vous allez déployer une image conteneur du registre directement sur Web App pour conteneurs. Pour activer cette fonctionnalité, vous devez également activer le compte administrateur du Registre.
Accédez à votre nouveau registre de conteneurs dans le portail Azure, puis sélectionnez Clés d’accès sous Paramètres. Sous Utilisateur administrateur, sélectionnez Activer.
Connexion au registre de conteneurs
Maintenant que vous avez configuré la géoréplication, vous allez générer une image conteneur et l’envoyer à votre registre. Vous devez vous connecter à votre registre avant de lui envoyer (par push) des images.
Utilisez la commande az acr login pour vous authentifier et mettre en cache les informations d’identification de votre registre. Remplacez <acrName>
par le nom du registre créé précédemment.
az acr login --name <acrName>
Une fois l’opération terminée, la commande renvoie Login Succeeded
.
Obtenir le code d’application
L’exemple de ce didacticiel inclut une petite application web générée avec ASP.NET Core. L’application fournit une page HTML qui affiche la région à partir de laquelle l’image a été déployée par Azure Container Registry.
Utilisez git pour télécharger l’exemple dans un répertoire local et utilisez la commande cd
pour accéder au répertoire :
git clone https://github.com/Azure-Samples/acr-helloworld.git
cd acr-helloworld
Si vous n’avez pas installé git
, vous pouvez télécharger l’archive ZIP directement à partir de GitHub.
Mettre à jour le fichier Dockerfile
Le fichier Dockerfile inclus dans l’exemple montre comment le conteneur est généré. La génération du conteneur démarre à partir d’une image de runtime ASP.NET Core officielle. Les fichiers d’application sont ensuite copiés dans le conteneur, les dépendances sont installées, la sortie est compilée à l’aide de l’image de kit SDK .NET Core officielle et, pour finir, une image aspnetcore optimisée est générée.
Le fichier Dockerfile se trouve à l’emplacement ./AcrHelloworld/Dockerfile
dans la source clonée.
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"]
L’application dans acr-helloworld tente de déterminer la région à partir de laquelle son conteneur a été déployé en demandant au service DNS des informations sur le serveur de connexion du registre. Vous devez spécifier le nom de domaine complet (FQDN) du serveur de connexion de votre registre dans la variable d’environnement DOCKER_REGISTRY
du fichier Dockerfile.
Tout d’abord, obtenez le nom de domaine complet du serveur de connexion du registre à l’aide de la commande az acr show
. Remplacez <acrName>
par le nom du registre créé lors des étapes précédentes.
az acr show --name <acrName> --query "{acrLoginServer:loginServer}" --output table
Sortie :
AcrLoginServer
-----------------------------
uniqueregistryname.azurecr.io
Ensuite, mettez à jour la ligne ENV DOCKER_REGISTRY
avec le nom de domaine complet du serveur de connexion de votre registre. Cet exemple reflète l’exemple de nom de registre, uniqueregistryname :
ENV DOCKER_REGISTRY uniqueregistryname.azurecr.io
Générer l’image conteneur
Maintenant que vous avez mis à jour le fichier Dockerfile avec le nom de domaine complet du serveur de connexion de votre registre, vous pouvez utiliser docker build
pour créer l’image conteneur. Exécutez la commande suivante pour générer l’image et l’identifier à l’aide de l’URL de votre registre privé, en remplaçant une fois encore <acrName>
par le nom de votre registre :
docker build . -f ./AcrHelloworld/Dockerfile -t <acrName>.azurecr.io/acr-helloworld:v1
Plusieurs lignes de sortie sont affichées pendant la génération de l’image Docker (seule une partie est montrée ici) :
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
Utilisez docker images
pour afficher l’image générée et référencée :
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
uniqueregistryname.azurecr.io/acr-helloworld v1 01ac48d5c8cf About a minute ago 284MB
[...]
Envoyer l’image à Azure Container Registry
Utilisez la commande docker push
pour envoyer l’image acr-helloworld à votre registre. Remplacez <acrName>
par le nom de votre registre.
docker push <acrName>.azurecr.io/acr-helloworld:v1
Comme vous avez configuré votre registre pour la géoréplication, votre image est automatiquement répliquée dans les deux régions USA Ouest et USA Est avec cette simple commande 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
Étapes suivantes
Dans ce didacticiel, vous avez créé un registre de conteneurs géorépliqué privé, généré une image conteneur, puis envoyé cette image à votre registre.
Passez au didacticiel suivant pour déployer votre conteneur dans plusieurs instances Web App pour conteneurs en utilisant la géoréplication pour fournir les images localement.