Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questa esercitazione illustra come effettuare il deployment di un'app Web Python Flask o FastAPI in Azure App Service usando la funzionalità Web App for Containers. Questo approccio offre un percorso semplificato per gli sviluppatori che vogliono i vantaggi di una piattaforma completamente gestita durante la distribuzione dell'app come singolo artefatto in contenitori con tutte le dipendenze incluse. Per altre informazioni sull'uso dei contenitori in Azure, vedere Confronto delle opzioni dei contenitori di Azure.
In questa esercitazione si usa l'interfaccia della riga di comando di Docker e Docker per compilare e testare facoltativamente un'immagine Docker in locale. Si usa quindi l'interfaccia della riga di comando di Azure per eseguire il push dell'immagine Docker in Registro Azure Container e distribuirla nel servizio app di Azure. L'app Web è configurata con l'identità gestita assegnata dal sistema per un accesso sicuro e senza password per recuperare l'immagine da Azure Container Registry usando il controllo degli accessi basato sui ruoli di Azure. È anche possibile eseguire la distribuzione con Visual Studio Code con l'estensione Strumenti di Azure installata.
Per un esempio di costruzione e creazione di un'immagine Docker da eseguire in Azure Container Apps, vedere Distribuire un'app Web Flask o FastAPI in Azure Container Apps.
Nota
Questa esercitazione illustra come creare un'immagine Docker che può essere distribuita nel servizio app di Azure. Tuttavia, l'uso di un'immagine Docker non è necessario per la distribuzione nel servizio app. È anche possibile distribuire il codice dell'applicazione direttamente dall'area di lavoro locale al servizio app senza creare un'immagine Docker. Per un esempio, vedere Avvio rapido: Distribuire un'app Web Python (Django o Flask) nel servizio app Azure.
Prerequisiti
Per completare questa esercitazione è necessario:
Un account Azure in cui è possibile distribuire un'app Web su Azure App Service e Azure Container Registry. Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.
Interfaccia della riga di comando di Azure per creare un'immagine Docker e distribuirla al Servizio App. Facoltativamente, Dockere l'interfaccia della riga di comando docker per creare un Docker e testarlo nell'ambiente locale.
Scaricare il codice di esempio
Nell'ambiente locale, ottieni il codice.
git clone https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart.git
cd msdocs-python-flask-webapp-quickstart
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==3.1.0
gunicorn
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 viene eseguito gunicorn, non è necessario specificarne la posizione nel 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 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.
Nota
Se il docker build
comando restituisce un errore, assicurarsi che il docker deamon sia in esecuzione. In Windows verificare che Docker Desktop sia in esecuzione.
Eseguire l'immagine localmente 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.
Creare un gruppo di risorse e Registro Azure Container
Eseguire il comando az login per accedere ad Azure.
az login
Esegui il comando az upgrade per assicurarti che la versione della CLI di Azure sia aggiornata.
az upgrade
Creare un gruppo con il comando az group create .
RESOURCE_GROUP_NAME=<resource-group-name> LOCATION=<location> az group create --name $RESOURCE_GROUP_NAME --location $LOCATION
Un gruppo di risorse di Azure è un contenitore logico in cui le risorse di Azure vengono distribuite e gestite. Quando si crea un gruppo di risorse, si specifica una località come eastus. Sostituire
<location>
con il luogo scelto. Alcuni SKU non sono disponibili in determinate posizioni, pertanto è possibile che venga visualizzato un errore che indica questo problema. Usare una posizione diversa e riprovare.Creare un Registro Azure Container con il comando az acr create. Sostituire
<container-registry-name>
con un nome univoco per l'istanza.CONTAINER_REGISTRY_NAME=<container-registry-name> az acr create --resource-group $RESOURCE_GROOUP_NAME \ --name $CONTAINER_REGISTRY_NAME --sku Basic
Nota
Il nome del Registro di sistema deve essere univoco in Azure. Se viene visualizzato un errore, provare un nome diverso. I nomi del Registro di sistema possono essere costituiti da 5-50 caratteri alfanumerici. Non sono consentiti trattini e caratteri di sottolineatura. Per altre informazioni, vedere Regole per i nomi nel registro Azure Container. Se utilizzi un nome diverso, assicurati di usare il tuo nome anziché
webappacr123
nei comandi che fanno riferimento al registro e agli artefatti di registro nelle sezioni seguenti.Un Registro Azure Container è un registro Docker privato che archivia le immagini da usare in Istanze di Azure Container, servizio app Azure, servizio Azure Kubernetes e altri servizi. Quando si crea un Registro di sistema, si specifica un nome, uno SKU e un gruppo di risorse.
Creare l'immagine nel Registro dei Contenitori di Azure
Compilare l'immagine Docker in Azure con il comando az acr build . Il comando usa il Dockerfile nella directory corrente ed esegue il push dell'immagine nel Registro di sistema.
az acr build \
--resource-group $RESOURCE_GROUP_NAME \
--registry $CONTAINER_REGISTRY_NAME \
--image webappsimple:latest .
L'opzione --registry
specifica il nome del Registro di sistema e l'opzione --image
specifica il nome dell'immagine. Il nome dell'immagine è nel formato registry.azurecr.io/repository:tag
.
Distribuire un'app Web in Azure
Crea un piano dei servizi App con il comando az appservice plan.
az appservice plan create \ --name webplan \ --resource-group $RESOURCE_GROUP_NAME \ --sku B1 \ --is-linux
Impostare una variabile di ambiente all'ID della propria sottoscrizione. Viene usato nel
--scope
parametro nel comando successivo.SUBSCRIPTION_ID=$(az account show --query id --output tsv)
Il comando per la creazione della variabile di ambiente viene visualizzato per la shell Bash. Modificare la sintassi in base alle esigenze di altri ambienti.
Creare l'app Web con il comando az webapp create .
export MSYS_NO_PATHCONV=1 # This line is for Windows users to prevent path conversion issues in Git Bash. az webapp create \ --resource-group $RESOURCE_GROUP_NAME \ --plan webplan --name <container-registry-name> \ --assign-identity [system] \ --role AcrPull \ --scope /subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP_NAME \ --acr-use-identity --acr-identity [system] \ --container-image-name $CONTAINER_REGISTRY_NAME.azurecr.io/webappsimple:latest
Note:
Il nome dell'app Web deve essere univoco in Azure. Se viene visualizzato un errore, provare un nome diverso. Il nome può essere costituito da caratteri alfanumerici e trattini, ma non può iniziare o terminare con un trattino. Per altre informazioni, vedere Regole dei nomi Microsoft.Web.
Se si usa un nome diverso da
webappacr123
quello del Registro Azure Container, assicurarsi di aggiornare il--container-image-name
parametro in modo appropriato.I
--assign-identity
parametri ,--role
e--scope
abilitano l'identità gestita assegnata dal sistema nell'app Web e assegnano ilAcrPull
ruolo nel gruppo di risorse. Questo conferisce all'identità gestita l'autorizzazione per scaricare le immagini da qualsiasi Registro di contenitori di Azure nel gruppo di risorse.I
--acr-use-identity
parametri e--acr-identity
configurano l'app Web per l'uso dell'identità gestita assegnata dal sistema per eseguire il pull delle immagini dal Registro Azure Container.La creazione dell'app Web può richiedere alcuni minuti. È possibile controllare i log di distribuzione con il comando az webapp log tail . Ad esempio:
az webapp log tail --resource-group web-app-simple-rg --name webappsimple123
. Se vedi delle voci contenenti "warmup", significa che il contenitore è in fase di distribuzione.L'URL dell'app Web è
<web-app-name>.azurewebsites.net
, ad esempiohttps://webappsimple123.azurewebsites.net
.
Apportare aggiornamenti e ridistribuire
Dopo aver apportato modifiche al codice, è possibile ridistribuire in servizio app con i comandi az acr build e az webapp update.
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 $RESOURCE_GROUP_NAME --yes --no-wait
È 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: