Freigeben über


Übersicht über Python-Container-Apps in Azure

In diesem Artikel wird erläutert, wie Sie ein Python-Projekt wie eine Webanwendung verwenden und als Docker-Container in Azure bereitstellen. Es behandelt den allgemeinen Containerisierungsworkflow, Azure-Bereitstellungsoptionen für Container und Python-spezifische Containerkonfigurationen in Azure. Das Erstellen und Bereitstellen von Docker-Containern in Azure folgt einem Standardprozess für alle Sprachen, mit Python-spezifischen Konfigurationen in Dockerfile, requirements.txtund Einstellungen für Webframeworks wie Django, Flask und FastAPI.

Container-Workflow-Szenarien

Für die Entwicklung von Python-Containern werden einige typische Workflows für den Wechsel von Code zu Container in die folgende Tabelle erläutert.

Szenario BESCHREIBUNG Arbeitsablauf
Dev Erstellen Sie Python Docker-Images lokal in Ihrer Entwicklungsumgebung. Code: Klonen Sie Ihren App-Code lokal mithilfe von Git (mit installierter Docker).

Build: Verwenden Sie Docker CLI, VS Code (mit Erweiterungen), PyCharm (mit Docker-Plug-In). Im Abschnitt "Arbeiten mit Python Docker-Images und -Containern" beschrieben.

Test: Führen Sie den Container aus und testen Sie ihn lokal.

Push: Pushen Sie das Image an eine Containerregistrierung wie Azure Container Registry, Docker Hub oder private Registrierung.

Bereitstellen: Container aus der Container-Registry in einen Azure-Dienst bereitstellen.
Hybrid Erstellen Sie Docker-Images in Azure, initiieren Sie den Prozess jedoch aus Ihrer lokalen Umgebung. Code: Klonen Sie den Code lokal (nicht erforderlich, damit Docker installiert werden kann).

Build: Verwenden Sie VS Code (mit Remoteerweiterungen) oder die Azure CLI, um Builds in Azure auszulösen.

Push: Das erstellte Image in das Azure Container Registry hochladen.

Bereitstellen: Container aus der Container-Registry in einen Azure-Dienst bereitstellen.
Azurblau Verwenden Sie Azure Cloud Shell, um Container vollständig in der Cloud zu erstellen und bereitzustellen. Code: Klonen Sie das GitHub-Repository in Azure Cloud Shell.

Build: Verwenden Sie Azure CLI oder Docker CLI in Cloud Shell.

Push: Pushen Sie das Image an eine Registrierung wie Azure Container Registry, Docker Hub oder private Registrierung.

Bereitstellen: Container aus der Container-Registry in einen Azure-Dienst bereitstellen.

Das Endziel dieser Workflows besteht darin, dass ein Container in einer der Azure-Ressourcen ausgeführt wird, die Docker-Container unterstützen, wie im nächsten Abschnitt aufgeführt.

Eine Entwicklungsumgebung kann folgendes sein:

  • Ihre lokale Arbeitsstation mit Visual Studio Code oder PyCharm
  • Codespaces (eine Entwicklungsumgebung, die in der Cloud gehostet wird)
  • Visual Studio Dev Containers (ein Container als Entwicklungsumgebung)

Optionen für Bereitstellungscontainer in Azure

Python-Container-Apps werden in den folgenden Diensten unterstützt.

Dienstleistung BESCHREIBUNG
Web-App für Container Azure App Service ist eine vollständig verwaltete Hostingplattform für containerisierte Webanwendungen, einschließlich Websites und Web-APIs. Es unterstützt skalierbare Bereitstellungen und integriert nahtlos in CI/CD-Workflows mithilfe von Docker Hub, Azure Container Registry und GitHub. Dieser Dienst eignet sich ideal für Entwickler, die einen einfachen und effizienten Weg zum Bereitstellen von containerisierten Apps benötigen und gleichzeitig von den vollständigen Funktionen der Azure App Service-Plattform profitieren. Indem Sie Ihre Anwendung und alle ihre Abhängigkeiten in einen einzigen bereitstellungsfähigen Container packen, erhalten Sie sowohl Portabilität als auch Einfache Verwaltung – ohne Infrastruktur verwalten zu müssen.

Beispiel: Bereitstellen einer Flask- oder FastPI-Web-App in Azure App Service.
Azure-Container-Apps (ACA) Azure Container Apps (ACA) ist ein vollständig verwalteter serverloser Containerdienst, der von Kubernetes und Open-Source-Technologien wie Dapr, KEDA und Envoy unterstützt wird. Sein Design umfasst bewährte Methoden der Branche und ist für die Ausführung von allgemeinen Containern optimiert. ACA abstrahiert die Komplexität der Verwaltung einer Kubernetes-Infrastruktur – direkter Zugriff auf die Kubernetes-API ist nicht erforderlich oder wird unterstützt. Stattdessen bietet es Anwendungskonstrukte höherer Ebene wie Überarbeitungen, Skalierung, Zertifikate und Umgebungen, um Entwicklungs- und Bereitstellungsworkflows zu vereinfachen. Dieser Dienst eignet sich ideal für Entwicklungsteams, die containerisierte Microservices mit minimalem Betriebsaufwand erstellen und bereitstellen möchten, sodass sie sich auf Anwendungslogik statt auf die Infrastrukturverwaltung konzentrieren können.

Beispiel: Bereitstellen einer Flask- oder FastPI-Web-App in Azure-Container-Apps.
Azure-Containerinstanzen (ACI) Azure Container Instances (ACI) ist ein serverloses Angebot, das einen einzelnen Pod von Hyper-V isolierten Containern bei Bedarf bereitstellt. Die Abrechnung basiert auf dem tatsächlichen Ressourcenverbrauch und nicht auf der vorab zugeordneten Infrastruktur, wodurch sie für kurzlebige oder platzbare Workloads geeignet ist. Im Gegensatz zu anderen Containerdiensten enthält ACI keine integrierte Unterstützung für Konzepte wie Skalierung, Lastenausgleich oder TLS-Zertifikate. Stattdessen fungiert sie in der Regel als grundlegender Containerbaustein, der häufig in Azure-Dienste wie Azure Kubernetes Service (AKS) für die Orchestrierung integriert ist. ACI ist eine hervorragende, leichte Wahl, wenn die höherstufigen Abstraktionen und Funktionen von Azure Container Apps nicht benötigt werden

Beispiel: Erstellen Sie ein Container-Image für die Bereitstellung in Azure Container Instances. (Das Lernprogramm ist nicht Python-spezifisch, aber die gezeigten Konzepte gelten für alle Sprachen.)
Azure Kubernetes Service (AKS) Azure Kubernetes Service (AKS) ist eine vollständig verwaltete Kubernetes-Option in Azure, die Ihnen die vollständige Kontrolle über Ihre Kubernetes-Umgebung bietet. Er unterstützt direkten Zugriff auf die Kubernetes-API und kann alle Kubernetes-Standardworkloads ausführen. Der vollständige Cluster befindet sich in Ihrem Abonnement, wobei Sie die Kontrolle und Verantwortung für die Clusterkonfigurationen und -vorgänge haben. ACI eignet sich ideal für Teams, die eine vollständig verwaltete Containerlösung suchen, während AKS Ihnen die vollständige Kontrolle über den Kubernetes-Cluster bietet, sodass Sie Konfigurationen, Netzwerke, Skalierung und Vorgänge verwalten müssen. Azure übernimmt die Bereitstellung der Steuerungsebene und der Infrastruktur, aber der tägliche Betrieb und die Sicherheit des Clusters liegen innerhalb der Kontrolle Ihres Teams. Dieser Dienst eignet sich ideal für Teams, die die Flexibilität und Leistungsfähigkeit von Kubernetes mit dem zusätzlichen Vorteil der verwalteten Infrastruktur von Azure wünschen und gleichzeitig den vollständigen Besitz über die Clusterumgebung beibehalten.

Beispiel: Bereitstellen eines Azure Kubernetes-Dienstclusters mithilfe der Azure CLI.
Azure-Funktionen Azure Functions bietet eine ereignisgesteuerte, serverlose Funktionen-as-a-Service (FaaS)-Plattform, mit der Sie kleine Codeteile (Funktionen) als Reaktion auf Ereignisse ausführen können – ohne Infrastruktur zu verwalten. Azure Functions teilt viele Merkmale mit Azure Container-Apps hinsichtlich Skalierung und Integration mit Ereignissen, ist jedoch für kurzlebige Funktionen optimiert, die als Code oder Container bereitgestellt werden. al für Teams, die die Ausführung von Funktionen für Ereignisse auslösen möchten; Beispielsweise zum Binden an andere Datenquellen. Wie Azure-Container-Apps unterstützt Azure Functions die automatische Skalierung und Integration in Ereignisquellen (z. B. HTTP-Anforderungen, Nachrichtenwarteschlangen oder Blob-Speicherupdates). Dieser Dienst eignet sich ideal für Teams, die einfache, ereignisgesteuerte Workflows erstellen, z. B. Das Verarbeiten von Dateiuploads oder das Reagieren auf Datenbankänderungen, in Python oder anderen Sprachen.

Beispiel: Erstellen einer Funktion unter Linux mithilfe eines benutzerdefinierten Containers.

Einen detaillierteren Vergleich dieser Dienste finden Sie unter Vergleichen von Container-Apps mit anderen Azure-Containeroptionen.

Virtuelle Umgebungen und Container

Virtuelle Umgebungen in Python isolieren Projektabhängigkeiten von Python-Installationen auf Systemebene und sorgen für Konsistenz in Entwicklungsumgebungen. Eine virtuelle Umgebung enthält einen eigenen isolierten Python-Interpreter sowie die Bibliotheken und Skripts, die zum Ausführen des spezifischen Projektcodes in dieser Umgebung erforderlich sind. Abhängigkeiten für Python-Projekte werden über die requirements.txt Datei verwaltet. Durch angeben von Abhängigkeiten in einer requirements.txt Datei können Entwickler die genaue Umgebung reproduzieren, die für ihr Projekt erforderlich ist. Dieser Ansatz erleichtert einen reibungsloseren Übergang zu containerisierten Bereitstellungen wie Azure App Service, wobei die Konsistenz der Umgebung für eine zuverlässige Anwendungsleistung unerlässlich ist.

Tipp

In containerisierten Python-Projekten sind virtuelle Umgebungen in der Regel unnötig, da Docker-Container isolierte Umgebungen mit eigenen Python-Interpretern und Abhängigkeiten bereitstellen. Sie können jedoch virtuelle Umgebungen für die lokale Entwicklung oder Tests verwenden. Um Docker-Images schlanker zu halten, schließen Sie virtuelle Umgebungen mit einer Dockerignore-Datei aus, wodurch das Kopieren unnötiger Dateien in das Image verhindert wird.

Sie können sich Docker-Container als Funktionen vorstellen, die den virtuellen Python-Umgebungen ähneln – aber mit breiteren Vorteilen bei der Reproduzierbarkeit, Isolation und Portabilität. Im Gegensatz zu virtuellen Umgebungen können Docker-Container konsistent auf verschiedenen Betriebssystemen und Umgebungen ausgeführt werden, solange eine Containerlaufzeit verfügbar ist.

Ein Docker-Container enthält Ihren Python-Projektcode zusammen mit allem, was er ausführen muss, z. B. Abhängigkeiten, Umgebungseinstellungen und Systembibliotheken. Um einen Container zu erstellen, erstellen Sie zunächst ein Docker-Image aus Ihrem Projektcode und ihrer Konfiguration, und starten sie dann einen Container, bei dem es sich um eine runnbare Instanz dieses Images handelt.

Bei Containerisierung von Python-Projekten werden die Schlüsseldateien in der folgenden Tabelle beschrieben:

Projektdatei BESCHREIBUNG
requirements.txt Diese Datei enthält die endgültige Liste der Python-Abhängigkeiten, die für Ihre Anwendung erforderlich sind. Docker verwendet diese Liste während des Imagebuildprozesses, um alle erforderlichen Pakete zu installieren. Dadurch wird die Konsistenz zwischen Entwicklungs- und Bereitstellungsumgebungen sichergestellt.
Dockerfile Diese Datei enthält Anweisungen zum Erstellen Ihres Python Docker-Images, einschließlich der Basisimageauswahl, der Abhängigkeitsinstallation, dem Kopieren von Code und containerstartbefehlen. Sie definiert die vollständige Ausführungsumgebung für Ihre Anwendung. Weitere Informationen finden Sie im Abschnitt Dockerfile-Anweisungen für Python.
.dockerignore Diese Datei gibt die Dateien und Verzeichnisse an, die beim Kopieren von Inhalten in das Docker-Image mit dem COPY Befehl in der Dockerfile-Datei ausgeschlossen werden sollen. Diese Datei verwendet Muster wie gitignore zum Definieren von Ausschlüssen. Die Dockerignore-Datei unterstützt Ausschlussmuster ähnlich wie gitignore-Dateien . Weitere Informationen finden Sie in der Dockerignore-Datei.

Das Ausschließen von Dateien trägt zur Leistungssteigerung bei, sollte aber auch verwendet werden, um zu vermeiden, dass dem Bild vertrauliche Informationen hinzugefügt werden, in denen es geprüft werden kann. Beispielsweise sollte die Dockerignore-Datei Zeilen enthalten, um env und Venv (virtuelle Umgebungen) zu ignorieren.

Containereinstellungen für Webframeworks

Webframeworks binden in der Regel an Standardports (z. B. 5000 für Flask, 8000 für FastAPI). Wenn Sie Container für Azure-Dienste bereitstellen, z. B. Azure-Containerinstanzen, Azure Kubernetes Service (AKS) oder App Service für Container, ist es wichtig, dass Sie den Überwachungsport des Containers explizit verfügbar machen und konfigurieren, um ein ordnungsgemäßes Routing des eingehenden Datenverkehrs sicherzustellen. Durch das Konfigurieren des richtigen Ports wird sichergestellt, dass die Infrastruktur von Azure Anforderungen an den richtigen Endpunkt innerhalb Ihres Containers weiterleiten kann.

Webframework Hafen
Django 8.000
Kolben 5000 oder 5002
FastAPI (uvicorn) 8000 oder 80

In der folgenden Tabelle wird gezeigt, wie Sie den Port für verschiedene Azure-Containerlösungen festlegen.

Azure-Containerlösung So legen Sie den Web-App-Port fest
Web App für Container Standardmäßig geht App Service davon aus, dass Ihr benutzerdefinierter Container entweder port 80 oder Port 8080 überwacht. Wenn Ihr Container an einem anderen Port lauscht, legen Sie die App-Einstellung WEBSITES_PORT in Ihrer App Service-App fest. Weitere Informationen finden Sie unter Konfigurieren eines benutzerdefinierten Containers für Azure App Service.
Azure Container Apps Mit Azure-Container-Apps können Sie Ihre Container-App für das öffentliche Web, für Ihr virtuelles Netzwerk oder für andere Container-Apps innerhalb derselben Umgebung verfügbar machen, indem Sie den Eingang aktivieren. Legen Sie den Ingress targetPort auf den Port fest, den Ihr Container bei eingehenden Anfragen abhört. Der Anwendungsausgangsendpunkt wird immer auf Port 443 verfügbar gemacht. Weitere Informationen finden Sie unter Einrichten von HTTPS- oder TCP-Eingang in Azure-Container-Apps.
Azure-Containerinstanzen, Azure Kubernetes Sie definieren den Port, auf dem Ihre App während der Container- oder Poderstellung lauscht. Ihr Containerimage sollte ein Webframework, einen Anwendungsserver (z. B. gunicorn, uvicorn) und optional einen Webserver (z. B. nginx) enthalten. In komplexeren Szenarien können Sie Die Verantwortlichkeiten auf zwei Container aufteilen– eine für den Anwendungsserver und eine für den Webserver. In diesem Fall macht der Webservercontainer ports 80 oder 443 für externen Datenverkehr verfügbar.

Python Dockerfile

Eine Dockerfile ist eine Textdatei, die Anweisungen zum Erstellen eines Docker-Images für eine Python-Anwendung enthält. Die erste Anweisung gibt in der Regel das Basisimage an, von dem aus begonnen werden soll. In den nachfolgenden Anweisungen werden dann Aktionen wie das Installieren der erforderlichen Software, das Kopieren von Anwendungsdateien und das Konfigurieren der Umgebung zum Erstellen eines runnablen Images beschrieben. Die folgende Tabelle enthält Python-spezifische Beispiele für häufig verwendete Dockerfile-Anweisungen.

Anleitung Zweck Beispiel
VON Legt das Basisbild für nachfolgende Anweisungen fest. FROM python:3.8-slim
BELICHTEN Teilt Docker mit, dass der Container zur Laufzeit auf einen angegebenen Port lauscht. EXPOSE 5000
KOPIEREN Kopiert Dateien oder Verzeichnisse aus der angegebenen Quelle und fügt sie dem Dateisystem des Containers am angegebenen Zielpfad hinzu. COPY . /app
LAUFEN Führt einen Befehl im Docker-Image aus. Ziehen Sie z. B. Abhängigkeiten ein. Der Befehl wird einmal zur Erstellungszeit ausgeführt. RUN python -m pip install -r requirements.txt
CMD Der Befehl stellt die Standardeinstellung für die Ausführung eines Containers bereit. Es kann nur eine CMD-Anweisung vorhanden sein. CMD ["gunicorn", "--bind", "0.0.0.0:5000", "wsgi:app"]

Der Docker-Buildbefehl erstellt Docker-Images aus einer Dockerfile-Datei und einem Kontext. Der Kontext eines Builds ist der Satz von Dateien, die sich im angegebenen Pfad oder in der angegebenen URL befinden. In der Regel erstellen Sie ein Image aus dem Stammverzeichnis Ihres Python-Projekts, und der Pfad für den Buildbefehl lautet ".", wie im folgenden Beispiel gezeigt.

docker build --rm --pull  --file "Dockerfile"  --tag "mywebapp:latest"  .

Der Buildprozess kann auf alle Dateien im Kontext verweisen. Ihr Build kann z. B. eine COPY-Anweisung verwenden, um im Kontext auf eine Datei zu verweisen. Hier ist ein Beispiel für eine Dockerfile-Datei für ein Python-Projekt mit dem Flask-Framework :

FROM python:3.8-slim

EXPOSE 5000

# Keeps Python from generating .pyc files in the container.
ENV PYTHONDONTWRITEBYTECODE=1

# Turns off buffering for easier container logging
ENV PYTHONUNBUFFERED=1

# Install pip requirements.
COPY requirements.txt .
RUN python -m pip install -r requirements.txt

WORKDIR /app
COPY . /app

# Creates a non-root user with an explicit UID and adds permission to access the /app folder.
RUN adduser -u 5678 --disabled-password --gecos "" appuser && chown -R appuser /app
USER appuser

# Provides defaults for an executing container; can be overridden with Docker CLI.
CMD ["gunicorn", "--bind", "0.0.0.0:5000", "wsgi:app"]

Sie können eine Dockerfile manuell erstellen oder automatisch mit VS Code und der Docker-Erweiterung erstellen. Weitere Informationen finden Sie unter Generieren von Docker-Dateien.

Der Docker-Buildbefehl ist Teil der Docker CLI. Wenn Sie IDEs wie VS Code oder PyCharm verwenden, rufen die UI-Befehle zum Arbeiten mit Docker-Images den Buildbefehl für Sie auf und automatisieren die Angabe von Optionen.

Arbeiten mit Python Docker-Images und -Containern

VS-Code und PyCharm

Integrierte Entwicklungsumgebungen (IDEs) wie Visual Studio Code (VS Code) und PyCharm rationalisieren die Python-Containerentwicklung, indem Docker-Aufgaben in Ihren Workflow integriert werden. Mit Erweiterungen oder Plug-Ins vereinfachen diese IDEs das Erstellen von Docker-Images, das Ausführen von Containern und die Bereitstellung in Azure-Diensten wie App Service oder Containerinstanzen. Hier sind einige der Dinge, die Sie mit VS Code und PyCharm tun können.

  • Laden Sie Docker-Images herunter, und erstellen Sie sie.

    • Erstellen Sie Bilder in Ihrer Entwicklungsumgebung.
    • Erstellen Sie Docker-Images in Azure, ohne dass Docker in der Entwicklungsumgebung installiert ist. (Verwenden Sie für PyCharm die Azure CLI, um Bilder in Azure zu erstellen.)
  • Erstellen und Ausführen von Docker-Containern aus einem vorhandenen Image, einem pulled Image oder direkt aus einer Dockerfile-Datei.

  • Führen Sie Multicontaineranwendungen mit Docker Compose aus.

  • Verbinden und arbeiten Sie mit Containerregistrierungen wie Docker Hub, GitLab, JetBrains Space, Docker V2 und anderen selbst gehosteten Docker-Registrierungen.

  • (nur VS-Code) Fügen Sie eine Dockerfile- und Docker-Erstellungsdateien hinzu, die auf Ihr Python-Projekt zugeschnitten sind.

Führen Sie die folgenden Schritte aus, um VS Code und PyCharm zum Ausführen von Docker-Containern in Ihrer Entwicklungsumgebung einzurichten.

Falls noch nicht geschehen, installieren Sie Azure Tools für VS Code.

Anweisungen Bildschirmfoto
Schritt 1: Verwenden Sie UMSCHALT + ALT + A , um die Azure-Erweiterung zu öffnen und zu bestätigen, dass Sie mit Azure verbunden sind.

Sie können auch das Azure-Symbol auf der Vs Code-Erweiterungsleiste auswählen.

Wenn Sie nicht angemeldet sind, wählen Sie "Bei Azure anmelden " aus, und folgen Sie den Anweisungen.

Wenn Sie Probleme beim Zugriff auf Ihr Azure-Abonnement haben, liegt dies möglicherweise daran, dass Sie sich hinter einem Proxy befinden. Informationen zum Beheben von Verbindungsproblemen finden Sie unter "Netzwerkverbindungen" in Visual Studio Code.
Screenshot, der zeigt, wie Azure Tools nach der Anmeldung aussehen. Screenshot, der zeigt, wie Azure Tools aussieht, wenn Sie nicht angemeldet sind.
Schritt 2: Verwenden Sie STRG + UMSCHALT + X , um Erweiterungen zu öffnen, nach der Docker-Erweiterung zu suchen und die Erweiterung zu installieren.

Sie können auch auf der Erweiterungsleiste von VS Code das Symbol "Erweiterungen" auswählen.
Screenshot, der zeigt, wie Die Docker-Erweiterung zu VS Code hinzugefügt wird.
Schritt 3: Wählen Sie das Docker-Symbol in der Erweiterungsleiste aus, erweitern Sie Bilder, und klicken Sie mit der rechten Maustaste auf ein Docker-Image, das als Container ausgeführt wird. Screenshot der Verwendung der Docker-Erweiterung in VS Code zum Ausführen eines Containers aus einem Docker-Image.
Schritt 4: Überwachen der Docker-Ausführungsausgabe im Terminalfenster . Screenshot eines Beispiels zum Ausführen eines Containers in VS Code.

Azure CLI und Docker CLI

Sie können auch mit Python Docker-Images und -Containern mit der Azure CLI und Docker CLI arbeiten. Sowohl VS Code als auch PyCharm verfügen über Terminals, auf denen Sie diese CLIs ausführen können.

Verwenden Sie eine CLI, wenn Sie eine feinere Kontrolle über Build- und Ausführungsargumente und für die Automatisierung wünschen. Der folgende Befehl zeigt z. B. die Verwendung des Azure CLI az acr-Builds zum Angeben des Docker-Imagenamens.

az acr build --registry <registry-name> \
  --resource-group <resource-group> \
  --target pythoncontainerwebapp:latest .

Betrachten Sie als weiteres Beispiel den folgenden Befehl, der zeigt, wie Sie den Befehl "Docker CLI-Ausführung " verwenden. Das Beispiel zeigt, wie Sie einen Docker-Container ausführen, der außerhalb des Containers mit einer MongoDB-Instanz in Ihrer Entwicklungsumgebung kommuniziert. Die verschiedenen Werte zum Abschließen des Befehls sind einfacher zu automatisieren, wenn sie in einer Befehlszeile angegeben sind.

docker run --rm -it \
  --publish <port>:<port> --publish 27017:27017 \
  --add-host mongoservice:<your-server-IP-address> \
  --env CONNECTION_STRING=mongodb://mongoservice:27017 \
  --env DB_NAME=<database-name> \
  --env COLLECTION_NAME=<collection-name> \
  containermongo:latest  

Weitere Informationen zu diesem Szenario finden Sie unter Erstellen und Testen einer containerisierten Python-Web-App lokal.

Umgebungsvariablen in Containern

Python-Projekte verwenden häufig Umgebungsvariablen, um Konfigurationsdaten an den Anwendungscode zu übergeben. Dieser Ansatz ermöglicht eine größere Flexibilität in verschiedenen Umgebungen. Beispielsweise können Datenbankverbindungsdetails in Umgebungsvariablen gespeichert werden, sodass sie problemlos zwischen Entwicklungs-, Test- und Produktionsdatenbanken wechseln können, ohne den Code zu ändern. Diese Trennung der Konfiguration von Code fördert sauberere Bereitstellungen und verbessert die Sicherheit und Wartung.

Pakete wie python-dotenv werden häufig verwendet, um Schlüsselwertpaare aus einer env-Datei zu lesen und als Umgebungsvariablen festzulegen. Eine env-Datei ist nützlich, wenn sie in einer virtuellen Umgebung ausgeführt wird, aber beim Arbeiten mit Containern nicht empfohlen wird. Kopieren Sie die env-Datei nicht in das Docker-Image, insbesondere, wenn sie vertrauliche Informationen enthält und der Container öffentlich gemacht wird. Verwenden Sie die Dockerignore-Datei , um Dateien auszuschließen, die in das Docker-Image kopiert werden. Weitere Informationen finden Sie im Abschnitt "Virtuelle Umgebungen und Container " in diesem Artikel.

Sie können Umgebungsvariablen auf verschiedene Arten an Container übergeben:

  1. In der Dockerfile-Datei als ENV-Anweisungen definiert.
  2. Wird als --build-arg Argumente mit dem Docker build Befehl übergeben.
  3. Übergeben als --secret Argumente mit dem Docker build Befehl und BuildKit Backend.
  4. Übergeben als --env oder --env-file Argumente mit dem Docker run Befehl.

Die ersten beiden Optionen haben den gleichen Nachteil wie bei env-Dateien , nämlich dass Sie potenziell vertrauliche Informationen in ein Docker-Image hartcodieren. Sie können ein Docker-Image überprüfen und die Umgebungsvariablen anzeigen, z. B. mit der Docker-Imageprüfung des Befehls.

Die dritte Option mit BuildKit ermöglicht es Ihnen, geheime Informationen zu übergeben, die in der Dockerfile-Datei zum Erstellen von Docker-Images auf sichere Weise verwendet werden, die nicht im endgültigen Image gespeichert werden.

Die vierte Option zum Übergeben von Umgebungsvariablen mit dem Docker-Ausführungsbefehl bedeutet, dass das Docker-Image nicht die Variablen enthält. Die Variablen sind jedoch weiterhin sichtbar, um die Containerinstanz zu prüfen (z. B. mit Docker-Containerprüfung). Diese Option kann akzeptabel sein, wenn der Zugriff auf die Containerinstanz gesteuert oder in Test- oder Entwicklungsszenarien erfolgt.

Hier ist ein Beispiel für das Übergeben von Umgebungsvariablen mit dem Befehl 'docker run' über die CLI und dem Verwenden des Arguments --env.

# PORT=8000 for Django and 5000 for Flask
export PORT=<port-number>

docker run --rm -it \
  --publish $PORT:$PORT \
  --env CONNECTION_STRING=<connection-info> \
  --env DB_NAME=<database-name> \
  <dockerimagename:tag>

In VS Code (Docker-Erweiterung) oder PyCharm (Docker-Plug-In) vereinfachen ui-Tools die Verwaltung von Docker-Images und -Containern, indem Standard-Docker CLI-Befehle (z. B. Docker Build, Docker-Ausführung) im Hintergrund ausgeführt werden.

Schließlich unterscheidet sich die Angabe von Umgebungsvariablen beim Bereitstellen eines Containers in Azure von der Verwendung von Umgebungsvariablen in Ihrer Entwicklungsumgebung. Beispiel:

  • Für Web App für Container konfigurieren Sie anwendungseinstellungen während der Konfiguration des App-Diensts. Diese Einstellungen sind für Ihren App-Code als Umgebungsvariablen verfügbar, und der Zugriff darauf erfolgt mit dem Standardmuster os.environ. Sie können Werte nach der ersten Bereitstellung bei Bedarf ändern. Weitere Informationen finden Sie unter Access-App-Einstellungen als Umgebungsvariablen.

  • Für Azure-Container-Apps konfigurieren Sie Umgebungsvariablen während der Erstkonfiguration der Container-App. Durch nachfolgende Änderung von Umgebungsvariablen wird eine Überarbeitung des Containers erstellt. Darüber hinaus können Sie mit Azure Container-Apps geheime Schlüssel auf Anwendungsebene definieren und dann in Umgebungsvariablen referenzieren. Weitere Informationen finden Sie unter Verwalten von Geheimnissen in Azure Container Apps.

Als weitere Option können Sie Service Connector verwenden, um Azure-Computedienste mit anderen Sicherungsdiensten zu verbinden. Dieser Dienst konfiguriert die Netzwerkeinstellungen und Verbindungsinformationen (z. B. das Generieren von Umgebungsvariablen) zwischen Rechendiensten und Ziel-Backend-Diensten im Verwaltungsbereich.

Anzeigen von Containerprotokollen

Sehen Sie sich die Protokolle der Containerinstanz an, um daraufhin diagnostische Nachrichten aus dem Code zu erkennen und Probleme im Code Ihres Containers zu beheben. Im Folgenden finden Sie verschiedene Möglichkeiten zum Anzeigen von Protokollen beim Ausführen eines Containers in Ihrer Entwicklungsumgebung:

  • Wenn Sie einen Container mit VS Code oder PyCharm ausführen, wie im Abschnitt VS Code und PyCharm gezeigt, können Sie Protokolle in Terminalfenstern sehen, die geöffnet werden, wenn Docker ausgeführt wird.

  • Wenn Sie den Befehl "Docker CLI run " mit dem interaktiven Flag -itverwenden, wird die Ausgabe nach dem Befehl angezeigt.

  • In Docker Desktop können Sie auch Protokolle für einen ausgeführten Container anzeigen.

Wenn Sie einen Container in Azure bereitstellen, haben Sie auch Zugriff auf Containerprotokolle. Hier sind mehrere Azure-Dienste und wie auf Containerprotokolle im Azure-Portal zugegriffen wird.

Azure-Dienst So greifen Sie auf Protokolle im Azure-Portal zu
Web App für Container Wechseln Sie zur Ressource "Diagnose" und lösen Sie Probleme , um Protokolle anzuzeigen. Die Diagnose ist eine intelligente und interaktive Oberfläche, die Ihnen bei der Problembehandlung Ihrer App ohne erforderliche Konfiguration hilft. Um Protokolle in Echtzeit anzuzeigen, wechseln Sie zum Überwachung - Protokolldatenstrom. Ausführlichere Protokollabfragen und -konfigurationen finden Sie in den anderen Ressourcen unter "Überwachung".
Azure Container Apps – ein Dienst für containerbasierte Anwendungen Wechseln Sie zur Umgebungsressource Diagnose und Problembehebung, um Umgebungsprobleme zu beheben. Häufiger möchten Sie Containerprotokolle anzeigen. Wählen Sie in der Containerressource unterAnwendungsrevisionsverwaltung - die Revision aus, und dort können Sie System- und Konsolenprotokolle anzeigen. Ausführlichere Protokollabfragen und -konfigurationen finden Sie in den Ressourcen unter "Überwachung".
Azure-Containerinstanzen Gehen Sie zur Ressource Containers und wählen Sie Logs.

Für diese Dienste sind hier die Azure CLI-Befehle für den Zugriff auf Protokolle aufgeführt.

Azure-Dienst Azure CLI-Befehl für den Zugriff auf Protokolle
Web App für Container az webapp log
Azure Container Apps – ein Dienst für containerbasierte Anwendungen az containerapps-Protokolle
Azure-Containerinstanzen az-Containerprotokolle

Es gibt auch Unterstützung für das Anzeigen von Protokollen in VS Code. Sie müssen Azure Tools für VS-Code installiert haben. Nachfolgend finden Sie ein Beispiel für das Anzeigen von Protokollen von Web-Apps für Container (App Service) in VS Code.

Screenshot, der zeigt, wie Protokolle in VS Code für Web Apps für Container angezeigt werden.

Nächste Schritte