Condividi tramite


Distribuire un'applicazione web Flask o FastAPI su Azure Container Apps

Questa esercitazione illustra come inserire in contenitori un'app Web Python Flask o FastAPI e distribuirla in Azure Container Apps. Azure Container Apps usa Docker tecnologia contenitore per ospitare sia immagini predefinite che immagini personalizzate. Per altre informazioni sull'uso dei contenitori in Azure, vedere Impostazioni dei contenitori di Azure.

In questa esercitazione si usa l'interfaccia della riga di comando Docker e il Azure CLI per creare un'immagine Docker e distribuirla in Azure Container Apps. È anche possibile eseguire la distribuzione usando Visual Studio Code e l'estensione Azure Tools.

Prerequisiti

Per completare questa esercitazione, è necessario:

Scaricare il codice di esempio

Nell'ambiente locale, ottieni il codice.

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

Aggiungere file Dockerfile e dockerignore

Aggiungere un Dockerfile per indicare a Docker come compilare l'immagine. Il Dockerfile specifica l'uso di Gunicorn, un server Web a livello di produzione che inoltra le richieste Web ai framework Flask e FastAPI. I comandi ENTRYPOINT e CMD indicano a Gunicorn di gestire le richieste per l'oggetto app.

# syntax=docker/dockerfile:1

FROM python:3.11

WORKDIR /code

COPY requirements.txt .

RUN pip3 install -r requirements.txt

COPY . .

EXPOSE 50505

ENTRYPOINT ["gunicorn", "--config", "gunicorn.conf.py", "app:app"]

Questo esempio usa 50505 per la porta del contenitore (interna), ma è possibile usare qualsiasi porta libera.

Controllare il file requirements.txt per assicurarsi che contenga gunicorn.

Flask==3.1.0
gunicorn

Configurare gunicorn

È possibile configurare Gunicorn usando un file gunicorn.conf.py . Quando il file gunicorn.conf.py si trova nella stessa directory in cui si esegue gunicorn, non è necessario specificarne il percorso nell'istruzione ENTRYPOINT o CMD del Dockerfile. Per altre informazioni sulla specifica del file di configurazione, vedere Impostazioni di Gunicorn.

In questa esercitazione, il file di configurazione suggerito configura Gunicorn per aumentare il numero di worker in base al numero di core della CPU disponibili. Per altre informazioni sulle impostazioni dei file di gunicorn.conf.py , vedere Configurazione di Gunicorn.

# 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

Aggiungere un file con estensione dockerignore per escludere i file non necessari dall'immagine.

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

Compilare ed eseguire l'immagine in locale

Compilare l'immagine in locale.

docker build --tag flask-demo .

Eseguire l'immagine localmente in un contenitore Docker.

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

Aprire http://localhost:5000 nel browser per visualizzare l'app Web in esecuzione in locale.

L'opzione --detach esegue il contenitore in background. L'opzione --publish esegue il mapping della porta del contenitore a una porta nell'host. La porta host (esterna) è la prima nella coppia e la porta del contenitore (interna) è la seconda. Per altre informazioni, vedere Informazioni di riferimento sull'esecuzione di Docker.

Distribuire un'app Web in Azure

Per distribuire l'immagine Docker in Azure Container Apps, usare il comando az containerapp up. I comandi seguenti vengono visualizzati per la shell Bash. Modificare il carattere di continuazione (\) in base alle esigenze di altre shell.

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

Quando la distribuzione è completata, disponi di un gruppo di risorse contenente le seguenti risorse:

  • Un Azure Container Registry
  • Un ambiente di applicazioni container
  • Un'app Container che esegue l'immagine dell'app Web
  • Un'area di lavoro Log Analytics

L'output del comando az containerapp up contiene l'URL per l'applicazione distribuita. Aprire l'URL nel browser per visualizzare l'app Web in esecuzione in Azure. L'URL è simile al seguente https://web-aca-app.<generated-text>.<location-info>.azurecontainerapps.io, dove <generated-text> e <location-info> sono unici per la tua distribuzione.

Apportare aggiornamenti e ridistribuire

Dopo aver apportato gli aggiornamenti del codice, eseguire di nuovo il comando precedente az containerapp up . Il comando ricompila l'immagine e la ridistribuisce in Azure Container Apps. Quando si esegue di nuovo il comando, rileva che il gruppo di risorse e l'app esistono già e aggiorna solo l'app contenitore.

Negli scenari di aggiornamento più complessi è possibile ridistribuire usando i comandi az acr build e az containerapp update insieme per aggiornare l'app contenitore.

Pulizia

Tutte le risorse Azure create in questa esercitazione si trovano nello stesso gruppo di risorse. La rimozione del gruppo di risorse rimuove tutte le risorse nel gruppo di risorse. È il modo più rapido per rimuovere tutte le risorse Azure usate per l'app.

Per rimuovere le risorse, usare il comando az group delete .

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

È anche possibile rimuovere il gruppo nel portale Azure o in Visual Studio Code usando l'estensione Azure Tools.

Passaggi successivi

Per altre informazioni, vedere le risorse seguenti: