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:
Ett Azure-konto där du kan distribuera en webbapp till Azure Container Apps. (En Azure Container Registry och Log Analytics-arbetsytan skapas åt dig i processen.)
Azure CLI, Docker och Docker CLI installerade i din lokala miljö.
Hämta exempelkoden
Hämta koden i din lokala miljö.
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.
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 .
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: