ist jetzt verfügbar! Lesen Sie über die neuen Funktionen und Fehlerbehebungen vom November.

Python in einem Container

In diesem Tutorial lernen Sie, wie Sie

  • Erstellen einer Dockerfile-Datei, die einen einfachen Python-Container beschreibt.
  • Erstellen, Ausführen und Überprüfen der Funktionalität einer Django, Flask oder einer allgemeinen Python-App.
  • Debuggen der App, die in einem Container ausgeführt wird.

Voraussetzungen

  • Docker installieren auf Ihrem Computer und es zum Systempfad hinzufügen.

  • Unter Linux sollten Sie auch die Docker CLI für das Nicht-Root-Benutzerkonto aktivieren, das zum Ausführen von VS Code verwendet wird.

  • Die Container Tools-Erweiterung. Um die Erweiterung zu installieren, öffnen Sie die Ansicht "Erweiterungen" (⇧⌘X (Windows, Linux Ctrl+Shift+X)), suchen Sie nach container tools, um die Ergebnisse zu filtern, und wählen Sie die Container Tools-Erweiterung von Microsoft aus.

    Select Container Tools extension

Ein Python-Projekt erstellen

Wenn Sie noch kein Python-Projekt haben, folgen Sie dem Tutorial Erste Schritte mit Python.

Hinweis: Wenn Sie eine vollständige Django- oder Flask-Web-App in einen Container packen möchten, können Sie mit einem der folgenden Beispiele beginnen

Hinweis: Stellen Sie für dieses Tutorial sicher, dass Sie den tutorial-Branch der Beispiel-Repositorys verwenden.

Nachdem Sie überprüft haben, ob Ihre App ordnungsgemäß funktioniert, können Sie Ihre Anwendung nun in einen Container packen.

Docker-Dateien zum Projekt hinzufügen

  1. Öffnen Sie den Projektordner in VS Code.

  2. Öffnen Sie die Befehlspalette (⇧⌘P (Windows, Linux Ctrl+Shift+P)) und wählen Sie Container: Docker-Dateien zum Arbeitsbereich hinzufügen...

    Add Dockerfile to a Python project

  3. Wenn Sie nach dem App-Typ gefragt werden, wählen Sie Python: Django, Python: Flask oder Python: Allgemein als App-Typ aus. Für dieses Tutorial konzentrieren wir uns auf den Fall Python: Allgemein, werden aber auch Hinweise für Django und Flask einfügen.

  4. Geben Sie den relativen Pfad zum Einstiegspunkt der App ein. Dies schließt den Arbeitsbereichsordner aus, von dem aus Sie starten. Wenn Sie eine Python-App mit hello.py gemäß dem Tutorial Erste Schritte mit Python erstellt haben, wählen Sie diese aus.

    Django: Wählen Sie manage.py (Stammordner) oder unterordnername/manage.py. Informationen finden Sie in der offiziellen Django-Dokumentation.

    Flask: Wählen Sie den Pfad zu dem Ort, an dem Sie Ihre Flask-Instanz erstellen. Informationen finden Sie in der offiziellen Flask-Dokumentation.

    Tipp: Sie können auch den Pfad zu einem Ordnernamen eingeben, solange dieser Ordner eine __main__.py-Datei enthält.

  5. Wählen Sie die Portnummer. Wir empfehlen die Auswahl von Port 1024 oder höher, um Sicherheitsbedenken bei der Ausführung als Root-Benutzer zu minimieren. Jeder ungenutzte Port ist möglich, aber Django und Flask verwenden standardmäßige Standardports.

    Django: Der Standardport ist 8000.

    Flask: Der Standardport ist 5000.

  6. Wenn Sie gefragt werden, ob Docker Compose eingeschlossen werden soll, wählen Sie Nein, wenn Sie keine Docker Compose-Datei wünschen. Wenn Sie Ja wählen, müssen Sie den Pfad zu Ihrer wsgi.py-Datei im Dockerfile überprüfen, um den Befehl Compose Up erfolgreich auszuführen. Compose wird typischerweise verwendet, wenn mehrere Container gleichzeitig ausgeführt werden.

  7. Mit all diesen Informationen erstellt die Container Tools-Erweiterung die folgenden Dateien

    • Eine Dockerfile. Weitere Informationen zur IntelliSense in dieser Datei finden Sie in der Übersicht.

    • Eine .dockerignore-Datei, um die Image-Größe zu reduzieren, indem Dateien und Ordner ausgeschlossen werden, die nicht benötigt werden, wie z. B. .git, .vscode und __pycache__.

    • Wenn Sie Docker Compose verwenden, eine docker-compose.yml- und eine docker-compose.debug.yml-Datei.

    • Wenn noch keine vorhanden ist, eine requirements.txt-Datei zum Erfassen aller App-Abhängigkeiten.

    Wichtiger Hinweis: Um unser Setup zu verwenden, müssen das Python-Framework (Django/Flask) und Gunicorn enthalten sein in der requirements.txt-Datei. Wenn die virtuelle Umgebung/Hostmaschine diese Voraussetzungen bereits installiert hat und identisch mit der Container-Umgebung sein soll, stellen Sie sicher, dass die App-Abhängigkeiten übernommen werden, indem Sie pip freeze > requirements.txt im Terminal ausführen. Dadurch wird Ihre aktuelle requirements.txt-Datei überschrieben.

(Optional) Eine Umgebungsvariable zum Image hinzufügen

Dieser Schritt ist nicht erforderlich, wird aber aufgenommen, um Ihnen zu helfen zu verstehen, wie Sie Umgebungsvariablen hinzufügen, die in der Umgebung des Containers gesetzt werden müssen.

Die Container Tools-Erweiterung hilft Ihnen beim Erstellen von Dockerfiles, indem sie IntelliSense für automatische Vervollständigungen und kontextbezogene Hilfe verwendet. Um diese Funktion in Aktion zu sehen

  1. Öffnen Sie die Dockerfile.

  2. Geben Sie unter der EXPOSE-Anweisung ⌃Space (Windows, Linux Ctrl+Space) ein, um IntelliSense auszulösen, und scrollen Sie zu ENV.

    Adding environment variable to Dockerfile

  3. Drücken Sie Tab oder Enter, um die Anweisung abzuschließen, legen Sie dann den key auf den Namen der Variablen und den value fest.

Weitere Informationen zum Festlegen und Verwenden von Umgebungsvariablen in der Dockerfile finden Sie in der ENV-Anweisung und im Abschnitt Environment replacement in der Docker-Dokumentation.

Gunicorn-Anpassungen für Django- und Flask-Apps

Um Python-Webentwicklern einen großartigen Startpunkt zu bieten, haben wir uns entschieden, Gunicorn als Standard-Webserver zu verwenden. Da es in der Standard-Dockerfile referenziert wird, ist es als Abhängigkeit in der requirements.txt-Datei enthalten. Wenn Sie es nicht in requirements.txt sehen, führen Sie pip install gunicorn aus und dann pip freeze > requirements.txt, um die requirements.txt-Datei neu zu generieren.

  • Django: Um Gunicorn zu verwenden, muss es an einen anwendbaren Aufruf (was der Anwendungsserver zur Kommunikation mit Ihrem Code verwendet) als Einstiegspunkt gebunden werden. Dieser Aufruf wird in der wsgi.py-Datei einer Django-Anwendung deklariert. Um diese Bindung zu erreichen, besagt die letzte Zeile in der Dockerfile

    CMD ["gunicorn", "--bind", "0.0.0.0:8000", "{workspace_folder_name}.wsgi"]
    

    Wenn Ihr Projekt nicht der Standardprojektstruktur von Django folgt (d. h. ein Arbeitsbereichsordner und eine wsgi.py-Datei >innerhalb eines Unterordners, der denselben Namen wie der Arbeitsbereich hat), müssen Sie den Gunicorn-Einstiegspunkt in der Dockerfile überschreiben, um die korrekte wsgi.py-Datei zu finden.

    Wenn Ihre wsgi.py-Datei im Stammordner liegt, ist das letzte Argument im obigen Befehl "wsgi". Innerhalb von Unterordnern wäre das Argument "unterordner1_name.unterordner2_name.wsgi".

  • Flask: Um Gunicorn zu verwenden, muss es an einen anwendbaren Aufruf (was der Anwendungsserver zur Kommunikation mit Ihrem Code verwendet) als Einstiegspunkt gebunden werden. Dieser Aufruf entspricht dem Dateispeicherort und dem Variablennamen Ihrer erstellten Flask-Instanz. Gemäß der offiziellen Flask-Dokumentation erstellen Benutzer im Allgemeinen eine Flask-Instanz im Hauptmodul oder in der __init__.py-Datei ihres Pakets auf diese Weise

    from flask import Flask
    app = Flask(__name__) # Flask instance named app
    

    Um diese Bindung zu erreichen, besagt die letzte Zeile in der Dockerfile

    CMD ["gunicorn", "--bind", "0.0.0.0:5000", "{subfolder}.{module_file}:app"]
    

    Während des Befehls Container: Docker-Dateien zum Arbeitsbereich hinzufügen... konfigurieren Sie den Pfad zur Flask-Instanz, jedoch geht die Container Tools-Erweiterung davon aus, dass Ihre Flask-Instanzvariable app heißt. Wenn dies nicht der Fall ist, müssen Sie den Variablennamen in der Dockerfile ändern.

    Wenn Ihr Hauptmodul im Stammordner als Datei namens main.py lag und eine Flask-Instanzvariable namens myapp hatte, ist das letzte Argument im obigen Befehl "main:myapp". Innerhalb von Unterordnern wäre das Argument "unterordner1_name.unterordner2_name.main:myapp".

Erstellen, Ausführen und Debuggen des Containers

Der Befehl Container: Docker-Dateien zum Arbeitsbereich hinzufügen... erstellt automatisch eine Docker-Startkonfiguration, um Ihren Container im Debug-Modus zu erstellen und auszuführen. Zum Debuggen Ihrer Python-App im Container

  1. Navigieren Sie zu der Datei, die den Startcode Ihrer App enthält, und legen Sie einen Haltepunkt fest.

  2. Navigieren Sie zu Ausführen und Debuggen und wählen Sie entsprechend Container: Python - Allgemein, Container: Python - Django oder Container: Python - Flask aus.

    Selected container debug configuration

  3. Starten Sie das Debugging mit der Taste F5.

    • Das Container-Image wird erstellt.
    • Der Container wird ausgeführt.
    • Der Python-Debugger stoppt am Haltepunkt.
  4. Schrittweise über diese Zeile einmal.

  5. Wenn Sie bereit sind, drücken Sie Weiter.

Die Container Tools-Erweiterung startet Ihren Browser auf einem zufällig zugeordneten Port

Django website launches

Tipp: Um Ihre Docker-Build-Einstellungen zu ändern, z. B. das Image-Tag zu ändern, navigieren Sie zu .vscode -> tasks.json unter dem Attribut dockerBuild in der Aufgabe docker-build. Verwenden Sie IntelliSense in der Datei (⌃Space (Windows, Linux Ctrl+Space)), um alle anderen gültigen Direktiven anzuzeigen.

Verwenden Sie den Container Explorer

Der Container Explorer bietet eine interaktive Erfahrung zur Untersuchung und Verwaltung von Container-Assets wie Containern, Images usw. Um ein Beispiel zu sehen

  1. Navigieren Sie zum Container Explorer.

  2. Klicken Sie im Tab Container mit der rechten Maustaste auf Ihren Container und wählen Sie Protokolle anzeigen.

    Viewing the logs of a container

  3. Die Ausgabe wird im Terminal angezeigt.

Image in Azure erstellen

Sie können den Befehl Azure Container Registry: Image in Azure erstellen verwenden, um ein Image zu erstellen, das Sie dann in Azure App Service oder Azure Container Apps bereitstellen können.

  1. Installieren Sie die Azure Resources-Erweiterung. Öffnen Sie die Befehlspalette (⇧⌘P (Windows, Linux Ctrl+Shift+P)) und suchen Sie nach dem Befehl Azure: Anmelden. Wenn Sie kein Azure-Konto haben, können Sie sich für eine kostenlose Testversion anmelden.

  2. Es gibt zwei Möglichkeiten, den Befehl "In Azure erstellen" aufzurufen. Sie können mit der rechten Maustaste auf die Dockerfile klicken und Image in Azure erstellen wählen. Sie können auch die Befehlspalette (⇧⌘P (Windows, Linux Ctrl+Shift+P)) verwenden und nach dem Befehl Azure Container Registry: Image in Azure erstellen suchen.

    Invoke the command Build Image in Azure

  3. Wählen Sie den Namen und das Tag für das erstellte Image aus. Sie verwenden dies, um es in der Container-Registry zu identifizieren.

    Choose the name and tag for the built image.

  4. Wählen Sie das Azure-Abonnement aus, das Sie verwenden möchten.

  5. Wählen Sie eine vorhandene Azure Container Registry aus oder erstellen Sie eine neue. Wenn Sie eine neue erstellen, werden Sie aufgefordert, den Namen, die Ressourcengruppe, den Standort und eine Option für die Preisgestaltung anzugeben, z. B. Basic, Standard oder Premium. Die Kosten dieser Optionen können Sie unter Preise - Container Registry nachlesen.

  6. Geben Sie das Basis-Betriebssystem an, Linux oder Windows. Diese Wahl muss mit der Dockerfile übereinstimmen.

    Choose the base OS for the built image

Der Prozess der Image-Erstellung kann einige Minuten dauern. Sie können den Fortschritt im Terminal verfolgen. Wenn ein Fehler auftritt (Fehler: Kontext konnte nicht heruntergeladen werden.), versuchen Sie, die Option Aktualisieren für die Container-Registry zu verwenden und fordern Sie dann eine weitere Erstellung an. Löschen Sie manuell das alte Image, bevor Sie es neu erstellen.

Bereitstellen in Azure App Service oder Azure Container Apps

Sobald das Container-Image erstellt ist, sollte es mit dem von Ihnen angegebenen Tag in der Container-Registry erscheinen. Jetzt, da es erstellt ist, können Sie es in Azure App Service oder Azure Container Apps bereitstellen. Die Azure App Service-Erweiterung wird für die Bereitstellung in Azure App Service empfohlen, und die Azure Container Apps-Erweiterung ist für die Bereitstellung in Azure Container Apps erforderlich. Sie können beide erhalten, wenn Sie das Azure Tools-Erweiterungspaket installieren, das ein Paket von Tools für eine Vielzahl von Azure-Entwicklungsszenarien enthält.

  1. Klicken Sie mit der rechten Maustaste auf das Image-Tag und wählen Sie Image in Azure App Service bereitstellen oder Image in Azure Container Apps bereitstellen.

    Deploy image to Azure App Service

  2. Geben Sie den Namen der Website an. Dieser muss eindeutig sein und muss für Django-Apps auch als gültiger Hostname in der Liste ALLOWED_HOSTS in der Datei settings.py aufgeführt sein.

  3. Geben Sie eine Ressourcengruppe, einen Standort und einen App Service-Plan an. Wenn Sie gerade erst anfangen, können Sie den kostenlosen Plan wählen.

  4. Das Image wird bereitgestellt; der Prozess kann einige Minuten dauern. Nach der Bereitstellung erscheint eine Benachrichtigung mit einer Schaltfläche, über die Sie auf die Website zugreifen können. Sie können auch die Adresse der Website verwenden, {appname}.azurewebsites.net, wobei {appname} der Name ist, den Sie bei der Erstellung angegeben haben. Wenn es zunächst nicht funktioniert, versuchen Sie es in wenigen Minuten erneut. Es ist nicht ungewöhnlich, dass die ersten paar Versuche zu einem Timeout führen oder einen Fehler zurückgeben. Das bedeutet nur, dass der App Service noch nicht bereit ist, Anfragen zu empfangen.

  5. Nehmen Sie eine kleine Änderung am Anwendungscode vor, die auf einer der Seiten sichtbar ist, und speichern Sie die Datei.

  6. Verwenden Sie das Azure-Symbol, um die Ansicht Ressourcen zu öffnen, und erweitern Sie den Knoten für Ihr Abonnement, um den App Service zu finden, den Sie im vorherigen Schritt bereitgestellt haben.

  7. Klicken Sie mit der rechten Maustaste auf den App Service-Knoten und sehen Sie sich die verfügbaren Optionen an. Wählen Sie In Web-App bereitstellen und geben Sie dann Ihren App-Ordner an, um ihn bereitzustellen.

    Deploy to Web App

    Wenn Sie darauf hingewiesen werden, dass dies die vorherige Bereitstellung überschreiben wird, wählen Sie Bereitstellen, um zu bestätigen.

    Dies kann einige Minuten dauern. Sie können den Fortschritt im Terminalfenster überwachen. Wenn es abgeschlossen ist, wird eine Schaltfläche mit Zugriff auf die Website angezeigt.

    Browse website button

    Verwenden Sie die Schaltfläche und überprüfen Sie, ob Ihre Änderung auf der Website reflektiert wird.

Herzlichen Glückwunsch, Sie haben Python in VS Code verwendet, um eine Website zu erstellen und bereitzustellen, die in der Cloud gehostet und im Internet live ist!

Ressourcen freigeben

Löschen Sie im Azure-Portal die Ressourcengruppe, um alle Ressourcen freizugeben, die Sie während dieser Übung erstellt haben.

Nächste Schritte

Sie sind fertig! Da Ihr Container nun bereit ist, möchten Sie vielleicht

© . This site is unofficial and not affiliated with Microsoft.