Bereitstellen einer Flask- oder FastAPI-Web-App in Azure-Container-Apps
In diesem Lernprogramm erfahren Sie, wie Sie eine Python Flask - oder FastAPI-Web-App containerisieren und in Azure-Container-Apps bereitstellen. Azure Container-Apps verwenden 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 Lernprogramm verwenden Sie die Docker CLI und die Azure CLI , um ein Docker-Image zu erstellen und in Azure-Container-Apps bereitzustellen. Sie können auch mit Visual Studio Code und der Azure Tools-Erweiterung bereitstellen.
Voraussetzungen
Um die Schritte dieses Tutorials abzuschließen, benötigen Sie Folgendes:
Ein Azure-Konto, in dem Sie eine Web-App für Azure-Container-Apps bereitstellen können. (Ein Azure Container Registry and Log Analytics Workspace werden für Sie im Prozess erstellt.)
Azure CLI, Docker und die Docker CLI, die in Ihrer lokalen Umgebung installiert ist.
Beispielcode herunterladen
Rufen Sie in Ihrer lokalen Umgebung den Code ab.
Hinzufügen von Dockerfile- und Dockerignore-Dateien
Fügen Sie eine Dockerfile-Datei hinzu, um Docker anzuweisen, wie das Image erstellt wird. Die Dockerfile-Datei gibt die Verwendung von Gunicorn an, einen Webserver auf Produktionsebene, der Webanforderungen an die Flask- und FastAPI-Frameworks weiterleitet. Die BEFEHLE ENTRYPOINT und CMD weisen Gunicorn an, Anforderungen 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, Sie können jedoch jeden kostenlosen Port verwenden.
Überprüfen Sie die Datei requirements.txt , um sicherzustellen, dass sie enthält gunicorn
.
Flask==2.2.2
gunicorn
Werkzeug==2.2.2
Fügen Sie eine Dockerignore-Datei hinzu, um unnötige Dateien aus dem Image auszuschließen.
.git*
**/*.pyc
.venv/
Konfigurieren von gunicorn
Gunicorn kann mit einer gunicorn.conf.py Datei konfiguriert werden. Wenn sich die gunicorn.conf.py Datei im selben Verzeichnis befindet, in dem gunicorn
sie ausgeführt wird, müssen Sie den Speicherort in der ENTRYPOINT
Dockerfile-Datei oder CMD
anweisung nicht angeben. Weitere Informationen zum Angeben der Konfigurationsdatei finden Sie unter Gunicorn-Einstellungen.
In diesem Lernprogramm konfiguriert die vorgeschlagene Konfigurationsdatei GUnicorn, um die Anzahl der Mitarbeiter basierend auf der Anzahl der verfügbaren CPU-Kerne zu erhöhen. 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
Erstellen und lokales 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 --publish
Option ordnet den Containerport einem Port auf dem Host zu. Der Hostport (extern) befindet sich zuerst im Paar, und der Containerport (intern) ist zweiter. Weitere Informationen finden Sie in der Referenz zur Docker-Ausführung.
Bereitstellen von Web-App in Azure
Verwenden Sie den Befehl az containerapp up , um das Docker-Image in Azure-Container-Apps bereitzustellen. (Die folgenden Befehle werden für die Bash-Shell angezeigt. Ändern Sie das Fortsetzungszeichen (\
) entsprechend anderen Shells.)
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 Container Registry-Instanz
- 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 az containerapp up
Befehls. Öffnen Sie die URL in Ihrem Browser, um die Web-App anzuzeigen, die in Azure ausgeführt wird. Die Form der URL sieht wie folgt https://web-aca-app.<generated-text>.<location-info>.azurecontainerapps.io
aus, wobei die <generated-text>
und <location-info>
für Ihre Bereitstellung eindeutig 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. Wenn Sie den Befehl erneut ausführen, wird berücksichtigt, dass die Ressourcengruppe und die App bereits vorhanden sind, und aktualisiert nur die Container-App.
In komplexeren Updateszenarien können Sie mit den Az acr-Build - und az containerapp-Updatebefehlen gemeinsam bereitstellen, um die Container-App zu aktualisieren.
Bereinigen
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.
Verwenden Sie zum Entfernen von Ressourcen den Befehl "az group delete ".
Sie können die Gruppe auch in der Azure-Portal oder in Visual Studio Code und der Azure Tools-Erweiterung entfernen.
Nächste Schritte
Weitere Informationen finden Sie in den folgenden Ressourcen: