Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Dans cette partie de la série de tutoriels, vous allez apprendre à générer et exécuter une application web Django conteneurisée ou Flask Python sur votre ordinateur local. Pour stocker des données pour cette application, vous pouvez utiliser une instance MongoDB locale ou Azure Cosmos DB pour MongoDB. Cet article fait partie 2 d’une série de tutoriels en 5 parties. Nous vous recommandons de suivre la partie 1 avant de commencer cet article.
Le diagramme de service suivant met en évidence les composants locaux abordés dans cet article Dans cet article, vous allez également apprendre à utiliser Azure Cosmos DB pour MongdoDB avec une image Docker locale, plutôt qu’une instance locale de MongoDB.
Cloner ou télécharger l’exemple d’application Python
Dans cette section, vous clonez ou téléchargez l’exemple d’application Python que vous utilisez pour générer une image Docker. Vous pouvez choisir entre une application web Django ou Flask Python. Si vous disposez de votre propre application web Python, vous pouvez choisir d’utiliser cela à la place. Si vous utilisez votre propre application web Python, vérifiez que votre application dispose d’un fichier Dockerfile dans le dossier racine et que vous pouvez vous connecter à une base de données MongoDB.
Clonez le référentiel Django ou Flask dans un dossier local à l’aide de l’une des commandes suivantes :
Accédez au dossier racine de votre référentiel cloné.
Générer une image Docker
Dans cette section, vous générez une image Docker pour l’application web Python à l’aide de Visual Studio Code ou d’Azure CLI. L’image Docker contient l’application web Python, ses dépendances et le runtime Python. L’image Docker est générée à partir d’un fichier Dockerfile qui définit le contenu et le comportement de l’image. Le fichier Dockerfile se trouve dans le dossier racine de l’exemple d’application que vous avez cloné ou téléchargé (ou fourni vous-même).
Conseil / Astuce
Si vous débutez avec Azure CLI, consultez Prise en main d’Azure CLI pour découvrir comment télécharger et installer Azure CLI localement ou comment exécuter des commandes Azure CLI dans la Azure Cloud Shell.
Docker est requis pour générer l’image Docker à l’aide de l’interface CLI Docker. Une fois Docker installé, ouvrez une fenêtre de terminal et accédez à l’exemple de dossier.
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.
Vérifiez que Docker est accessible en exécutant la commande suivante dans le dossier racine de l’exemple d’application.
docker
Si, après avoir exécuté cette commande, vous voyez de l’aide pour l’interface CLI Docker, Docker est accessible. Sinon, vérifiez que Docker est installé et que votre interpréteur de commandes a accès à l’interface CLI Docker.
Générez l’image Docker pour l’application web Python à l’aide de la commande docker build .
La forme générale de la commande est
docker build --rm --pull --file "<path-to-project-root>/Dockerfile" --label "com.microsoft.created-by=docker-cli" --tag "<container-name>:latest" "<path-to-project-root>"
.Si vous êtes dans le dossier racine du projet, utilisez la commande suivante pour générer l’image Docker. Le point (« . ») à la fin de la commande fait référence au répertoire actif dans lequel la commande s’exécute. Pour forcer une reconstruction, ajoutez
--no-cache
.#!/bin/bash docker build --rm --pull \ --file "Dockerfile" \ --label "com.microsoft.create-by=docker-cli" \ --tag "msdocspythoncontainerwebapp:latest" \ .
Vérifiez que l’image a été générée avec succès à l’aide de la commande Images Docker .
docker images
La commande retourne une liste d’images par nom du dépôt, étiquette et date de création, parmi d'autres caractéristiques de l'image.
À ce stade, vous disposez d’une image Docker locale nommée « msdocspythoncontainerwebapp » avec la balise « latest ». Les balises permettent de définir les détails de version, l’utilisation prévue, la stabilité et d’autres informations pertinentes. Pour plus d’informations, consultez les Recommandations pour le balisage et le versionnage des images de conteneur.
Remarque
Les images générées à partir de VS Code ou à l’aide de l’interface CLI Docker directement peuvent également être consultées avec l’application Docker Desktop .
Configurer MongoDB
Votre application web Python nécessite une base de données MongoDB nommée restaurants_reviews et une collection nommée restaurants_reviews sont requises pour stocker des données. Dans ce tutoriel, vous utilisez à la fois une installation locale de MongoDB et une instance Azure Cosmos DB pour MongoDB pour créer et accéder à la base de données et à la collection.
Importante
N’utilisez pas de base de données MongoDB que vous utilisez en production. Dans ce tutoriel, vous stockez la chaîne de connexion MongoDB à l’une de ces instances MongoDB dans une variable d’environnement (qui est observable par toute personne capable d’inspecter votre conteneur, par exemple en utilisant docker inspect
).
MongoDB locale
Commençons par créer une instance locale de MongoDB à l’aide d’Azure CLI.
Installez MongoDB (s’il n’est pas déjà installé).
Vous pouvez vérifier l’installation de MongoDB à l’aide de MongoDB Shell (mongosh). Si les commandes suivantes ne fonctionnent pas, vous devrez peut-être installer explicitement mongosh ou connecter mongosh à votre serveur MongoDB.
Utilisez la commande suivante pour ouvrir l’interpréteur de commandes MongoDB et obtenir la version de l’interpréteur de commandes MongoDB et du serveur MongoDB :
mongosh
Conseil / Astuce
Pour retourner uniquement la version du serveur MongoDB installée sur votre système, fermez et rouvrez l’interpréteur de commandes MongoDB et utilisez la commande suivante :
mongosh --quiet --exec 'db.version()'
Dans certaines configurations, vous pouvez également appeler directement le démon Mongo dans votre interpréteur de commandes bash.
mongod --version
Modifiez le fichier mongod.cfg dans le
\MongoDB\Server\8.0\bin
dossier et ajoutez l’adresse IP locale de votre ordinateur à labindIP
clé.La
bindip
clé du fichier de configuration MongoD 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 web Python s’exécutant 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>
Enregistrez vos modifications dans ce fichier de configuration.
Importante
Vous avez besoin de privilèges d’administration pour enregistrer les modifications que vous apportez à ce fichier de configuration.
Redémarrez MongoDB pour récupérer les modifications apportées au fichier de configuration.
Ouvrez un interpréteur de commandes MongoDB et exécutez la commande suivante pour définir le nom de la base de données sur « restaurants_reviews » et le nom de la collection sur « restaurants_reviews ». Vous pouvez également créer une base de données et une collection avec l’extension VS Code MongoDB ou tout autre outil prenant en compte MongoDB.
> help > use restaurants_reviews > db.restaurants_reviews.insertOne({}) > show dbs > exit
Une fois l’étape précédente terminée, la chaîne de connexion MongoDB locale 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 ».
Azure Cosmos DB pour MongoDB
Maintenant, nous allons également créer une instance Azure Cosmos DB pour MongoDB à l’aide d’Azure CLI.
Remarque
Dans la partie 4 de cette série de tutoriels, vous utilisez l’instance Azure Cosmos DB pour MongoDB pour exécuter l’application web dans Azure App Service.
Avant d’exécuter le script suivant, remplacez l’emplacement, le groupe de ressources et le nom du compte Azure Cosmos DB pour MongoDB par des valeurs appropriées (facultatif). Nous vous recommandons d’utiliser le même groupe de ressources pour toutes les ressources Azure créées dans ce didacticiel pour faciliter leur suppression lorsque vous avez terminé.
L’exécution du script prend quelques minutes.
#!/bin/bash
# LOCATION: The Azure region. Use the "az account list-locations -o table" command to find a region near you.
LOCATION='westus'
# RESOURCE_GROUP_NAME: The resource group name, which can contain underscores, hyphens, periods, parenthesis, letters, and numbers.
RESOURCE_GROUP_NAME='msdocs-web-app-rg'
# ACCOUNT_NAME: The Azure Cosmos DB for MongDB account name, which can contain lowercase letters, hyphens, and numbers.
ACCOUNT_NAME='msdocs-cosmos-db-account-name'
# Create a resource group
echo "Creating resource group $RESOURCE_GROUP_NAME in $LOCATION..."
az group create --name $RESOURCE_GROUP_NAME --location $LOCATION
# Create a Cosmos account for MongoDB API
echo "Creating $ACCOUNT_NAME. This command may take a while to complete."
az cosmosdb create --name $ACCOUNT_NAME --resource-group $RESOURCE_GROUP_NAME --kind MongoDB
# Create a MongoDB API database
echo "Creating database restaurants_reviews"
az cosmosdb mongodb database create --account-name $ACCOUNT_NAME --resource-group $RESOURCE_GROUP_NAME --name restaurants_reviews
# Create a MongoDB API collection
echo "Creating collection restaurants_reviews"
az cosmosdb mongodb collection create --account-name $ACCOUNT_NAME --resource-group $RESOURCE_GROUP_NAME --database-name restaurants_reviews --name restaurants_reviews
# Get the connection string for the MongoDB database
echo "Get the connection string for the MongoDB account"
az cosmosdb keys list --name $ACCOUNT_NAME --resource-group $RESOURCE_GROUP_NAME --type connection-strings
echo "Copy the Primary MongoDB Connection String from the list above"
Lorsque le script se termine, copiez la chaîne de connexion MongoDB primaire de la sortie de la dernière commande dans votre presse-papiers ou à un autre emplacement.
{
"connectionStrings": [
{
"connectionString": ""mongodb://msdocs-cosmos-db:pnaMGVtGIRAZHUjsg4GJBCZMBJ0trV4eg2IcZf1TqV...5oONz0WX14Ph0Ha5IeYACDbuVrBPA==@msdocs-cosmos-db.mongo.cosmos.azure.com:10255/?ssl=true&replicaSet=globaldb&retrywrites=false&maxIdleTimeMS=120000&appName=@msdocs-cosmos-db@"",
"description": "Primary MongoDB Connection String",
"keyKind": "Primary",
"type": "MongoDB"
},
...
]
}
Une fois l’étape précédente terminée, vous disposez d’une chaîne de connexion Azure Cosmos DB pour MongoDB du formulaire mongodb://<server-name>:<password>@<server-name>.mongo.cosmos.azure.com:10255/?ssl=true&<other-parameters>
, d’une base de données nommée restaurants_reviews
et d’une collection nommée restaurants_reviews
.
Pour plus d’informations sur l’utilisation d’Azure CLI pour créer un compte Cosmos DB pour MongoDB et créer des bases de données et des collections, consultez Créer une base de données et une collection pour MongoDB pour Azure Cosmos DB à l’aide d’Azure CLI. Vous pouvez également utiliser PowerShell, l’extension Vs Code Azure Databases et le portail Azure.
Conseil / Astuce
Dans l’extension Vs Code Azure Databases, vous pouvez cliquer avec le bouton droit sur le serveur MongoDB et obtenir la chaîne de connexion.
Exécuter l’image localement dans un conteneur
Vous êtes maintenant prêt à exécuter le conteneur Docker localement à l’aide de votre instance MongoDB locale ou de votre instance Cosmos DB pour MongoDB. Dans cette section du tutoriel, vous allez apprendre à utiliser VS Code ou Azure CLI pour exécuter l’image localement. L’application d'exemple attend que les informations de connexion MongoDB lui soient transmises avec des 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 d'enregistrer des informations sensibles ou de laisser des informations sensibles sous forme de code dans le conteneur.
Remarque
Lorsque l’application web 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.
Local MongoDB
Utilisez les commandes suivantes avec votre instance locale de MongoDB pour exécuter l’image Docker localement.
Exécutez la dernière version de l’image.
#!/bin/bash # Define variables # Set the port number based on the framework being used: # 8000 for Django, 5000 for Flask export PORT=<port-number> # Replace with actual port (e.g., 8000 or 5000) # Set your computer''s IP address (replace with actual IP) export YOUR_IP_ADDRESS=<your-computer-ip-address> # Replace with actual IP address # Run the Docker container with the required environment variables docker run --rm -it \ --publish "$PORT:$PORT" \ --publish 27017:27017 \ --add-host "mongoservice:$YOUR_IP_ADDRESS" \ --env CONNECTION_STRING=mongodb://mongoservice:27017 \ --env DB_NAME=restaurants_reviews \ --env COLLECTION_NAME=restaurants_reviews \ --env SECRET_KEY="supersecretkeythatispassedtopythonapp" \ msdocspythoncontainerwebapp:latest
Confirmez que le conteneur est en cours d'exécution. Dans une autre fenêtre de console, exécutez la commande docker container ls .
docker container ls
Voir votre conteneur « msdocspythoncontainerwebapp:latest:latest » dans la liste. Notez la
NAMES
colonne de la sortie et de laPORTS
colonne. Utilisez le nom du conteneur pour arrêter le conteneur.Testez l’application web.
Allez à "http://127.0.0.1:8000" ; pour Django et "http://127.0.0.1:5000/" ; pour Flask.
Arrêtez le conteneur.
docker container stop <container-name>
Azure Cosmos DB pour MongoDB
Utilisez les commandes suivantes avec votre instance Azure Cosmos DB pour MongoDB pour exécuter l’image Docker dans Azure.
Exécutez la dernière version de l’image.
#!/bin/bash # PORT=8000 for Django and 5000 for Flask export PORT=<port-number> export CONNECTION_STRING="<connection-string>" docker run --rm -it \ --publish $PORT:$PORT/tcp \ --env CONNECTION_STRING=$CONNECTION_STRING \ --env DB_NAME=restaurants_reviews \ --env COLLECTION_NAME=restaurants_reviews \ --env SECRET_KEY=supersecretkeythatyougenerate \ msdocspythoncontainerwebapp:latest
La transmission d’informations sensibles n’est affichée qu’à des fins de démonstration. Les informations de chaîne de connexion peuvent être consultées en inspectant le conteneur avec la commande docker container inspect. Une autre façon de gérer les secrets consiste à utiliser la fonctionnalité BuildKit de Docker.
Ouvrez une nouvelle fenêtre de console, exécutez la commande docker container ls suivante pour vérifier que le conteneur est en cours d’exécution.
docker container ls
Voir votre conteneur « msdocspythoncontainerwebapp:latest:latest » dans la liste. Notez la
NAMES
colonne de la sortie et de laPORTS
colonne. Utilisez le nom du conteneur pour arrêter le conteneur.Testez l’application web.
Allez à "http://127.0.0.1:8000" ; pour Django et "http://127.0.0.1:5000/" ; pour Flask.
Arrêtez le conteneur.
docker container stop <container-name>
Vous pouvez également démarrer un conteneur à partir d’une image et l’arrêter avec l’application Docker Desktop .