Delen via


Een Flask- of FastAPI-web-app implementeren in Azure Container Apps

In deze zelfstudie leert u hoe u een Python-Flask- of FastAPI-webapp kunt containeriseren en deze implementeren in Azure Container Apps-. Azure Container Apps maakt gebruik van Docker containertechnologie om zowel standaard afbeeldingen als aangepaste afbeeldingen te hosten. Zie Opties voor Azure-containers vergelijkenvoor meer informatie over het gebruik van containers in Azure.

In deze handleiding gebruikt u de Docker CLI en de Azure CLI om een Docker-image te maken en deze te implementeren in Azure Container Apps. U kunt ook implementeren met Visual Studio Code en de Azure Tools Extension.

Voorwaarden

U hebt het volgende nodig om deze zelfstudie te voltooien:

De voorbeeldcode ophalen

Haal de code op in uw lokale omgeving.

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

Dockerfile- en .dockerignore-bestanden toevoegen

Voeg een Dockerfile toe om Docker te instrueren hoe de image gebouwd kan worden. De Dockerfile- geeft het gebruik aan van Gunicorn, een webserver op productieniveau waarmee webaanvragen worden doorgestuurd naar de Flask- en FastAPI-frameworks. Met de OPDRACHTEN ENTRYPOINT en CMD wordt Gunicorn geïnstrueerd om aanvragen voor het app-object te verwerken.

# 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 wordt in dit voorbeeld gebruikt voor de containerpoort (intern), maar u kunt elke gratis poort gebruiken.

Controleer het requirements.txt bestand om te controleren of het bestand gunicornbevat.

Flask==2.2.2
gunicorn
Werkzeug==2.2.2

Gunicorn configureren

Gunicorn kan worden geconfigureerd met een gunicorn.conf.py-bestand. Wanneer het gunicorn.conf.py bestand zich in dezelfde map bevindt waar gunicorn wordt uitgevoerd, hoeft u de locatie niet op te geven in de ENTRYPOINT of CMD instructie van de Dockerfile-. Zie Gunicorn-instellingenvoor meer informatie over het opgeven van het configuratiebestand.

In deze handleiding configureert het voorgestelde configuratiebestand GUnicorn om het aantal workers te verhogen op basis van het aantal beschikbare CPU-kernen. Zie Gunicorn-configuratievoor meer informatie over gunicorn.conf.py bestandsinstellingen.

# 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

Voeg een .dockerignore-bestand toe om overbodige bestanden van de installatiekopie uit te sluiten.

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

Bouw en voer de image lokaal uit

Maak de image lokaal.

docker build --tag flask-demo .

Voer de image lokaal uit in een Docker-container.

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

Open de http://localhost:5000-URL in uw browser om te zien dat de web-app lokaal wordt uitgevoerd.

Met de optie --detach wordt de container op de achtergrond uitgevoerd. De optie --publish wijst de containerpoort toe aan een poort op de host. De hostpoort (extern) bevindt zich eerst in het paar en de containerpoort (intern) is tweede. Zie Docker-uitvoeringsreferentievoor meer informatie.

Web-app implementeren in Azure

Gebruik de opdracht az containerapp up om de Docker-image te implementeren in Azure Container Apps. (De volgende opdrachten worden weergegeven voor de Bash-shell. Wijzig het vervolgteken (\) indien van toepassing op andere shells.)

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

Wanneer de implementatie is voltooid, hebt u een resourcegroep met de volgende resources erin:

  • Een Azure Container Registry
  • Een Container Apps-omgeving
  • Een container-app die de image van de web-app draait
  • Een Log Analytics-werkruimte

De URL voor de geïmplementeerde app bevindt zich in de uitvoer van de opdracht az containerapp up. Open de URL in uw browser om te zien hoe de web-app wordt uitgevoerd in Azure. De vorm van de URL ziet eruit als de volgende https://web-aca-app.<generated-text>.<location-info>.azurecontainerapps.io, waarbij de <generated-text> en <location-info> uniek zijn voor uw implementatie.

Updates maken en opnieuw implementeren

Nadat u code-updates hebt uitgevoerd, kunt u de vorige az containerapp up opdracht opnieuw uitvoeren, waarmee de installatiekopie opnieuw wordt opgebouwd en opnieuw wordt geïmplementeerd in Azure Container Apps. Als u de opdracht opnieuw uitvoert, houdt u rekening met het feit dat de resourcegroep en app al bestaan en werkt u alleen de container-app bij.

In complexere updatescenario's kunt u opnieuw implementeren met de opdrachten az acr build en az containerapp update samen om de container-app bij te werken.

Opschonen

Alle Azure-resources die in deze zelfstudie zijn gemaakt, bevinden zich in dezelfde resourcegroep. Als u de resourcegroep verwijdert, worden alle resources in de resourcegroep verwijderd. Dit is de snelste manier om alle Azure-resources te verwijderen die voor uw app worden gebruikt.

Als u resources wilt verwijderen, gebruikt u de opdracht az group delete.

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

U kunt de groep ook verwijderen in de Azure-portal of in Visual Studio Code- en de Azure Tools-extensie.

Volgende stappen

Zie de volgende bronnen voor meer informatie: