Share via


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:

Beispielcode herunterladen

Rufen Sie in Ihrer lokalen Umgebung den Code ab.

git clone https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart.git

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.

docker build --tag flask-demo .

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

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

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

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

  1. 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
    
  2. 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.netz. B https://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: