Générer et exécuter une application web Python conteneurisée localement avec MongoDB

Cet article fait partie d’un didacticiel sur la façon de conteneuriser et de déployer une application web Python conteneurisée sur Azure App Service. App Service vous permet d’exécuter des applications web conteneurisées et de déployer via des fonctionnalités d’intégration/de déploiement continu (CI/CD) avec Docker Hub, Azure Container Registry et Visual Studio Team Services. Dans cette partie du tutoriel, vous allez apprendre à générer et exécuter l’application web Python en conteneur localement. Cette étape est facultative et n’est pas nécessaire pour déployer l’exemple d’application sur Azure.

L’exécution d’une image Docker localement dans votre environnement de développement nécessite une configuration au-delà du déploiement sur Azure. Considérez-le comme un investissement qui peut rendre les futurs cycles de développement plus faciles, en particulier lorsque vous passez au-delà des exemples d’applications et que vous commencez à créer vos propres applications web. Pour déployer les exemples d’applications pour Django et Flask, vous pouvez ignorer cette étape et passer à l’étape suivante de ce tutoriel. Vous pouvez toujours revenir après le déploiement sur Azure et suivre ces étapes.

Le diagramme de service suivant met en évidence les composants abordés dans cet article.

A screenshot of the Tutorial - Containerized Python App on Azure with local part highlighted.

1. Clonez ou téléchargez l’exemple d’application

Clonez le référentiel :

# Django
git clone https://github.com/Azure-Samples/msdocs-python-django-container-web-app.git

# Flask
git clone https://github.com/Azure-Samples/msdocs-python-flask-container-web-app.git

Accédez ensuite à ce dossier :

# Django
cd msdocs-python-django-container-web-app

# Flask
cd msdocs-python-flask-container-web-app

2. Générer une image Docker

Si vous utilisez l’un des exemples d’applications de framework disponibles pour Django et Flask, vous êtes configuré pour y accéder. Si vous utilisez votre propre exemple d’application, regardez comment les exemples d’applications sont configurés, en particulier le fichier Dockerfile dans le répertoire racine.

Ces instructions nécessitent Visual Studio Code et l’extension Docker. Accédez à l’exemple de dossier que vous avez cloné ou téléchargé et ouvrez VS Code avec la commande code ..

Remarque

Les étapes décrites dans cette section nécessitent l’exécution du démon Docker. Dans certaines installations, par exemple sur Windows, vous devez ouvrir Docker Desktop, qui démarre le démon, avant de continuer.

Instructions Capture d'écran
Ouvrez l’extension Docker.

Si l’extension Docker signale une erreur « Échec de la connexion », vérifiez que Docker est installé et en cours d’exécution. S’il s’agit de votre première utilisation de Docker, vous n’avez probablement pas de conteneurs, d’images ou de registres connectés.
A screenshot showing how to open the Docker extension in Visual Studio Code.
Générer l’image.
  • Dans l’Explorateur de projets affichant les fichiers projet, cliquez avec le bouton droit sur le fichier Dockerfile et sélectionnez Générer une image....

  • Vous pouvez également utiliser la palette de commandes (F1 ou Ctrl+Maj+P) et taper « Images Docker : Générer des images » pour appeler la commande.

Pour plus d’informations sur la syntaxe dockerfile, consultez la référence dockerfile.
A screenshot showing how to build the Docker image in Visual Studio Code.
Vérifiez que l’image a été générée.
  • Accédez à la section IMAGES de l’extension Docker.

  • Recherchez l’image récemment générée. Le nom de l’image conteneur est « msdocspythoncontainerwebapp », qui est défini dans le fichier .vscode/tasks.json .

A screenshot showing how to confirm the built image in Visual Studio Code.

À ce stade, vous avez créé une image localement. L’image que vous avez créée porte le nom « msdocspythoncontainerwebapp » et la balise « latest ». Les balises permettent de définir les informations de version, l’utilisation prévue, la stabilité ou d’autres informations. Pour plus d’informations, consultez les Recommandations pour les images conteneur de balisage et le contrôle de version.

Les images générées à partir de VS Code ou à partir de l’interface CLI Docker directement peuvent également être consultées avec l’application Docker Desktop .

3. Configurer MongoDB

Pour ce didacticiel, vous avez besoin d’une base de données MongoDB nommée restaurants_reviews et d’une collection nommée restaurants_reviews. Les étapes décrites dans cette section vous montrent comment utiliser une installation locale de MongoDB ou d’Azure Cosmos DB pour MongoDB pour Créer et accéder à la base de données et à la collection.

Important

N’utilisez pas de base de données MongoDB que vous utiliserez en production. Dans ce tutoriel, vous allez stocker le chaîne de connexion MongoDB dans une variable d’environnement. Cela le rend observable par toute personne capable d’inspecter votre conteneur (par exemple, à l’aide docker inspectde ).

Étape 1 : Installez MongoDB si ce n’est pas déjà fait.

Vous pouvez case activée pour l’installation de MongoDB à l’aide de MongoDB Shell (mongosh).

  • La commande suivante entre dans l’interpréteur de commandes et vous donne la version du serveur mongosh et mongoDB installé sur votre système :

    mongosh
    
  • La commande suivante vous donne uniquement la version du serveur MongoDB installée sur votre système :

    mongosh --quiet --exec 'db.version()'
    

Si ces commandes ne fonctionnent pas, vous devrez peut-être installer explicitement mongosh ou connecter mongosh à votre serveur MongoDB.

Une alternative dans certaines installations consiste à appeler directement le démon Mongo.

mongod --version

Étape 2 : Modifiez le fichier mongod.cfg pour ajouter l’adresse IP de votre ordinateur.

Le fichier de configuration mongod a une bindIp clé qui définit les noms d’hôte et les adresses IP que MongoDB écoute pour les connexions clientes. Ajoutez l’adresse IP actuelle de votre ordinateur de développement local. L’exemple d’application exécuté localement dans un conteneur Docker communique avec l’ordinateur hôte avec cette adresse.

Par exemple, une partie du fichier de configuration doit ressembler à ceci :

net:
  port: 27017
  bindIp: 127.0.0.1,<local-ip-address>

Redémarrez MongoDB pour récupérer les modifications apportées au fichier de configuration.

Étape 3 : Créer une base de données et une collection dans la base de données MongoDB locale.

Définissez le nom de la base de données sur « restaurants_reviews » et le nom de la collection sur « restaurants_reviews ». Vous pouvez créer une base de données et une collection avec l’extension VS Code MongoDB, l’interpréteur de commandes MongoDB (mongosh) ou tout autre outil prenant en compte MondoDB.

Pour l’interpréteur de commandes MongoDB, voici des exemples de commandes pour créer la base de données et la collection :

> help
> use restaurants_reviews
> db.restaurants_reviews.insertOne({})
> show dbs
> exit

À ce stade, votre chaîne de connexion MongoDB local est « mongodb://127.0.0.1:27017/ », le nom de la base de données est « restaurants_reviews » et le nom de la collection est « restaurants_reviews ».

4. Exécuter l’image localement dans un conteneur

Avec des informations sur la connexion à une base de données MongoDB, vous êtes prêt à exécuter le conteneur localement. L’exemple d’application s’attend à ce que les informations de connexion MongoDB soient transmises dans les variables d’environnement. Il existe plusieurs façons d’obtenir des variables d’environnement passées au conteneur localement. Chacun présente des avantages et des inconvénients en termes de sécurité. Vous devez éviter de case activée dans des informations sensibles ou de laisser des informations sensibles dans le code dans le conteneur.

Remarque

Quand elle est déployée sur Azure, l’application web obtient des informations de connexion à partir des valeurs d’environnement définies en tant que paramètres de configuration App Service et aucune des modifications apportées au scénario d’environnement de développement local ne s’applique.

Instructions Capture d'écran
Dans le dossier .vscode de l’exemple d’application, le fichier settings.json définit ce qui se passe lorsque vous utilisez l’extension Docker et sélectionnez Exécuter ou Exécuter interactive dans le menu contextuel d’une balise. Le fichier settings.json contient deux modèles chacun pour les scénarios et (MongoDB Azure) les (MongoDB local) scénarios.

Si vous utilisez une base de données MongoDB locale :
  • Remplacez les deux instances par <YOUR_IP_ADDRESS> votre adresse IP.

  • Remplacez les deux instances par <CONNECTION_STRING> le chaîne de connexion de votre base de données MongoDB.

Si vous utilisez une base de données Azure Cosmos DB pour MongoDB :
  • Remplacez les deux instances par <CONNECTION_STRING> l’chaîne de connexion Azure Cosmos DB pour MongoDB.
Définissez le docker.dockerPath paramètre de configuration utilisé par les modèles. Pour définir docker.dockerPath, ouvrez la palette de commandes VS Code (Ctrl+Maj+P), entrez « Préférences : Ouvrir l’espace de travail Paramètres », puis entrez « docker.dockerPath » dans la zone Paramètres de recherche. Entrez « docker » (sans guillemets) pour la valeur du paramètre.

Remarque

Le nom de la base de données et le nom de la collection sont supposés être restaurants_reviews.

A screenshot showing the settings.json file Visual Studio Code.
Exécutez l’image.
  • Dans la section IMAGES de l’extension Docker, recherchez l’image générée.

  • Développez l’image pour rechercher la dernière balise, cliquez avec le bouton droit et sélectionnez Exécuter interactive.

  • Vous serez invité à sélectionner la tâche appropriée pour votre scénario, « Configuration d’exécution interactive (mongoDB locale) » ou « Configuration d’exécution interactive (MongoDB Azure) ».

Avec l’exécution interactive, vous verrez toutes les instructions d’impression dans le code, qui peuvent être utiles pour le débogage. Vous pouvez également sélectionner Exécuter qui n’est pas interactif et ne conserve pas l’entrée standard ouverte.

Important

Cette étape échoue si le profil de terminal par défaut est défini sur l’invite de commandes (Windows). Pour modifier le profil par défaut, ouvrez la palette de commandes VS Code (Ctrl+Maj+P), entrez « Terminal : Sélectionner le profil par défaut », puis sélectionnez un autre profil dans le menu déroulant, par exemple Git Bash ou PowerShell.

A screenshot showing how to run a Docker container in Visual Studio Code.
Vérifiez que le conteneur est en cours d’exécution.
  • Dans la section CONTENEURS de l’extension Docker, recherchez le conteneur.

  • Développez le nœud Conteneurs individuels et vérifiez que « msdocspythoncontainerwebapp » est en cours d’exécution. Vous devez voir un symbole de triangle vert en regard du nom du conteneur s’il est en cours d’exécution.

A screenshot showing how to confirm a Docker container is running in Visual Studio Code.
Testez l’application web en cliquant avec le bouton droit sur le nom du conteneur et en sélectionnant Ouvrir dans le navigateur.

Le navigateur s’ouvre dans votre navigateur par défaut en tant que «http://127.0.0.1:8000" ; pour Django ou « http://127.0.0.1:5000/" pour Flask.
A screenshot showing how to browse the endpoint of a Docker container in Visual Studio Code.
Arrêtez le conteneur .
  • Dans la section CONTENEURS de l’extension Docker, recherchez le conteneur en cours d’exécution.

  • Cliquez avec le bouton droit sur le conteneur, puis sélectionnez Arrêter.

A screenshot showing how to stop a running Docker container in Visual Studio Code.

Conseil

Vous pouvez également exécuter le conteneur en sélectionnant une configuration d’exécution ou de débogage. Les tâches d’extension Docker dans tasks.json sont appelées lorsque vous exécutez ou déboguez. La tâche appelée dépend de la configuration de lancement que vous sélectionnez. Pour la tâche « Docker : Python (local MongoDB) », spécifiez <YOUR-IP-ADDRESS>. Pour la tâche « Docker : Python (MongoDB Azure) », spécifiez <CONNECTION-STRING>.

Vous pouvez également démarrer un conteneur à partir d’une image et l’arrêter avec l’application Docker Desktop .

Étape suivante