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. Es wird empfohlen, Vor dem Starten dieses Artikels Teil 1 abzuschließen.
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 MongdoDB 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:
Navigieren 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. Das Docker-Image basiert auf 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.
Docker ist erforderlich, um das Docker-Image mithilfe der Docker CLI zu erstellen. Öffnen Sie nach der Installation von Docker ein Terminalfenster, und navigieren Sie zum Beispielordner.
Hinweis
Die Schritte in diesem Abschnitt erfordern die Ausführung des Docker-Daemons. In einigen Installationen, z. B. unter Windows, müssen Sie Docker Desktop öffnen, der den Daemon startet, bevor Sie fortfahren.
Vergewissern Sie sich, dass auf Docker zugegriffen werden kann, indem Sie den folgenden Befehl im Stammordner der Beispiel-App ausführen.
docker
Wenn 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-cache
hinzu.#!/bin/bash docker build --rm --pull \ --file "Dockerfile" \ --label "com.microsoft.create-by=docker-cli" \ --tag "msdocspythoncontainerwebapp:latest" \ .
Vergewissern Sie sich, dass das Image mithilfe des Befehls "Docker-Images " erfolgreich erstellt wurde.
docker images
Der 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
Images, die aus VS Code oder mithilfe der Docker CLI direkt erstellt wurden, können auch mit der Docker Desktop-Anwendung angezeigt werden.
Einrichten von MongoDB
Ihre Python-Web-App erfordert eine MongoDB-Datenbank mit dem Namen restaurants_reviews und eine Sammlung mit dem Namen restaurants_reviews zum Speichern von Daten erforderlich sind. 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. In diesem Tutorial speichern Sie die MongoDB-Verbindungszeichenfolge für eine dieser MongoDB-Instanzen in einer Umgebungsvariablen (die von jedem beobachtet werden kann, der Ihren Container untersuchen kann, z. B. mithilfe von docker inspect
).
Lokale MongoDB
Beginnen wir mit dem Erstellen einer lokalen Instanz von MongoDB mithilfe der Azure CLI.
Installieren Sie MongoDB (sofern sie noch nicht installiert ist).
Sie können die Installation von MongoDB mithilfe der MongoDB Shell (mongosh) überprüfen. 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:
mongosh
Tipp
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\bin
Ordner, und fügen Sie die lokale IP-Adresse Ihres Computers dembindIP
Schlüssel hinzu.Der
bindip
Schlü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
Jetzt erstellen wir auch eine Azure Cosmos DB für MongoDB-Instanz mithilfe der Azure CLI.
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). Es wird empfohlen, die gleiche Ressourcengruppe für alle azure-Ressourcen zu verwenden, die in diesem Lernprogramm erstellt wurden, 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 jetzt den Docker-Container lokal mit Ihrer lokalen MongoDB-Instanz oder Ihrer Cosmos DB für MongoDB-Instanz ausführen. In diesem Abschnitt des Lernprogramms lernen Sie, entweder VS Code oder azure CLI zum lokalen Ausführen des Images zu verwenden. Die Beispiel-App erwartet, dass die MongoDB-Verbindungsinformationen mit Umgebungsvariablen an sie übergeben werden. Es gibt verschiedene Möglichkeiten, Umgebungsvariablen lokal an Container zu übergeben. Jeder hat Vor- und Nachteile in Bezug auf Sicherheit. Sie sollten es vermeiden, sensible Informationen einzuchecken oder sensible Informationen im Code des Containers zu hinterlassen.
Hinweis
Wenn die Web-App in Azure bereitgestellt wird, ruft die Web-App Verbindungsinformationen aus Umgebungswerten ab, die als App Service-Konfigurationseinstellungen festgelegt sind, und es gelten keine Änderungen für das lokale Entwicklungsumgebungsszenario.
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" \ --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
Bestätigen Sie, dass der Container läuft. Führen Sie in einem anderen Konsolenfenster den Befehl "docker container ls " aus.
docker container ls
Siehe Ihren Container „msdocspythoncontainerwebapp:latest:latest“ in der Liste. Beachten Sie die
NAMES
Spalte der Ausgabe und diePORTS
Spalte. Verwenden Sie den Containernamen, um den Container zu beenden.Testen Sie die Web-App.
Gehe zu "http://127.0.0.1:8000" für Django und "http://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:latest
Das Übergeben vertraulicher Informationen wird nur zu Demonstrationszwecken angezeigt. Die Verbindungszeichenfolgendetails können angezeigt werden, indem der Container mit dem Befehl docker container inspect überprüft wird. Eine weitere Möglichkeit zum Behandeln geheimer Schlüssel besteht darin, die BuildKit-Funktionalität von Docker zu verwenden.
Öffnen Sie ein neues Konsolenfenster, führen Sie den folgenden Befehl für Docker-Container ls aus, um zu bestätigen, dass der Container ausgeführt wird.
docker container ls
Siehe Ihren Container „msdocspythoncontainerwebapp:latest:latest“ in der Liste. Beachten Sie die
NAMES
Spalte der Ausgabe und diePORTS
Spalte. Verwenden Sie den Containernamen, um den Container zu beenden.Testen Sie die Web-App.
Gehe zu "http://127.0.0.1:8000" für Django und "http://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.