Condividi tramite


Distribuire un'app Web Flask o FastAPI in App Contenitore di Azure

Questa esercitazione illustra come inserire in contenitori un'app Web Python Flask o FastAPI e distribuirla in App contenitore di Azure. App Contenitore di Azure usa la tecnologia contenitore Docker per ospitare immagini predefinite e immagini personalizzate. Per altre informazioni sull'uso dei contenitori in Azure, vedere Confronto delle opzioni dei contenitori di Azure.

In questa esercitazione si usano l'interfaccia della riga di comando di Docker e l'interfaccia della riga di comando di Azure per creare un'immagine Docker e distribuirla in App Azure Container. È anche possibile eseguire la distribuzione con Visual Studio Code e l'estensione Strumenti di Azure.

Prerequisiti

Per completare questa esercitazione è necessario:

Scaricare il codice di esempio

Nell'ambiente locale ottenere 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", "app:app"]

50505 viene usato per la porta del contenitore (interna) in questo esempio, ma è possibile usare qualsiasi porta libera.

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

Flask==2.2.2
gunicorn
Werkzeug==2.2.2

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

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

Configurare gunicorn

Gunicorn può essere configurato con un file gunicorn.conf.py . Quando il file gunicorn.conf.py si trova nella stessa directory in cui gunicorn viene eseguita, 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 ruoli di lavoro in base al numero di core 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

Compilare ed eseguire l'immagine in locale

Compilare l'immagine in locale.

docker build --tag flask-demo .

Eseguire l'immagine in locale in un contenitore Docker.

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

Aprire l'URL 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 App Contenitore di Azure, 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 .

Al termine della distribuzione, al suo interno è presente un gruppo di risorse con le risorse seguenti:

  • Un Registro Azure Container
  • Un ambiente di app contenitore
  • Un'app contenitore che esegue l'immagine dell'app Web
  • Un'area di lavoro Log Analytics

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

Apportare aggiornamenti e ridistribuire

Dopo aver apportato gli aggiornamenti del codice, è possibile eseguire di nuovo il comando precedente az containerapp up , che ricompila l'immagine e la ridistribuisce in App Contenitore di Azure. L'esecuzione del comando prende di nuovo in considerazione che il gruppo di risorse e l'app esistono già e aggiorna solo l'app contenitore.

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

Eseguire la pulizia

Tutte le risorse di 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 ed è il modo più rapido per rimuovere tutte le risorse di 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 di Azure o in Visual Studio Code e nell'estensione Strumenti di Azure.

Passaggi successivi

Per ulteriori informazioni, vedi le seguenti risorse: