Bereitstellen einer containerisierten Flask- oder FastAPI-Web-App in Azure App Service
In diesem Lernprogramm erfahren Sie, wie Sie eine Python Flask- oder FastAPI-Web-App mithilfe des Features "Web App für Container" für Azure-App Dienst bereitstellen. Web App für Container bietet Entwicklern eine einfache Einführung, um die vollständig verwaltete Azure-App-Dienstplattform zu nutzen, aber auch ein einzelnes bereitstellungsfähiges Artefakt, das eine App und alle seine Abhängigkeiten enthält. Weitere Informationen zur Verwendung von Containern in Azure finden Sie unter Vergleichen von Azure-Containeroptionen.
In diesem Lernprogramm verwenden Sie die Docker CLI und Docker , um optional ein Docker-Image zu erstellen und lokal zu testen. Außerdem verwenden Sie die Azure CLI, um ein Docker-Image in Azure zu erstellen und es für Azure-App Service bereitzustellen. Sie können auch mit Visual Studio Code bereitstellen, wobei die Azure Tools-Erweiterung installiert ist. Ein Beispiel für das Erstellen und Erstellen eines Docker-Images für die Ausführung auf Azure-Container-Apps finden Sie unter Bereitstellen einer Flask- oder FastPI-Web-App in Azure-Container-Apps.
Hinweis
Dieses Lernprogramm zeigt das Erstellen eines Docker-Images, das dann auf App Service ausgeführt werden kann. Dies ist nicht erforderlich, um App Service zu verwenden. Sie können Code direkt aus einem lokalen Arbeitsbereich in App Service bereitstellen, ohne ein Docker-Image zu erstellen. Ein Beispiel finden Sie unter Schnellstart: Bereitstellen einer Python-Web-App (Django oder Flask) für Azure-App Service.
Voraussetzungen
Um die Schritte dieses Tutorials abzuschließen, benötigen Sie Folgendes:
Ein Azure-Konto, in dem Sie eine Web-App für Azure-App Service- und Azure-Containerregistrierung bereitstellen können.
Azure CLI zum Erstellen eines Docker-Images und Bereitstellen in App Service. Und optional erstellen Dockerund die Docker CLI ein Docker und testen sie in Ihrer lokalen Umgebung.
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 requirements.txt Datei, 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 ausgeführt wird, müssen Sie den Speicherort in der Dockerfile-Datei 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.
Hinweis
Wenn der docker build
Befehl einen Fehler zurückgibt, stellen Sie sicher, dass docker deamon ausgeführt wird. Stellen Sie unter Windows sicher, dass Docker Desktop ausgeführt wird.
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.
Erstellen einer Ressourcengruppe und azure-Containerregistrierung
Erstellen Sie eine Gruppe mit dem Befehl "az group create ".
az group create --name web-app-simple-rg --location eastus
Eine Azure-Ressourcengruppe ist ein logischer Container, in dem Azure-Ressourcen bereitgestellt und verwaltet werden. Beim Erstellen einer Ressourcengruppe geben Sie einen Speicherort an, z. B. Ost.
Erstellen Sie eine Azure-Containerregistrierung mit dem Befehl "az acr create ".
az acr create --resource-group web-app-simple-rg \ --name webappacr123 --sku Basic --admin-enabled true
Hinweis
Der Registrierungsname muss in Azure eindeutig sein. Wenn eine Fehlermeldung angezeigt wird, versuchen Sie es mit einem anderen Namen. Registrierungsnamen können aus 5 bis 50 alphanumerischen Zeichen bestehen. Bindestriche und Unterstriche sind nicht zulässig. Weitere Informationen finden Sie unter Azure Container Registry name rules. Wenn Sie einen anderen Namen verwenden, stellen Sie sicher, dass Sie Ihren Namen anstelle
webappacr123
der Befehle verwenden, die auf die Registrierungs- und Registrierungsartefakte in den folgenden Abschnitten verweisen.Eine Azure Container-Registrierung ist eine private Docker-Registrierung, die Images für die Verwendung in Azure-Containerinstanzen, Azure-App Service, Azure Kubernetes Service und anderen Diensten speichert. Beim Erstellen einer Registrierung geben Sie einen Namen, eine SKU und eine Ressourcengruppe an. Der zweite Befehl speichert das Kennwort in einer Variablen mit dem Befehl "az-Anmeldeinformationen anzeigen ". Das Kennwort wird verwendet, um sich in einem späteren Schritt bei der Registrierung zu authentifizieren.
Legen Sie eine Umgebungsvariable auf den Wert des Kennworts für die Registrierung fest.
ACR_PASSWORD=$(az acr credential show \ --resource-group web-app-simple-rg \ --name webappacr123 \ --query "passwords[?name == 'password'].value" \ --output tsv)
Der Befehl zum Erstellen der Umgebungsvariable wird für die Bash-Shell angezeigt. Ändern Sie die Syntax und das Fortsetzungszeichen (
\
) entsprechend anderen Shells.Sie können auch das Kennwort (
ACR_PASSWORD
) aus dem Azure-Portal abrufen, indem Sie zur Registrierung wechseln, Zugriffstasten auswählen und das Kennwort kopieren.
Erstellen des Images in der Azure-Containerregistrierung
Erstellen Sie das Docker-Image in Azure mit dem Az acr-Buildbefehl . Der Befehl verwendet die Dockerfile im aktuellen Verzeichnis und verschiebt das Image an die Registrierung.
az acr build \
--resource-group web-app-simple-rg \
--registry webappacr123 \
--image webappsimple:latest .
Die --registry
Option gibt den Registrierungsnamen an, und die --image
Option gibt den Bildnamen an. Der Bildname befindet sich im Format registry.azurecr.io/repository:tag
.
Bereitstellen von Web-App in Azure
Erstellen Sie einen App Service-Plan mit dem Befehl "az appservice plan" .
az appservice plan create \ --name webplan \ --resource-group web-app-simple-rg \ --sku B1 \ --is-linux
Erstellen Sie die Web-App mit dem Befehl "az webapp create ".
az webapp create \ --resource-group web-app-simple-rg \ --plan webplan --name webappsimple123 \ --docker-registry-server-password $ACR_PASSWORD \ --docker-registry-server-user webappacr123 \ --role acrpull \ --deployment-container-image-name webappacr123.azurecr.io/webappsimple:latest
Hinweise:
Der Name der Web-App muss in Azure eindeutig sein. Wenn eine Fehlermeldung angezeigt wird, versuchen Sie es mit einem anderen Namen. Der Name kann aus alphanumerischen Zeichen und Bindestrichen bestehen, kann aber nicht mit einem Bindestrich beginnen oder enden. Weitere Informationen finden Sie unter "Microsoft.Web name rules".
Wenn Sie einen anderen Namen als
webappacr123
für Ihre Azure-Containerregistrierung verwenden, stellen Sie sicher, dass Sie die--docker-registry-server-user
Parameter--deployment-container-image-name
entsprechend aktualisieren.Es kann einige Minuten dauern, bis die Web-App erstellt wird. Sie können die Bereitstellungsprotokolle mit dem Az webapp log tail-Befehl überprüfen. Beispiel:
az webapp log tail --resource-group web-app-simple-rg --name webappsimple123
. Wenn Einträge mit "warmup" darin angezeigt werden, wird der Container bereitgestellt.Die URL der Web-App lautet
<web-app-name>.azurewebsites.net
z. Bhttps://webappsimple123.azurewebsites.net
. .
Aktualisierungen vornehmen und erneut bereitstellen
Nachdem Sie Codeänderungen vorgenommen haben, können Sie den App-Dienst mit den Az acr-Build - und az webapp-Updatebefehlen erneut bereitstellen.
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.
Verwenden Sie zum Entfernen von Ressourcen den Befehl "az group delete ".
az group delete --name web-app-simple-rg
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:
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für