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:
Een Azure-account waar u een web-app kunt implementeren in Azure Container Apps. (Er worden een Azure Container Registry- en een Log Analytics-werkruimte voor u gemaakt.)
Azure CLI, Docker-en de Docker CLI geïnstalleerd in uw lokale omgeving.
De voorbeeldcode ophalen
Haal de code op in uw lokale omgeving.
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 gunicorn
bevat.
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.
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.
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: