Bereitstellen einer Flask- oder FastAPI-Webanwendung in Azure Container Apps
In diesem Lernprogramm erfahren Sie, wie Sie ein Python-Flask- oder FastAPI- Web-App containerisieren und in Azure Container Apps bereitstellen. Azure Container Apps verwendet Docker Containertechnologie, um integrierte Images und benutzerdefinierte Images zu hosten. Weitere Informationen zur Verwendung von Containern in Azure finden Sie unter Vergleichen von Azure-Containeroptionen.
In diesem Tutorial verwenden Sie die Docker CLI und die Azure CLI, um ein Docker-Image zu erstellen und es in den Azure Container Apps zu deployen. Sie können auch mit Visual Studio Code und der Azure Tools Extension für die Bereitstellung verwenden.
Voraussetzungen
Um die Schritte dieses Tutorials abzuschließen, benötigen Sie Folgendes:
Ein Azure-Konto, bei dem Sie eine Web-App in Azure Container Apps bereitstellen können. (Ein Azure Container Registry und Protokollanalyse-Arbeitsbereich werden für Sie während des Prozesses erstellt.)
Azure CLI, Dockerund die Docker CLI sind in Ihrer lokalen Umgebung installiert.
Beispielcode abrufen
Rufen Sie in Ihrer Umgebung den Code ab.
Hinzufügen von Dockerfile- und .dockerignore-Dateien
Fügen Sie einen Dockerfile hinzu, um Docker anzuweisen, wie das Image erstellt werden soll. Der Dockerfile gibt die Verwendung von Gunicorn an, einem Webserver auf Produktionsebene, der Anforderungen an die Frameworks Flask und FastAPI weiterleitet. Die ENTRYPOINT- und CMD-Befehle weisen Gunicorn an, Anfragen für das App-Objekt zu verarbeiten.
# syntax=docker/dockerfile:1
FROM python:3.11
WORKDIR /code
COPY requirements.txt .
RUN pip3 install -r requirements.txt
COPY . .
EXPOSE 50505
ENTRYPOINT ["gunicorn", "app:app"]
50505
wird für den Containerport (intern) in diesem Beispiel verwendet, aber Sie können jeden kostenlosen Port verwenden.
Überprüfen Sie die requirements.txt Datei, um sicherzustellen, dass sie gunicorn
enthält.
Flask==2.2.2
gunicorn
Werkzeug==2.2.2
Konfiguration von Gunicorn
Gunicorn kann mit einer gunicorn.conf.py Datei konfiguriert werden. Wenn sich die Datei gunicorn.conf.py im selben Verzeichnis befindet, in dem gunicorn
ausgeführt wird, müssen Sie ihren Speicherort nicht in dem ENTRYPOINT
oder CMD
-Anweisung in der Dockerfile angeben. Weitere Informationen zur Angabe der Konfigurationsdatei finden Sie unter Gunicorn-Einstellungen.
In diesem Tutorial wird GUnicorn mithilfe der vorgeschlagenen Konfigurationsdatei so konfiguriert, dass die Anzahl der Mitarbeiter basierend auf der Anzahl der verfügbaren CPU-Kerne erhöht wird. Weitere Informationen zu gunicorn.conf.py Dateieinstellungen finden Sie unter Gunicorn-Konfiguration.
# Gunicorn configuration file
import multiprocessing
max_requests = 1000
max_requests_jitter = 50
log_file = "-"
bind = "0.0.0.0:50505"
workers = (multiprocessing.cpu_count() * 2) + 1
threads = workers
timeout = 120
Fügen Sie eine .dockerignore Datei hinzu, um unnötige Dateien aus dem Image auszuschließen.
.git*
**/*.pyc
.venv/
Lokales Erstellen und Ausführen des Images
Erstellen Sie das Image lokal.
Führen Sie das Image lokal in einem Docker-Container aus.
docker run --detach --publish 5000:50505 flask-demo
Öffnen Sie die http://localhost:5000
-URL in Ihrem Browser, um die lokal ausgeführte Web-App anzuzeigen.
Die --detach
Option führt den Container im Hintergrund aus. Die Option --publish
ordnet den Containerport einem Port auf dem Host zu. Der (externe) Host-Port steht an erster Stelle des Paares und der (interne) Container-Port an zweiter Stelle. Weitere Informationen finden Sie in der Referenz zur Docker-Ausführung.
Bereitstellen von Web-App in Azure
Um das Docker-Image in Azure Container Apps bereitzustellen, verwenden Sie den Befehl az containerapp up. (Die folgenden Befehle werden für die Bash-Shell angezeigt. Ändern Sie das Fortsetzungszeichen (\
) entsprechend, wie es für andere Shells geeignet ist.
az containerapp up \
--resource-group web-flask-aca-rg --name web-aca-app \
--ingress external --target-port 50505 --source .
Nach Abschluss der Bereitstellung verfügen Sie über eine Ressourcengruppe mit den folgenden Ressourcen darin:
- Eine Azure-Containerregistrierung
- Eine Container Apps-Umgebung
- Eine Container App, die das Web-App-Image ausführt
- Ein Log Analytics-Arbeitsbereich
Die URL für die bereitgestellte App befindet sich in der Ausgabe des Befehls az containerapp up
. Öffnen Sie die URL in Ihrem Browser, um die Web-App anzuzeigen, die in Azure ausgeführt wird. Die Form der URL wird wie die folgenden https://web-aca-app.<generated-text>.<location-info>.azurecontainerapps.io
aussehen, wobei die <generated-text>
und <location-info>
in Bezug auf Ihre Bereitstellung einzigartig sind.
Aktualisierungen vornehmen und erneut bereitstellen
Nachdem Sie Codeupdates vorgenommen haben, können Sie den vorherigen az containerapp up
Befehl erneut ausführen, wodurch das Image neu erstellt und erneut in Azure-Container-Apps bereitgestellt wird. Das erneute Ausführen des Befehls berücksichtigt, dass die Ressourcengruppe und die App bereits vorhanden sind, und aktualisiert nur die Container-App.
In komplexeren Updateszenarien können Sie die Befehle az acr build und az containerapp update zusammen verwenden, um die Container-App zu aktualisieren.
Bereinigung
Alle in diesem Lernprogramm erstellten Azure-Ressourcen befinden sich in derselben Ressourcengruppe. Durch das Entfernen der Ressourcengruppe werden alle Ressourcen in der Ressourcengruppe entfernt, und es ist die schnellste Möglichkeit, alle azure-Ressourcen zu entfernen, die für Ihre App verwendet werden.
Um Ressourcen zu entfernen, verwenden Sie den Befehl az group delete.
Sie können die Gruppe auch im Azure Portal, in Visual Studio Code und in der Azure Tools Extensionentfernen.
Nächste Schritte
Weitere Informationen finden Sie in den folgenden Ressourcen: