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, comme ASP.NET ou Node.js, sur Windows. Ces piles d’applications s’exécutent 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. Cela facilite la migration d’une application locale nécessitant un système d’exploitation et une configuration logicielle personnalisés. 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.

Sélectionnez 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. Les éléments de menu Ajouter et Prise en charge de l’orchestrateur de conteneurs sont 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 qu’il utilise des images hébergées dans Azure Container Registry.

Ouvrir l’Assistant de 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. L’élément de menu Publier est sélectionné.

Créer et publier le registre

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

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

Se connecter avec un 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.

Capture d’écran montrant comment se connecter à Azure.

Configurer le registre

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

Paramètre Valeur suggérée
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. Pour plus d’informations, consultez Niveaux tarifaires.
Emplacement du registre Europe Ouest

Capture d’écran de la page Créer 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. Sélectionnez ensuite Suivant : Docker.

Setting Valeur suggérée
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 :

Capture d’écran de l’onglet Informations de base utilisé pour configurer l’application web.

Configurer le conteneur Windows

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

Setting 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

Une fois le déploiement terminé, 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, puis réessayez jusqu’à ce que la page d’accueil s’affiche avec la police attendue :

Capture d’écran de la page d’accueil avec la police configurée.

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

Affichez les journaux de démarrage du conteneur

Le chargement du conteneur Windows peut prendre un certain temps. Pour afficher la progression, accédez à l’URL suivante. (Remplacez <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

Votre conteneur doit cibler l’architecture x86-64. ARM64 n’est pas pris en charge.

Dans ce tutoriel, vous allez apprendre à :

  • Envoyer (push) une image Docker personnalisée à Azure Container Registry.
  • Déployer l’image personnalisée sur App Service.
  • Configurer des variables d’environnement.
  • Tirer (pull) l’image dans App Service à l’aide d’une identité managée.
  • Accéder aux journaux de diagnostic.
  • Activer CI/CD d’Azure Container Registry vers App Service.
  • Établir une connexion au conteneur en utilisant SSH.

L’exécution de ce tutoriel entraîne des frais minimes sur votre compte Azure pour le registre de conteneurs et peut engendrer des frais supplémentaires si vous hébergez le 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 utilisés dans le conteneur Linux.

Accédez ensuite au dossier suivant :

cd docker-django-webapp-linux

Télécharger à partir de GitHub

Au lieu d’utiliser git clone, vous pouvez accéder à https://github.com/Azure-Samples/docker-django-webapp-linux et sélectionner Code>Local>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

Il s’agit du fichier de l’exemple nommé Dockerfile. Il décrit l’image Docker et 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 commandes crée un serveur SSH pour améliorer la sécurité des communications 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

Remarque

Docker Hub a des quotas sur le nombre d’extractions anonymes par IP et le nombre d’extractions authentifiées par utilisateur gratuit. 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 et inclut le 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", le fichier init.sh contient des fins de ligne CRLF à 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, clonez à nouveau 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.

    Capture d’écran des résultats du test.

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 à l’aide de la commande az acr create suivante. 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’informations d’identification d’administration.

  2. Récupérez les informations d’identification administratives en exécutant la commande az credential 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. Quand vous y êtes invité, tapez l’un des mots de passe de la section 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 Qu’est-ce que le 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 peu coûteux qui est gratuit le premier mois. Vous pouvez spécifier 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 un nom pour l’application web. Le nom 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 :

  • Configurez l’application pour envoyer des requêtes au port 8000. L’exemple de conteneur écoute les requêtes web sur le 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 (chaque image envoyée au registre déclenche le tirage 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.

  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 webhook est configuré correctement, exécutez une commande ping sur le webhook 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 un message Starting container for site après le test Ping du webhook, car ce dernier 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. Remplacez <app-name> par le nom de votre application web.

La première fois que vous tentez d’accéder à l’application, celle-ci peut mettre un certain temps à répondre, car App Service doit tirer 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 de l’application web en cours d’exécution dans un navigateur.

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 de journaux à tout moment, sélectionnez 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 avec latest :

    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. Une fois l’envoi de l’image terminé, le webhook notifie App Service de l’envoi et App Service tente de tirer 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’améliorer la sécurité des communications entre un conteneur et un client. Pour activer une connexion SSH à votre conteneur, vous devez configurer votre image personnalisé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. Ne modifiez pas root:Docker! lorsque vous utilisez SSH. SCM/KUDU utilise vos informations d’identification du Portail Azure. Si vous modifiez cette valeur, une erreur se produit quand vous utilisez 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 l’application en utilisant 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éployez une image personnalisée sur un registre de conteneurs privé.
  • Déployez l’image personnalisée dans App Service.
  • Mettez à jour et redéployez l’image.
  • Accéder aux journaux de diagnostic.
  • Établir une connexion au conteneur en utilisant SSH.
  • Envoyer (push) une image Docker personnalisée à Azure Container Registry.
  • Déployer l’image personnalisée sur App Service.
  • Configurer des variables d’environnement.
  • Tirer (pull) l’image dans App Service à l’aide d’une identité managée.
  • Accéder aux journaux de diagnostic.
  • Activer CI/CD d’Azure Container Registry vers App Service.
  • Établir une connexion au conteneur en utilisant SSH.

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

Ou consultez les autres ressources :