Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Teil der Lernprogrammreihe erfahren Sie, wie Sie einen containerisierten Django oder eine Flask Python-Web-App auf Ihrem lokalen Computer erstellen und ausführen. Um Daten für diese App zu speichern, können Sie entweder eine lokale MongoDB-Instanz oder Azure Cosmos DB für MongoDB verwenden. Dieser Artikel ist Teil 2 einer 5-teiligen Lernprogrammreihe. Sie sollten Teil 1 abschließen, bevor Sie diesen Artikel starten.
Das folgende Dienstdiagramm hebt die in diesem Artikel behandelten lokalen Komponenten hervor. In diesem Artikel erfahren Sie auch, wie Sie Azure Cosmos DB für MongoDB mit einem lokalen Docker-Image anstelle einer lokalen Instanz von MongoDB verwenden.
Klonen oder Herunterladen der Python-Beispiel-App
In diesem Abschnitt klonen oder laden Sie die Python-Beispiel-App herunter, die Sie zum Erstellen eines Docker-Images verwenden. Sie können zwischen einer Django- oder Flask Python-Web-App wählen. Wenn Sie über Ihre eigene Python-Web-App verfügen, können Sie dies stattdessen verwenden. Wenn Sie Ihre eigene Python-Web-App verwenden, stellen Sie sicher, dass Ihre App über eine Dockerfile im Stammordner verfügt und eine Verbindung mit einer MongoDB-Datenbank herstellen kann.
Klonen Sie entweder das Django- oder Flask-Repository in einen lokalen Ordner, indem Sie einen der folgenden Befehle verwenden:
Wechseln Sie zum Stammordner für Ihr geklontes Repository.
Erstellen eines Docker-Images
In diesem Abschnitt erstellen Sie ein Docker-Image für die Python-Web-App mit Visual Studio Code oder der Azure CLI. Das Docker-Image enthält die Python-Web-App, deren Abhängigkeiten und die Python-Laufzeit. Sie erstellen das Docker-Image aus einer Dockerfile-Datei , die den Inhalt und das Verhalten des Images definiert. Die Dockerfile-Datei befindet sich im Stammordner der Beispiel-App, die Sie geklont oder heruntergeladen haben (oder selbst bereitgestellt).
Tipp
Wenn Sie noch nicht mit der Azure CLI vertraut sind, lesen Sie erste Schritte mit Azure CLI , um zu erfahren, wie Sie die Azure CLI lokal herunterladen und installieren oder wie Sie Azure CLI-Befehle in Azure Cloud Shell ausführen.
Um das Docker-Image mithilfe der Docker CLI zu erstellen, benötigen Sie Docker. Öffnen Sie nach der Installation von Docker ein Terminalfenster, und wechseln Sie zum Beispielordner.
Hinweis
Die Schritte in diesem Abschnitt erfordern die Ausführung des Docker-Daemons. In einigen Installationen, z. B. auf Windows, müssen Sie Docker Desktop öffnen, der den Daemon startet, bevor Sie fortfahren können.
Vergewissern Sie sich, dass auf Docker zugegriffen werden kann, indem Sie den folgenden Befehl im Stammordner der Beispiel-App ausführen.
dockerWenn nach dem Ausführen dieses Befehls Hilfe für die Docker CLI angezeigt wird, kann auf Docker zugegriffen werden. Stellen Sie andernfalls sicher, dass Docker installiert ist und dass Ihre Shell Zugriff auf die Docker CLI hat.
Erstellen Sie das Docker-Image für die Python-Web-App mithilfe des Docker-Buildbefehls .
Die allgemeine Form des Befehls ist
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>".Wenn Sie sich im Stammordner des Projekts befinden, verwenden Sie den folgenden Befehl, um das Docker-Image zu erstellen. Der Punkt (".") am Ende des Befehls bezieht sich auf das aktuelle Verzeichnis, in dem der Befehl ausgeführt wird. Um eine Neuerstellung zu erzwingen, fügen Sie
--no-cachehinzu.Hinweis
Das Beispiel-Repository verwendet Python 3.8. Wenn Sie Ihre eigene Dockerfile-Datei erstellen, verwenden Sie eine unterstützte Python Version wie 3.12 oder 3.13. Siehe Python Versionsunterstützung für derzeit unterstützte Versionen.
#!/bin/bash docker build --rm --pull \ --file "Dockerfile" \ --label "com.microsoft.created-by=docker-cli" \ --tag "msdocspythoncontainerwebapp:latest" \ .Vergewissern Sie sich, dass das Image mithilfe des Befehls "Docker-Images " erfolgreich erstellt wurde.
docker imagesDer Befehl gibt eine Liste von Bildern nach REPOSITORY-Name, TAG und CREATED-Datum unter anderen Bildmerkmalen zurück.
An diesem Punkt haben Sie ein lokales Docker-Image namens "msdocspythoncontainerwebapp" mit dem Tag "latest". Tags helfen beim Definieren von Versionsdetails, beabsichtigter Verwendung, Stabilität und anderen relevanten Informationen. Weitere Informationen finden Sie unter Empfehlungen für das Taggen und die Versionsverwaltung von Containerimages.
Hinweis
Sie können auch Bilder anzeigen, die Sie aus VS Code erstellen oder die Docker CLI direkt mithilfe der Docker Desktop-Anwendung verwenden.
Einrichten von MongoDB
Ihre Python Web-App erfordert eine MongoDB-Datenbank und eine Sammlung mit dem Namen restaurants_reviews, um Daten zu speichern. In diesem Lernprogramm verwenden Sie sowohl eine lokale Installation von MongoDB als auch eine Azure Cosmos DB für MongoDB-Instanz zum Erstellen und Zugreifen auf die Datenbank und Sammlung.
Wichtig
Verwenden Sie keine MongoDB-Datenbank, die Sie in der Produktion verwenden. Speichern Sie in diesem Tutorial die MongoDB-Verbindungszeichenfolge für eine dieser MongoDB-Instanzen in einer Umgebungsvariablen. Jeder, der Ihren Container – z. B. mithilfe von docker inspect – prüfen kann, kann diese Verbindungszeichenfolge sehen.
Lokale MongoDB
Erstellen Sie eine lokale Instanz von MongoDB mithilfe des Azure CLI.
Installieren Sie MongoDB , wenn sie noch nicht installiert ist.
Um zu überprüfen, ob MongoDB installiert ist, verwenden Sie die MongoDB-Shell (Mongosh). Wenn die folgenden Befehle nicht funktionieren, müssen Sie möglicherweise mongosh explizit installieren oder Mongosh mit Ihrem MongoDB-Server verbinden.
Verwenden Sie den folgenden Befehl, um die MongoDB-Shell zu öffnen und die Version der MongoDB-Shell und des MongoDB-Servers abzurufen:
mongoshTipp
Um nur die auf Ihrem System installierte Version des MongoDB-Servers zurückzugeben, schließen Sie die MongoDB-Shell, und öffnen Sie sie erneut, und verwenden Sie den folgenden Befehl:
mongosh --quiet --exec 'db.version()'In einigen Setups können Sie den Mongo-Daemon auch direkt in Ihrer Bash-Shell aufrufen.
mongod --version
Bearbeiten Sie die Datei mongod.cfg im
\MongoDB\Server\8.0\binOrdner, und fügen Sie die lokale IP-Adresse Ihres Computers dembindIPSchlüssel hinzu.Hinweis
Der Pfad der Konfigurationsdatei variiert je nach Betriebssystem und MongoDB-Version. Suchen Sie unter macOS nach
/usr/local/etc/mongod.confoder/opt/homebrew/etc/mongod.conf. Unter Linux überprüfen Sie/etc/mongod.conf.Der
bindipSchlüssel in der MongoD-Konfigurationsdatei definiert die Hostnamen und IP-Adressen, die MongoDB für Clientverbindungen abhört. Fügen Sie die aktuelle IP Ihres lokalen Entwicklungscomputers hinzu. Die Python-Web-Beispiel-App, die lokal in einem Docker-Container ausgeführt wird, kommuniziert mit dieser Adresse mit dem Hostcomputer.Ein Teil der Konfigurationsdatei sollte z. B. wie folgt aussehen:
net: port: 27017 bindIp: 127.0.0.1,<local-ip-address>Speichern Sie Ihre Änderungen in dieser Konfigurationsdatei.
Wichtig
Sie benötigen Administratorrechte, um die Änderungen zu speichern, die Sie an dieser Konfigurationsdatei vornehmen.
Starten Sie MongoDB neu, um Änderungen an der Konfigurationsdatei zu übernehmen.
Öffnen Sie eine MongoDB-Shell, und führen Sie den folgenden Befehl aus, um den Datenbanknamen auf "restaurants_reviews" und den Sammlungsnamen auf "restaurants_reviews" festzulegen. Sie können auch eine Datenbank und Sammlung mit der VS Code MongoDB-Erweiterung oder einem beliebigen anderen MongoDB-fähigen Tool erstellen.
> help > use restaurants_reviews > db.restaurants_reviews.insertOne({}) > show dbs > exit
Nachdem Sie den vorherigen Schritt abgeschlossen haben, lautet die lokale MongoDB-Verbindungszeichenfolge "mongodb://127.0.0.1:27017/", der Datenbankname ist "restaurants_reviews", und der Sammlungsname lautet "restaurants_reviews".
Azure Cosmos DB for MongoDB
Erstellen Sie nun mithilfe des Azure CLI eine Azure Cosmos DB für die MongoDB-Instanz.
Hinweis
In Teil 4 dieser Lernprogrammreihe verwenden Sie die Azure Cosmos DB für MongoDB-Instanz, um die Web-App in Azure App Service auszuführen.
Ersetzen Sie vor dem Ausführen des folgenden Skripts den Speicherort, die Ressourcengruppe und den Azure Cosmos DB für MongoDB-Kontonamen durch die entsprechenden Werte (optional). Verwenden Sie dieselbe Ressourcengruppe für alle Azure Ressourcen, die Sie in diesem Lernprogramm erstellen, damit sie leichter gelöscht werden können, wenn Sie fertig sind.
Das Skript dauert ein paar Minuten, bis es ausgeführt wird.
#!/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"
Wenn das Skript abgeschlossen ist, kopieren Sie die primäre MongoDB-Verbindungszeichenfolge aus der Ausgabe des letzten Befehls in die Zwischenablage oder an einen anderen Speicherort.
{
"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"
},
...
]
}
Nachdem Sie den vorherigen Schritt abgeschlossen haben, verfügen Sie über eine Azure Cosmos DB für MongoDB-Verbindungszeichenfolge der Form mongodb://<server-name>:<password>@<server-name>.mongo.cosmos.azure.com:10255/?ssl=true&<other-parameters>, eine Datenbank mit dem Namen restaurants_reviews und eine Sammlung mit dem Namen restaurants_reviews.
Weitere Informationen zur Verwendung der Azure CLI zum Erstellen eines Cosmos DB für MongoDB-Kontos und zum Erstellen von Datenbanken und Sammlungen finden Sie unter Erstellen einer Datenbank und Sammlung für MongoDB für Azure Cosmos DB mit Azure CLI. Sie können auch PowerShell, die Erweiterung VS Code Azure Databases und das Azure-Portal verwenden.
Tipp
In der Erweiterung VS Code Azure Databases können Sie mit der rechten Maustaste auf den MongoDB-Server klicken und die Verbindungszeichenfolge abrufen.
Führen Sie das Image lokal in einem Container aus
Sie können nun den Docker-Container lokal ausführen, indem Sie entweder Ihre lokale MongoDB-Instanz oder Ihre Cosmos DB für MongoDB-Instanz verwenden. In diesem Abschnitt des Lernprogramms erfahren Sie, wie Sie entweder VS Code oder die Azure CLI verwenden, um das Image lokal auszuführen. Die Beispiel-App erwartet, dass die MongoDB-Verbindungsinformationen mithilfe von Umgebungsvariablen übergeben werden. Es gibt mehrere Methoden, um Umgebungsvariablen lokal an einen Container zu übergeben. Jede Methode hat Vor- und Nachteile in Bezug auf Sicherheit. Vermeiden Sie es, sensible Informationen in Code im Container einzuchecken oder dort zurückzulassen.
Hinweis
Wenn Sie die Web-App für Azure bereitstellen, ruft die Web-App Verbindungsinformationen aus Umgebungswerten ab, die als App Service-Konfigurationseinstellungen festgelegt sind. Es gelten keine Änderungen für das szenario für die lokale Entwicklungsumgebung.
MongoDB lokal
Verwenden Sie die folgenden Befehle mit Ihrer lokalen Instanz von MongoDB, um das Docker-Image lokal auszuführen.
Führen Sie die neueste Version des Images aus.
#!/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" \ --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:latestBestätigen Sie, dass der Container läuft. Führen Sie in einem anderen Konsolenfenster den Befehl "docker container ls " aus.
docker container lsIhr Container
msdocspythoncontainerwebapp:latestwird in der Liste angezeigt. Beachten Sie dieNAMESSpalte der Ausgabe und diePORTSSpalte. Verwenden Sie den Containernamen, um den Container zu beenden.Testen Sie die Web-App.
Gehen Sie zu
http://127.0.0.1:8000für Django und zuhttp://127.0.0.1:5000/für Flask.Deaktivieren Sie den Container.
docker container stop <container-name>
Azure Cosmos DB for MongoDB
Verwenden Sie die folgenden Befehle mit Ihrer Azure Cosmos DB für MongoDB-Instanz, um das Docker-Image in Azure auszuführen.
Führen Sie die neueste Version des Images aus.
#!/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:latestZu Demonstrationszwecken zeigt dieses Beispiel, dass vertrauliche Informationen übergeben werden. Sie können die Verbindungszeichenfolge Informationen anzeigen, indem Sie den Container mithilfe des Befehls docker container inspect überprüfen. Eine weitere Möglichkeit zum Behandeln geheimer Schlüssel besteht darin, die BuildKit-Funktionalität von Docker zu verwenden.
Öffnen Sie ein neues Konsolenfenster, und führen Sie den folgenden Befehl für Docker-Container ls aus, um zu bestätigen, dass der Container ausgeführt wird.
docker container lsIhr Container
msdocspythoncontainerwebapp:latestwird in der Liste angezeigt. Beachten Sie dieNAMESSpalte der Ausgabe und diePORTSSpalte. Verwenden Sie den Containernamen, um den Container zu beenden.Testen Sie die Web-App.
Gehen Sie zu
http://127.0.0.1:8000für Django und zuhttp://127.0.0.1:5000/für Flask.Deaktivieren Sie den Container.
docker container stop <container-name>
Sie können einen Container auch über ein Image starten und mit der Docker Desktop-Anwendung beenden.