Lokales Erstellen und Ausführen einer containerisierten Python-Web-App mit MongoDB

Dieser Artikel ist Teil eines Lernprogramms zum Containerisieren und Bereitstellen einer containerisierten Python-Web-App für Azure-App Service. Mit App Service können Sie containerisierte Web-Apps ausführen und über die Funktionen für kontinuierliche Integration/kontinuierliche Bereitstellung (CI/CD) mit Docker Hub, Azure Container Registry und Visual Studio Team Services bereitstellen. In diesem Teil des Lernprogramms erfahren Sie, wie Sie die containerisierte Python-Web-App lokal erstellen und ausführen. Dieser Schritt ist optional und ist nicht erforderlich, um die Beispiel-App in Azure bereitzustellen.

Das lokale Ausführen eines Docker-Images in Ihrer Entwicklungsumgebung erfordert ein Setup über die Bereitstellung in Azure hinaus. Stellen Sie sich diese Investition als Investition vor, die zukünftige Entwicklungszyklen vereinfachen kann, insbesondere, wenn Sie über Beispiel-Apps hinausgehen und mit der Erstellung eigener Web-Apps beginnen. Um die Beispiel-Apps für Django und Flask bereitzustellen, können Sie diesen Schritt überspringen und zum nächsten Schritt in diesem Lernprogramm wechseln. Sie können nach der Bereitstellung in Azure immer zurückkehren und diese Schritte durcharbeiten.

Das folgende Dienstdiagramm hebt die in diesem Artikel behandelten Komponenten hervor.

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

1. Klonen oder Herunterladen der Beispiel-App

Klonen Sie das Repository:

# 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

Navigieren Sie anschließend in diesen Ordner:

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

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

2. Erstellen eines Docker-Images

Wenn Sie eine der Framework-Beispiel-Apps verwenden, die für Django und Flask verfügbar sind, können Sie loslegen. Wenn Sie mit Ihrer eigenen Beispiel-App arbeiten, schauen Sie sich an, wie die Beispiel-Apps eingerichtet sind, insbesondere die Dockerfile im Stammverzeichnis.

Diese Anweisungen erfordern Visual Studio Code und die Docker-Erweiterung. Wechseln Sie zum Beispielordner, den Sie geklont oder heruntergeladen haben, und öffnen Sie VS Code mit dem Befehl code ..

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.

Anweisungen Screenshot
Öffnen Sie die Docker-Erweiterung.

Wenn die Docker-Erweiterung einen Fehler "Fehler beim Herstellen einer Verbindung" meldet, stellen Sie sicher, dass Docker installiert und ausgeführt wird. Wenn Sie zum ersten Mal mit Docker arbeiten, verfügen Sie wahrscheinlich nicht über Container, Images oder verbundene Registrierungen.
A screenshot showing how to open the Docker extension in Visual Studio Code.
Erstellen des Images.
  • Klicken Sie im Projekt-Explorer mit den Projektdateien mit der rechten Maustaste auf die Dockerfile-Datei , und wählen Sie "Image erstellen" aus.

  • Alternativ können Sie die Befehlspalette (F1 oder STRG+UMSCHALT+P) verwenden und "Docker Images: Build Images" eingeben, um den Befehl aufzurufen.

Weitere Informationen zur Dockerfile-Syntax finden Sie in der Dockerfile-Referenz.
A screenshot showing how to build the Docker image in Visual Studio Code.
Bestätigen Sie, dass das Image erstellt wurde.
  • Wechseln Sie zum ABSCHNITT IMAGES der Docker-Erweiterung.

  • Suchen Sie nach kürzlich erstellten Bildern. Der Name des Containerimages lautet "msdocspythoncontainerwebapp", das in der DATEI .vscode/tasks.json festgelegt ist.

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

An diesem Punkt haben Sie ein Image lokal erstellt. Das von Ihnen erstellte Bild hat den Namen "msdocspythoncontainerwebapp" und das Tag "latest". Tags sind eine Möglichkeit, Versionsinformationen, beabsichtigte Verwendung, Stabilität oder andere Informationen zu definieren. Weitere Informationen finden Sie unter Empfehlungen für das Taggen und die Versionsverwaltung von Containerimages.

Images, die aus VS Code oder aus der direkten Verwendung der Docker CLI erstellt wurden, können auch mit der Docker Desktop-Anwendung angezeigt werden.

3. Einrichten von MongoDB

Für dieses Lernprogramm benötigen Sie eine MongoDB-Datenbank mit dem Namen restaurants_reviews und eine Sammlung mit dem Namen restaurants_reviews. Die Schritte in diesem Abschnitt zeigen Ihnen, wie Sie eine lokale Installation von MongoDB oder Azure Cosmos DB für MongoDB zum Erstellen und Zugreifen auf die Datenbank und Sammlung verwenden.

Wichtig

Verwenden Sie keine MongoDB-Datenbank, die Sie in der Produktion verwenden. In diesem Lernprogramm speichern Sie die MongoDB-Verbindungszeichenfolge in einer Umgebungsvariable. Dies macht es von jedem, der in der Lage ist, Ihren Container (z. B. die Verwendung docker inspect) zu prüfen.

Schritt 1: Installieren Sie MongoDB , wenn sie noch nicht vorhanden ist.

Sie können die Installation von MongoDB mithilfe der MongoDB Shell (mongosh) überprüfen.

  • Der folgende Befehl gibt die Shell ein und gibt Ihnen die Version des mongosh- und mongoDB-Servers, der auf Ihrem System installiert ist:

    mongosh
    
  • Mit dem folgenden Befehl erhalten Sie nur die Version des MongoDB-Servers, der auf Ihrem System installiert ist:

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

Wenn diese Befehle nicht funktionieren, müssen Sie möglicherweise mongosh explizit installieren oder Mongosh mit Ihrem MongoDB-Server verbinden.

Eine Alternative in einigen Installationen besteht darin, den Mongo-Daemon direkt aufzurufen.

mongod --version

Schritt 2: Bearbeiten Sie die Datei mongod.cfg, um die IP-Adresse Ihres Computers hinzuzufügen.

Die Mongod-Konfigurationsdatei verfügt über einen bindIp Schlüssel, der Hostnamen und IP-Adressen definiert, die MongoDB auf Clientverbindungen lauscht. Fügen Sie die aktuelle IP Ihres lokalen Entwicklungscomputers hinzu. Die lokal in einem Docker-Container ausgeführte Beispiel-App 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>

Starten Sie MongoDB neu, um Änderungen an der Konfigurationsdatei zu übernehmen.

Schritt 3: Erstellen einer Datenbank und Sammlung in der lokalen MongoDB-Datenbank.

Legen Sie den Datenbanknamen auf "restaurants_reviews" und den Sammlungsnamen auf "restaurants_reviews" fest. Sie können eine Datenbank und Sammlung mit der VS Code MongoDB-Erweiterung, der MongoDB-Shell (Mongosh) oder einem beliebigen anderen MondoDB-fähigen Tool erstellen.

Für die MongoDB-Shell sind hier Beispielbefehle zum Erstellen der Datenbank und Sammlung aufgeführt:

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

An diesem Punkt ist Ihre lokale MongoDB-Verbindungszeichenfolge "mongodb://127.0.0.1:27017/", der Datenbankname ist "restaurants_reviews", und der Sammlungsname ist "restaurants_reviews".

4. Lokales Ausführen des Images in einem Container

Mit Informationen zum Herstellen einer Verbindung mit einer MongoDB können Sie den Container lokal ausführen. Die Beispiel-App erwartet, dass MongoDB-Verbindungsinformationen in Umgebungsvariablen übergeben werden. Es gibt verschiedene Möglichkeiten, Umgebungsvariablen abzurufen, die lokal an Container übergeben werden. Jeder hat Vor- und Nachteile in Bezug auf Sicherheit. Sie sollten das Einchecken vertraulicher Informationen oder das Verlassen vertraulicher Informationen im Code im Container vermeiden.

Hinweis

Wenn sie 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 szenario für die lokale Entwicklungsumgebung.

Anweisungen Screenshot
Im Vscode-Ordner der Beispiel-App definiert die Datei settings.json, was passiert, wenn Sie die Docker-Erweiterung verwenden und im Kontextmenü eines Tags "Ausführen" oder "Interaktiv ausführen" auswählen. Die Datei settings.json enthält zwei Vorlagen für die (MongoDB local) einzelnen Und (MongoDB Azure) Szenarien.

Wenn Sie eine lokale MongoDB-Datenbank verwenden:
  • Ersetzen Sie beide Instanzen durch <YOUR_IP_ADDRESS> Ihre IP-Adresse.

  • Ersetzen Sie beide Instanzen <CONNECTION_STRING> durch die Verbindungszeichenfolge für Ihre MongoDB-Datenbank.

Wenn Sie eine Azure Cosmos DB für MongoDB-Datenbank verwenden:
  • Ersetzen Sie beide Instanzen von <CONNECTION_STRING> Azure Cosmos DB für mongoDB-Verbindungszeichenfolge.
Legen Sie die docker.dockerPath von den Vorlagen verwendete Konfigurationseinstellung fest. Öffnen Sie zum Festlegen docker.dockerPathdie VS-Codebefehlspalette (STRG+UMSCHALT+P), geben Sie "Einstellungen: Arbeitsbereich öffnen Einstellungen" ein, und geben Sie dann "docker.dockerPath" in das Sucheinstellungsfeld ein. Geben Sie "docker" (ohne anführungszeichen) für den Wert der Einstellung ein.

Hinweis

Sowohl der Datenbankname als auch der Sammlungsname werden als angenommen restaurants_reviews.

A screenshot showing the settings.json file Visual Studio Code.
Führen Sie das Bild aus.
  • Suchen Sie im Abschnitt IMAGES der Docker-Erweiterung das integrierte Image.

  • Erweitern Sie das Bild, um das neueste Tag zu finden, klicken Sie mit der rechten Maustaste, und wählen Sie "Interaktiv ausführen" aus.

  • Sie werden aufgefordert, die für Ihr Szenario geeignete Aufgabe auszuwählen, entweder "Interactive run configuration (MongoDB local)" oder "Interactive run configuration (MongoDB Azure)".

Bei interaktiver Ausführung werden alle Druckanweisungen im Code angezeigt, die für das Debuggen nützlich sein können. Sie können auch "Ausführen" auswählen, das nicht interaktiv ist und die Standardeingabe nicht geöffnet bleibt.

Wichtig

Dieser Schritt schlägt fehl, wenn das Standardterminalprofil auf die Eingabeaufforderung (Windows) festgelegt ist. Um das Standardprofil zu ändern, öffnen Sie die VS-Codebefehlspalette (STRG+UMSCHALT+P), geben Sie "Terminal: Standardprofil auswählen" ein, und wählen Sie dann ein anderes Profil aus dem Dropdownmenü aus, z. B. Git Bash oder PowerShell.

A screenshot showing how to run a Docker container in Visual Studio Code.
Vergewissern Sie sich, dass der Container ausgeführt wird.
  • Suchen Sie im Containerabschnitt der Docker-Erweiterung den Container.

  • Erweitern Sie den Knoten "Einzelne Container ", und vergewissern Sie sich, dass "msdocspythoncontainerwebapp" ausgeführt wird. Es sollte ein grünes Dreieckssymbol neben dem Containernamen angezeigt werden, wenn es ausgeführt wird.

A screenshot showing how to confirm a Docker container is running in Visual Studio Code.
Testen Sie die Web-App, indem Sie mit der rechten Maustaste auf den Containernamen klicken und im Browser öffnen auswählen.

Der Browser wird in Ihrem Standardbrowser als "http://127.0.0.1:8000" für Django oder "http://127.0.0.1:5000/" für Flask.
A screenshot showing how to browse the endpoint of a Docker container in Visual Studio Code.
Beenden Sie den Container .
  • Suchen Sie im Abschnitt CONTAINER der Docker-Erweiterung den ausgeführten Container.

  • Klicken Sie mit der rechten Maustaste auf den Container, und wählen Sie "Beenden" aus.

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

Tipp

Sie können auch den Container ausführen, der eine Ausführungs- oder Debugkonfiguration auswählt. Die Docker-Erweiterungsaufgaben in tasks.json werden aufgerufen, wenn Sie ausführen oder debuggen. Die aufgerufene Aufgabe hängt davon ab, welche Startkonfiguration Sie auswählen. Geben Sie für die Aufgabe "Docker: Python (MongoDB local)" IHRE-IP-ADRESSE> an<. Geben Sie für die Aufgabe "Docker: Python (MongoDB Azure)" CONNECTION-STRING> an<.

Sie können einen Container auch über ein Image starten und mit der Docker Desktop-Anwendung beenden.

Nächster Schritt