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:
Un account Azure in cui è possibile distribuire un'app Web in App Azure Container. (An Registro Azure Container e l'area di lavoro Log Analytics vengono create automaticamente nel processo.
Interfaccia della riga di comando di Azure, Docker e l'interfaccia della riga di comando docker installata nell'ambiente locale.
Scaricare il codice di esempio
Nell'ambiente locale ottenere il codice.
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.
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 .
È 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: