Distribuera en Flask- eller FastAPI-webbapp i Azure Container Apps

Den här självstudien visar hur du containeriserar en Python Flask- eller FastAPI-webbapp och distribuerar den till Azure Container Apps. Azure Container Apps använder Docker-containerteknik som värd för både inbyggda avbildningar och anpassade avbildningar. Mer information om hur du använder containrar i Azure finns i Jämföra Azure-containeralternativ.

I den här självstudien använder du Docker CLI och Azure CLI för att skapa en Docker-avbildning och distribuera den till Azure Container Apps. Du kan också distribuera med Visual Studio Code och Azure Tools-tillägget.

Förutsättningar

För att slutföra självstudierna behöver du:

Hämta exempelkoden

Hämta koden i din lokala miljö.

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

Lägg till Dockerfile- och .dockerignore-filer

Lägg till en Dockerfile för att instruera Docker hur avbildningen ska skapas. Dockerfile anger användningen av Gunicorn, en webbserver på produktionsnivå som vidarebefordrar webbbegäranden till Flask- och FastAPI-ramverken. KOMMANDONa ENTRYPOINT och CMD instruerar Gunicorn att hantera begäranden för appobjektet.

# 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 används för containerporten (intern) i det här exemplet, men du kan använda valfri kostnadsfri port.

Kontrollera filen requirements.txt för att se till att den innehåller gunicorn.

Flask==2.2.2
gunicorn
Werkzeug==2.2.2

Lägg till en .dockerignore-fil för att undanta onödiga filer från avbildningen.

.git*
**/*.pyc
.venv/

Konfigurera gunicorn

Gunicorn kan konfigureras med en gunicorn.conf.py fil. När den gunicorn.conf.py filen finns i samma katalog där gunicorn den körs behöver du inte ange dess plats i ENTRYPOINT dockerfilens eller CMD instruktionen. Mer information om hur du anger konfigurationsfilen finns i Gunicorn-inställningar.

I den här självstudien konfigurerar den föreslagna konfigurationsfilen GUnicorn för att öka antalet arbetare baserat på antalet tillgängliga CPU-kärnor. Mer information om gunicorn.conf.py filinställningar finns i 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

Skapa och köra avbildningen lokalt

Skapa avbildningen lokalt.

docker build --tag flask-demo .

Kör avbildningen lokalt i en Docker-container.

docker run --detach --publish 5000:50505 flask-demo

http://localhost:5000 Öppna URL:en i webbläsaren för att se webbappen som körs lokalt.

Alternativet --detach kör containern i bakgrunden. Alternativet --publish mappar containerporten till en port på värden. Värdporten (extern) är först i paret och containerporten (intern) är den andra. Mer information finns i Docker-körningsreferens.

Distribuera webbapp till Azure

Om du vill distribuera Docker-avbildningen till Azure Container Apps använder du kommandot az containerapp up . (Följande kommandon visas för Bash-gränssnittet. Ändra fortsättningstecknet (\) efter behov för andra gränssnitt.)

az containerapp up \
  --resource-group web-flask-aca-rg --name web-aca-app \
  --ingress external --target-port 50505 --source .

När distributionen är klar har du en resursgrupp med följande resurser i den:

  • Ett Azure Container Registry
  • En Container Apps-miljö
  • En containerapp som kör webbappavbildningen
  • En Log Analytics-arbetsyta

URL:en för den distribuerade appen finns i utdata från az containerapp up kommandot. Öppna URL:en i webbläsaren för att se webbappen som körs i Azure. Formen på URL:en ser ut som följande https://web-aca-app.<generated-text>.<location-info>.azurecontainerapps.io, där <generated-text> och <location-info> är unika för distributionen.

Göra uppdateringar och distribuera om

När du har skapat koduppdateringar kan du köra föregående az containerapp up kommando igen, vilket återskapar avbildningen och distribuerar om den till Azure Container Apps. Om du kör kommandot igen tar vi hänsyn till att resursgruppen och appen redan finns och uppdaterar bara containerappen.

I mer komplexa uppdateringsscenarier kan du distribuera om med az acr build - och az containerapp update-kommandona tillsammans för att uppdatera containerappen.

Rensa

Alla Azure-resurser som skapas i den här självstudien finns i samma resursgrupp. Om du tar bort resursgruppen tas alla resurser i resursgruppen bort och det snabbaste sättet att ta bort alla Azure-resurser som används för din app.

Om du vill ta bort resurser använder du kommandot az group delete .

az group delete --name web-flask-aca-rg

Du kan också ta bort gruppen i Azure-portalen eller i Visual Studio Code och Azure Tools-tillägget.

Nästa steg

Mer information finns i följande resurser: