Migrer des logiciels personnalisés vers Azure App Service à l’aide d’un conteneur personnalisé

Azure App Service fournit des piles d’applications prédéfinies sur Windows, par exemple ASP.NET ou Node.js, exécuté sur IIS. L’environnement de Windows préconfiguré verrouille le système d’exploitation à partir contre :

  • l'accès administratif ;
  • les installations de logiciels ;
  • les modifications apportées au Global Assembly Cache.

Pour plus d’informations, consultez Fonctionnalités de système d’exploitation sur Azure App Service.

vous pouvez déployer une image de Windows personnalisée à partir de Visual Studio afin de modifier le système d’exploitation dont votre application a besoin. Il est donc facile de migrer une application locale nécessitant une configuration de système d’exploitation et de logiciel personnalisée. Ce tutoriel montre comment migrer vers App Service une application ASP.NET qui utilise des polices personnalisées installées dans la bibliothèque de polices Windows. Vous déployez une image Windows configurée de façon personnalisée à partir de Visual Studio sur Azure Container Registry, puis vous l’exécutez dans App Service.

Affiche l’application web qui s’exécute dans un conteneur Windows.

Prérequis

Pour suivre ce tutoriel :

Configurer l’application localement

Télécharger l’exemple

Cette étape consiste à configurer le projet .NET local.

L’exemple de projet contient une application ASP.NET simple qui utilise une police personnalisée installée dans la bibliothèque de polices Windows. Il n’est pas nécessaire d’installer des polices. Toutefois, l’exemple illustre une application intégrée au système d’exploitation sous-jacent. Pour migrer ce type d’application vers App Service, vous restructurez votre code pour supprimer l’intégration ou vous la migrez telle quelle dans un conteneur Windows personnalisé.

Installer la police

Dans l’Explorateur Windows, accédez à custom-font-win-container-master/CustomFontSample, cliquez avec le bouton droit sur FrederickatheGreat-Regular.ttf, puis sélectionnez Installer.

Cette police est publiquement disponible à partir de Google Fonts.

Exécuter l’application

Ouvrez le fichier custom-font-win-container-master/CustomFontSample.sln dans Visual Studio.

Entrez Ctrl+F5 pour exécuter l’application sans débogage. L’application s’affiche dans votre navigateur par défaut.

Capture d’écran montrant l’application affichée dans le navigateur par défaut.

Parce que l’application utilise une police installée, elle ne peut pas s’exécuter dans le bac à sable App Service. Toutefois, vous pouvez la déployer à l’aide d’un conteneur Windows dans lequel il est possible d’installer la police.

Configurer un conteneur Windows

Dans l’Explorateur de solutions, cliquez avec le bouton droit sur le projet CustomFontSample et sélectionnez Ajouter>Prise en charge de l’orchestration de conteneurs.

Capture d’écran de la fenêtre de l’Explorateur de solutions montrant le projet CustomFontSample, avec les éléments de menu Ajouter et Prise en charge des orchestrateurs de conteneurs sélectionnés.

Sélectionnez Docker Compose>OK.

Votre projet est maintenant configuré pour s’exécuter dans un conteneur Windows. Un fichier Dockerfile est ajouté au projet CustomFontSample et un projet docker-compose est ajouté à la solution.

Dans l’Explorateur de solutions, ouvrez Dockerfile.

Vous devez utiliser une image parente prise en charge. Changez l’image parente en remplaçant la ligne FROM par le code suivant :

FROM mcr.microsoft.com/dotnet/framework/aspnet:4.7.2-windowsservercore-ltsc2019

Ajoutez la ligne suivante à la fin du fichier et enregistrez le fichier :

RUN ${source:-obj/Docker/publish/InstallFont.ps1}

InstallFont.ps1 se trouve dans le projet CustomFontSample. Il s’agit d’un script simple qui installe la police. Vous trouverez une version plus complexe du script dans PowerShell Gallery.

Remarque

Pour tester le conteneur Windows localement, assurez-vous que Docker est démarré sur votre ordinateur local.

Publier sur Azure Container Registry

Azure Container Registry peut stocker vos images pour les déploiements de conteneur. Vous pouvez configurer App Service pour utiliser des images hébergées dans Azure Container Registry.

Ouvrir l’Assistant Publication

Dans l’Explorateur de solutions, cliquez avec le bouton droit sur le projet CustomFontSample, puis sélectionnez Publier.

Capture d’écran de l’Explorateur de solutions montrant le projet CustomFontSample avec l’élément Publier sélectionné.

Créer un registre et publier

Dans l’Assistant Publication, sélectionnez Registre de conteneurs>Créer un registre de conteneurs Azure>Publier.

Capture d’écran de l’Assistant Publication montrant Registre de conteneurs, Créer un registre de conteneurs Azure et le bouton Publier sélectionnés.

Se connecter à votre compte Azure

Dans la boîte de dialogue Créer un registre de conteneurs Azure, sélectionnez Ajouter un compte, puis connectez-vous à votre abonnement Azure. Si vous êtes déjà connecté, sélectionnez le compte qui contient l’abonnement souhaité dans la liste déroulante.

Connectez-vous à Azure.

Configurer le registre

Configurez le nouveau registre de conteneurs en fonction des valeurs suggérées dans le tableau suivant. Lorsque vous avez terminé, sélectionnez Créer.

Paramètre Valeur suggérée Informations supplémentaires
Préfixe DNS Conservez le nom généré du registre ou remplacez-le par un autre nom unique.
Groupe de ressources Sélectionnez Nouveau, entrez myResourceGroup et sélectionnez OK.
Référence (SKU) De base Niveaux de tarification
Emplacement du registre Europe Ouest

Configurez un registre de conteneurs Azure.

Une fenêtre de terminal s’ouvre et affiche la progression du déploiement de l’image. Attendez la fin du déploiement.

Connexion à Azure

Connectez-vous au portail Azure.

Créer une application web

Dans le menu de gauche, sélectionnez Créer une ressource>Web>Web App pour conteneurs.

Configurer les informations de base des applications

Sous l’onglet Informations de base, configurez les paramètres selon le tableau suivant, puis sélectionnez Suivant : Docker.

Paramètre Valeur suggérée Informations supplémentaires
Abonnement Vérifiez que l’abonnement approprié est sélectionné.
Groupe de ressources Sélectionnez Créer, entrez myResourceGroup et sélectionnez OK.
Nom Tapez un nom unique. L’URL de l’application web est https://<app-name>.azurewebsites.net, où <app-name> est le nom de votre application.
Publier Conteneur Docker
Système d’exploitation Windows
Région Europe Ouest
Plan Windows Sélectionnez Créer, tapez myAppServicePlan et sélectionnez OK.

L’onglet Informations de base doit se présenter comme suit :

Affiche l’onglet Informations de base utilisé pour configurer l’application web.

Configurer un conteneur Windows

Dans l’onglet Docker, configurez votre conteneur Windows personnalisé comme indiqué dans le tableau suivant, puis sélectionnez Vérifier + créer.

Paramètre Valeur suggérée
Source d’image Azure Container Registry
Registre Sélectionnez le registre que vous avez créé précédemment.
Image customfontsample
Tag latest

Créer l’application

Cliquez sur Créer et attendez qu’Azure crée les ressources requises.

Accéder à l’application web

Lorsque l’opération Azure est terminée, une zone de notification s’affiche.

Indique que l’opération Azure est terminée.

  1. Sélectionnez Accéder à la ressource.

  2. Sur la page d’application, cliquez sur le lien situé sous URL.

Une nouvelle page de navigateur s’ouvre à la page suivante :

Affiche la nouvelle page de navigateur pour l’application web.

Attendez quelques minutes et réessayez, jusqu’à obtenir la page d’accueil avec la police attendue :

Affiche la page d’accueil avec la police que vous avez configurée.

Félicitations ! Vous avez migré une application ASP.NET vers Azure App Service dans un conteneur Windows.

Consulter les journaux d’activité de démarrage du conteneur

Le chargement du conteneur Windows peut prendre un certain temps. Pour afficher la progression, accédez à l’URL suivante en remplaçant <app-name> par le nom de votre application.

https://<app-name>.scm.azurewebsites.net/api/logstream

Les journaux d’activité en continu ressemblent à ceci :

14/09/2018 23:16:19.889 INFO - Site: fonts-win-container - Creating container for image: customfontsample20180914115836.azurecr.io/customfontsample:latest.
14/09/2018 23:16:19.928 INFO - Site: fonts-win-container - Create container for image: customfontsample20180914115836.azurecr.io/customfontsample:latest succeeded. Container Id 329ecfedbe370f1d99857da7352a7633366b878607994ff1334461e44e6f5418
14/09/2018 23:17:23.405 INFO - Site: fonts-win-container - Start container succeeded. Container: 329ecfedbe370f1d99857da7352a7633366b878607994ff1334461e44e6f5418
14/09/2018 23:17:28.637 INFO - Site: fonts-win-container - Container ready
14/09/2018 23:17:28.637 INFO - Site: fonts-win-container - Configuring container
14/09/2018 23:18:03.823 INFO - Site: fonts-win-container - Container ready
14/09/2018 23:18:03.823 INFO - Site: fonts-win-container - Container start-up and configuration completed successfully

App Services utilise la technologie de conteneur Docker pour héberger à la fois des images prédéfinies et des images personnalisées. Pour voir une liste d’images prédéfinies, exécutez la commande Azure CLI 'az webapp list-runtimes --os linux'. Si ces images ne répondent pas à vos besoins, vous pouvez générer et déployer une image personnalisée.

Remarque

Le conteneur doit cibler l’architecture x86-x64, ARM64 n’est pas pris en charge.

Dans ce tutoriel, vous allez apprendre à :

  • Envoyer une image Docker personnalisée vers Azure Container Registry
  • Déployer l’image personnalisée dans App Service
  • Configuration des variables d’environnement
  • Extraire l’image dans App Service à l’aide d’une identité gérée
  • Accéder aux journaux de diagnostic
  • Activer CI/CD depuis Azure Container Registry vers App Service
  • Se connecter au conteneur avec SSH

L’exécution de ce didacticiel entraîne des frais réduits dans votre compte Azure pour le registre de conteneurs et peut engendrer des coûts supplémentaires pour l’hébergement du conteneur pendant plus d’un mois.

Configurer votre environnement initial

Ce tutoriel nécessite Azure CLI version 2.0.80 ou ultérieure. Si vous utilisez Azure Cloud Shell, sachez que la version la plus récente est déjà installée.

  • Installez Docker, que vous utilisez pour générer des images Docker. L’installation de Docker peut nécessiter un redémarrage de l’ordinateur.

Après avoir installé Docker, ouvrez une fenêtre de terminal et vérifiez que Docker est installé :

docker --version

Cloner ou télécharger l’exemple d’application

Vous pouvez obtenir l’exemple de ce tutoriel par le biais d’un clone ou d’un téléchargement Git.

Cloner avec Git

Clonez l’exemple de dépôt :

git clone https://github.com/Azure-Samples/docker-django-webapp-linux.git --config core.autocrlf=input

Veillez à inclure l’argument --config core.autocrlf=input pour garantir des fins de ligne appropriées dans les fichiers qui sont utilisés dans le conteneur Linux :

Accédez ensuite au dossier :

cd docker-django-webapp-linux

Télécharger à partir de GitHub

Au lieu d’utiliser un clone Git, vous pouvez consulter https://github.com/Azure-Samples/docker-django-webapp-linux, sélectionner Cloner, puis Télécharger le Zip.

Décompressez le fichier Zip dans un dossier nommé docker-django-webapp-linux.

Ouvrez ensuite une fenêtre de terminal dans le dossier docker-django-webapp-linux.

(Facultatif) Examiner le fichier Docker

Dans l’exemple, le fichier nommé Dockerfile qui décrit l’image Docker et qui contient des instructions de configuration :

FROM tiangolo/uwsgi-nginx-flask:python3.6

RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt --no-cache-dir
ADD . /code/

# ssh
ENV SSH_PASSWD "root:Docker!"
RUN apt-get update \
        && apt-get install -y --no-install-recommends dialog \
        && apt-get update \
 && apt-get install -y --no-install-recommends openssh-server \
 && echo "$SSH_PASSWD" | chpasswd 

COPY sshd_config /etc/ssh/
COPY init.sh /usr/local/bin/

RUN chmod u+x /usr/local/bin/init.sh
EXPOSE 8000 2222

#CMD ["python", "/code/manage.py", "runserver", "0.0.0.0:8000"]
ENTRYPOINT ["init.sh"]
  • Le premier groupe de commandes installe la configuration requise de l’application dans l’environnement.
  • Le deuxième groupe de commande crée un serveur SSH pour sécuriser la communication entre le conteneur et l’hôte.
  • Dans ENTRYPOINT ["init.sh"], la dernière ligne appelle init.sh pour démarrer le service SSH et le serveur Python.

Générer et tester l’image localement

Notes

Docker Hub a des quotas concernant le nombre d’extractions anonymes par adresse IP et le nombre d’extractions authentifiées par utilisateur gratuit (voir Transfert de données). Si vous remarquez que vos extractions à partir de Docker Hub sont limitées, essayez docker login si vous n’êtes pas déjà connecté.

  1. Exécutez la commande suivante pour générer l’image :

    docker build --tag appsvc-tutorial-custom-image .
    
  2. Vérifiez que la build fonctionne en exécutant le conteneur Docker localement :

    docker run -it -p 8000:8000 appsvc-tutorial-custom-image
    

    Cette commande docker run spécifie le port avec l’argument -p suivi du nom de l’image. -it vous permet de l’arrêter avec Ctrl+C.

    Conseil

    Si votre système d’exploitation est Windows et que vous voyez l’erreur standard_init_linux.go:211: exec user process caused "no such file or directory" (l’exécution du processus utilisateur a provoqué l’erreur « Pas de fichier ou de répertoire correspondant »), le fichier init.sh contient des fins de ligne CR-LF à la place des terminaisons LF attendues. Cette erreur se produit si vous avez utilisé Git pour cloner l’exemple de dépôt, mais que vous avez omis le paramètre --config core.autocrlf=input. Dans ce cas, reclonez le dépôt avec l’argument « --config ». L’erreur peut également s’afficher si vous avez modifié init.sh et que vous l’avez enregistré avec des terminaisons CRLF. Dans ce cas, enregistrez de nouveau le fichier avec uniquement des terminaisons LF.

  3. Accédez à http://localhost:8000 pour vérifier que l’application web et le conteneur fonctionnent correctement.

    Testez l’application web localement.

I. Créer une identité managée attribuée par l’utilisateur

App Service peut utiliser une identité managée par défaut ou une identité managée affectée par l’utilisateur pour s’authentifier auprès d’un registre de conteneurs. Dans ce tutoriel, vous allez utiliser une identité managée affectée par l’utilisateur.

  1. Exécutez la commande az group create pour créer un groupe de ressources :

    az group create --name msdocs-custom-container-tutorial --location westeurope
    

    Vous pouvez changer la valeur --location pour spécifier une région proche de chez vous.

  2. Créez une identité managée dans le groupe de ressources.

    az identity create --name myID --resource-group msdocs-custom-container-tutorial
    

II. Créer un registre de conteneur

  1. Créez un registre de conteneurs avec la commande az acr createet remplacez <registry-name> par un nom unique pour votre registre. Le nom ne doit contenir que des lettres et des chiffres, et doit être unique dans tout Azure.

    az acr create --name <registry-name> --resource-group msdocs-custom-container-tutorial --sku Basic --admin-enabled true
    

    Le paramètre--admin-enabled vous permet d’envoyer (push) des images au Registre à l’aide d’un ensemble d’informations d’identification d’administration.

  2. Récupérez les informations d’identification administratives en exécutant la commande az acr show :

    az acr credential show --resource-group msdocs-custom-container-tutorial --name <registry-name>
    

    La sortie JSON de cette commande fournit deux mots de passe, ainsi que le nom d’utilisateur du registre.

III. Envoyer l’exemple d’image vers Azure Container Registry

Dans cette section, vous poussez l’image vers Azure Container Registry, qui sera utilisé par App Service plus tard.

  1. À partir du terminal local où vous avez généré l’exemple d’image, utilisez la commande docker loginpour vous connecter au registre de conteneurs :

    docker login <registry-name>.azurecr.io --username <registry-username>
    

    Remplacez <registry-name> et <registry-username> par les valeurs des étapes précédentes. Lorsque vous y êtes invité, tapez l’un des mots de passe de l’étape précédente.

    Vous utilisez le même nom de registre dans toutes les étapes restantes de cette section.

  2. Une fois la connexion établie, étiquetez votre image Docker locale dans le registre :

    docker tag appsvc-tutorial-custom-image <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest
    
  3. Utilisez la commande docker push pour envoyer (push) l’image vers le registre :

    docker push <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest
    

    Le premier chargement de l’image peut prendre quelques minutes car il inclut l’image de base. Les chargements suivants sont généralement plus rapides.

    Pendant que vous êtes en attente, vous pouvez effectuer les étapes de la section suivante pour configurer App Service afin d’effectuer un déploiement à partir du registre.

IV. Autoriser l’identité managée pour votre registre

L’identité managée que vous avez créée n’a pas encore l’autorisation d’extraire du registre de conteneurs. Dans cette étape, vous activez l’autorisation.

  1. Récupérez l’ID de principal pour l’identité managée :

    principalId=$(az identity show --resource-group msdocs-custom-container-tutorial --name myID --query principalId --output tsv)
    
  2. Récupérez l’ID de ressource pour le registre de conteneurs :

    registryId=$(az acr show --resource-group msdocs-custom-container-tutorial --name <registry-name> --query id --output tsv)
    
  3. Accordez à l’identité managée l’autorisation d’accéder au registre de conteneurs :

    az role assignment create --assignee $principalId --scope $registryId --role "AcrPull"
    

    Pour plus d’informations sur ces autorisations, consultez Présentation du contrôle d’accès en fonction du rôle Azure.

V. Créer l’application web

  1. Créez un plan App Service à l’aide de la commande az appservice plan create :

    az appservice plan create --name myAppServicePlan --resource-group msdocs-custom-container-tutorial --is-linux
    

    Un plan App Service correspond à la machine virtuelle qui héberge l’application web. Par défaut, la commande précédente utilise un niveau tarifaire B1 pas cher qui est gratuit le premier mois. Vous pouvez contrôler le niveau à l’aide du paramètre --sku.

  2. Créez l’application web à l’aide de la commande az webapp create :

    az webapp create --resource-group msdocs-custom-container-tutorial --plan myAppServicePlan --name <app-name> --deployment-container-image-name <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest
    

    Remplacez <app-name> par le nom de l’application web, qui doit être unique dans tout Azure. Remplacez également <registry-name> par le nom de votre registre spécifié à la section précédente.

    Conseil

    Vous pouvez récupérer les paramètres de conteneur de l’application web à tout moment avec la commande az webapp config container show --name <app-name> --resource-group msdocs-custom-container-tutorial. L’image est spécifiée dans la propriété DOCKER_CUSTOM_IMAGE_NAME. Quand l’application web est déployée par le biais de modèles Azure DevOps ou Azure Resource Manager, l’image peut également apparaître dans une propriété nommée LinuxFxVersion. Les deux propriétés remplissent la même fonction. Si les deux sont présentes dans la configuration de l’application web, LinuxFxVersion est prioritaire.

VI. Configurer l’application web

Dans cette étape, vous configurez l’application web comme suit :

  • L’exemple de conteneur est à l’écoute sur le port 8000 pour les requêtes web, et vous configurez l’application pour envoyer des requêtes au port 8000.
  • Demandez à votre application d’utiliser l’identité managée pour extraire des images de votre registre de conteneurs.
  • Configurez le déploiement continu à partir du registre de conteneurs (ou, chaque image push dans le registre déclenche l’extraction de la nouvelle image par votre application). Ce composant n’est pas nécessaire à l’extraction de votre application web à partir de votre registre de conteneurs, mais il peut indiquer à votre application web quand une nouvelle image est envoyée au Registre. Sans cela, vous devez déclencher manuellement une extraction d’image en redémarrant l’application web.
  1. Utilisez az webapp config appsettings set pour définir la variable d’environnement WEBSITES_PORT conformément aux attentes du code d’application :

    az webapp config appsettings set --resource-group msdocs-custom-container-tutorial --name <app-name> --settings WEBSITES_PORT=8000
    

    Remplacez <app-name> par le nom que vous avez utilisé à l’étape précédente.

    Pour plus d’informations sur cette variable d’environnement, consultez le fichier Lisez-moi disponible dans le dépôt GitHub de l’exemple.

  2. Activez l’identité managée affectée par l’utilisateur dans l’application web avec la commande az webapp identity assign:

    id=$(az identity show --resource-group msdocs-custom-container-tutorial --name myID --query id --output tsv)
    az webapp identity assign --resource-group msdocs-custom-container-tutorial --name <app-name> --identities $id
    

    Remplacez <app-name> par le nom que vous avez utilisé à l’étape précédente.

  3. Configurez votre application pour extraire des Azure Container Registry à l’aide d’identités managées.

    appConfig=$(az webapp config show --resource-group msdocs-custom-container-tutorial --name <app-name> --query id --output tsv)
    az resource update --ids $appConfig --set properties.acrUseManagedIdentityCreds=True
    

    Remplacez <app-name> par le nom que vous avez utilisé à l’étape précédente.

  4. Définissez l’ID client utilisé par votre application web pour extraire des Azure Container Registry. Cette étape n’est pas nécessaire si vous utilisez l’identité managée affectée par le système.

    clientId=$(az identity show --resource-group msdocs-custom-container-tutorial --name myID --query clientId --output tsv)
    az resource update --ids $appConfig --set properties.AcrUserManagedIdentityID=$clientId
    
  5. Activez CI/CD dans App Service.

    cicdUrl=$(az webapp deployment container config --enable-cd true --name <app-name> --resource-group msdocs-custom-container-tutorial --query CI_CD_URL --output tsv)
    

    CI_CD_URL est une URL qu’App Service génère pour vous. Votre registre doit utiliser cette URL pour notifier App Service qu’un push d’image s’est produit. En fait, il ne crée pas le webhook.

  6. Créez un webhook dans votre registre de conteneurs à l’aide de la CI_CD_URL que vous avez obtenue à partir de la dernière étape.

    az acr webhook create --name appserviceCD --registry <registry-name> --uri $cicdUrl --actions push --scope appsvc-tutorial-custom-image:latest
    
  7. Pour tester si votre classeur est configuré correctement, exécutez une commande ping sur le classeur et vérifiez si vous obtenez une réponse 200 OK.

    eventId=$(az acr webhook ping --name appserviceCD --registry <registry-name> --query id --output tsv)
    az acr webhook list-events --name appserviceCD --registry <registry-name> --query "[?id=='$eventId'].eventResponseMessage"
    

    Conseil

    Pour afficher toutes les informations sur tous les événements de webhook, supprimez le paramètre --query.

    Si vous diffusez en continu le journal de conteneur, vous devriez voir le message après le test ping du webhook : Starting container for site, car le webhook déclenche le redémarrage de l’application.

VII. Accéder à l’application web

Pour tester l’application, accédez à https://<app-name>.azurewebsites.net, en remplaçant <app-name> par le nom de votre application web.

Lorsque l’utilisateur accède à l’application pour la première fois, celle-ci peut mettre un certain temps à répondre, car App Service doit tirer (pull) l’image entière du registre. En cas d’expiration du délai d’attente du navigateur, actualisez simplement la page. Une fois l’image initiale tirée (pull), les tests suivants s’exécutent beaucoup plus rapidement.

Capture d’écran du navigateur montrant l’application web s’exécutant correctement dans Azure.

VIII. Accéder aux journaux de diagnostic

Pendant qu’App Service extrait l’image, il est utile de voir exactement ce qu’App Service fait en diffusant les journaux de conteneur sur votre terminal.

  1. Activez la journalisation de conteneur :

    az webapp log config --name <app-name> --resource-group msdocs-custom-container-tutorial --docker-container-logging filesystem
    
  2. Activez le flux de journaux :

    az webapp log tail --name <app-name> --resource-group msdocs-custom-container-tutorial
    

    Si vous ne voyez pas les journaux d’activité de la console, attendez 30 secondes et vérifiez à nouveau.

    Vous pouvez également inspecter les fichiers journaux à partir du navigateur sur https://<app-name>.scm.azurewebsites.net/api/logs/docker.

  3. Pour arrêter le streaming des journaux à tout moment, appuyez sur Ctrl+C.

IX. Modifier le code d’application et effectuer au redéploiement

Dans cette section, vous apportez un changement au code de l’application web, vous régénérez l’image, puis envoyez (push) à votre registre de conteneurs. App Service tire (pull) ensuite automatiquement l’image mise à jour du registre pour mettre à jour l’application web en cours d’exécution.

  1. Dans votre dossier docker-django-webapp-linux local, ouvrez le fichier app/templates/app/index.html.

  2. Modifiez le premier élément HTML pour qu’il corresponde au code suivant.

    <nav class="navbar navbar-inverse navbar-fixed-top">
      <div class="container">
        <div class="navbar-header">
          <a class="navbar-brand" href="#">Azure App Service - Updated Here!</a>
        </div>
      </div>
    </nav>
    
  3. Enregistrez vos modifications.

  4. Accédez au dossier docker-django-webapp-linux, puis regénérez l’image :

    docker build --tag appsvc-tutorial-custom-image .
    
  5. Mettez à jour la balise de l’image vers la dernière version :

    docker tag appsvc-tutorial-custom-image <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest
    

    Remplacez <registry-name> par le nom de votre registre.

  6. Envoyez l’image vers le registre :

    docker push <registry-name>.azurecr.io/appsvc-tutorial-custom-image:latest
    
  7. Lorsque l’envoi de l’image terminé, le webhook notifie App Service de l’envoi et App Service tente d’extraire l’image mise à jour. Patientez quelques minutes, puis vérifiez que la mise à jour a été déployée en accédant à https://<app-name>.azurewebsites.net.

X. Se connecter au conteneur avec SSH

SSH permet d’établir une communication sécurisée entre un conteneur et un client. Pour activer la connexion SSH à votre conteneur, votre image personnalisée doit être configurée pour cela. Lorsque le conteneur est en cours d’exécution, vous pouvez ouvrir une connexion SSH.

Configurer le conteneur pour SSH

L’exemple d’application utilisé dans ce tutoriel dispose déjà de la configuration nécessaire dans le fichier Dockerfile, qui installe le serveur SSH et définit les informations d’identification de connexion. Cette section est fournie à titre d’information uniquement. Pour vous connecter au conteneur, passez à la section suivante.

ENV SSH_PASSWD "root:Docker!"
RUN apt-get update \
        && apt-get install -y --no-install-recommends dialog \
        && apt-get update \
  && apt-get install -y --no-install-recommends openssh-server \
  && echo "$SSH_PASSWD" | chpasswd 

Notes

Cette configuration n’autorise pas les connexions externes avec le conteneur. SSH est disponible uniquement via le site Kudu/SCM. Le site Kudu/SCM est authentifié avec votre compte Azure. root:Docker! ne doit pas être un SSH modifié. SCM/KUDU utilise les informations d’identification de votre portail Azure. Si vous modifiez cette valeur, une erreur se produira quand vous utiliserez le SSH.

Le fichier Dockerfile copie également le fichier sshd_config dans le dossier /etc/ssh/ et expose le port 2222 sur le conteneur :

COPY sshd_config /etc/ssh/

# ...

EXPOSE 8000 2222

Le port 2222 est un port interne accessible uniquement par les conteneurs présents dans le réseau de pont d’un réseau virtuel privé.

Enfin, le script d’entrée init.sh démarre le serveur SSH.

#!/bin/bash
service ssh start

Ouvrir la connexion SSH au conteneur

  1. Accédez à https://<app-name>.scm.azurewebsites.net/webssh/host et connectez-vous avec votre compte Azure. Remplacez <app-name> par le nom de votre application web.

  2. Lorsque vous vous connectez, vous êtes redirigé vers une page d’informations concernant l’application web. Sélectionnez SSH en haut de la page pour ouvrir l’interpréteur de commandes et utiliser des commandes.

    Par exemple, vous pouvez examiner les processus en cours d’exécution dans celui-ci à l’aide de la commande top.

XI. Nettoyer les ressources

Les ressources que vous avez créées avec cet article peuvent occasionner des frais récurrents. Pour nettoyer les ressources, il vous suffit de supprimer le groupe de ressources qui les contient :

az group delete --name msdocs-custom-container-tutorial

Étapes suivantes

Vous avez appris à effectuer les opérations suivantes :

  • Déployer une image personnalisée dans un Registre de conteneurs privé
  • Déployer et exécuter l’image personnalisée dans App Service
  • Mettre à jour et redéployer l’image
  • Accéder aux journaux de diagnostic
  • Se connecter au conteneur avec SSH
  • Envoyer une image Docker personnalisée vers Azure Container Registry
  • Déployer l’image personnalisée dans App Service
  • Configuration des variables d’environnement
  • Extraire l’image dans App Service à l’aide d’une identité gérée
  • Accéder aux journaux de diagnostic
  • Activer CI/CD depuis Azure Container Registry vers App Service
  • Se connecter au conteneur avec SSH

Dans le tutoriel suivant, vous apprendrez à sécuriser votre application avec un domaine personnalisé et un certificat.

Ou consultez les autres ressources :