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.
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
python-sample-vscode-django-tutorial, das Ergebnis des Django Tutorial
python-sample-vscode-flask-tutorial, das Ergebnis des Flask Tutorial
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
-
Öffnen Sie den Projektordner in VS Code.
-
Öffnen Sie die Befehlspalette (⇧⌘P (Windows, Linux Ctrl+Shift+P)) und wählen Sie Container: Docker-Dateien zum Arbeitsbereich hinzufügen...

-
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.
-
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.pygemäß dem Tutorial Erste Schritte mit Python erstellt haben, wählen Sie diese aus.Django: Wählen Sie
manage.py(Stammordner) oderunterordnername/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. -
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.
-
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 imDockerfileüberprüfen, um den Befehl Compose Up erfolgreich auszuführen. Compose wird typischerweise verwendet, wenn mehrere Container gleichzeitig ausgeführt werden. -
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,.vscodeund__pycache__. -
Wenn Sie Docker Compose verwenden, eine
docker-compose.yml- und einedocker-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 Siepip freeze > requirements.txtim Terminal ausführen. Dadurch wird Ihre aktuellerequirements.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
-
Öffnen Sie die
Dockerfile. -
Geben Sie unter der
EXPOSE-Anweisung ⌃Space (Windows, Linux Ctrl+Space) ein, um IntelliSense auszulösen, und scrollen Sie zuENV.
-
Drücken Sie Tab oder Enter, um die Anweisung abzuschließen, legen Sie dann den
keyauf den Namen der Variablen und denvaluefest.
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 DockerfileCMD ["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 Weisefrom flask import Flask app = Flask(__name__) # Flask instance named appUm 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
appheiß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.pylag und eine Flask-Instanzvariable namensmyapphatte, 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
-
Navigieren Sie zu der Datei, die den Startcode Ihrer App enthält, und legen Sie einen Haltepunkt fest.
-
Navigieren Sie zu Ausführen und Debuggen und wählen Sie entsprechend Container: Python - Allgemein, Container: Python - Django oder Container: Python - Flask aus.

-
Starten Sie das Debugging mit der Taste F5.
- Das Container-Image wird erstellt.
- Der Container wird ausgeführt.
- Der Python-Debugger stoppt am Haltepunkt.
-
Schrittweise über diese Zeile einmal.
-
Wenn Sie bereit sind, drücken Sie Weiter.
Die Container Tools-Erweiterung startet Ihren Browser auf einem zufällig zugeordneten Port

Tipp: Um Ihre Docker-Build-Einstellungen zu ändern, z. B. das Image-Tag zu ändern, navigieren Sie zu
.vscode -> tasks.jsonunter dem AttributdockerBuildin der Aufgabedocker-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
-
Navigieren Sie zum Container Explorer.
-
Klicken Sie im Tab Container mit der rechten Maustaste auf Ihren Container und wählen Sie Protokolle anzeigen.

-
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.
-
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.
-
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.

-
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.

-
Wählen Sie das Azure-Abonnement aus, das Sie verwenden möchten.
-
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.
-
Geben Sie das Basis-Betriebssystem an, Linux oder Windows. Diese Wahl muss mit der Dockerfile übereinstimmen.

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.
-
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.

-
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_HOSTSin der Dateisettings.pyaufgeführt sein. -
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.
-
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. -
Nehmen Sie eine kleine Änderung am Anwendungscode vor, die auf einer der Seiten sichtbar ist, und speichern Sie die Datei.
-
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.
-
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.

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.

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
- Erfahren Sie mehr über die Verwendung von Docker Compose
- Debuggen mit Docker Compose
- Passen Sie an, wie Sie Python-Apps in einem Container debuggen
- Passen Sie Ihre Docker-Build- und Ausführungsaufgaben an
- Pushen Sie Ihr Django-Image in eine Azure Container Registry
- Bereitstellen in Azure Container Apps