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.
Azure Developer CLI (azd) può distribuire l'app in Servizio app di Azure. Questa modalità di distribuzione esegue l'app come app Web Linux per contenitori. Quando un servizio usa host: appservice con una build basata su Docker, azd deploy compila l'immagine, la pubblica in Registro Azure Container (ACR) e indirizza un sito di App Service esistente alla nuova immagine.
Poiché azd deploy aggiorna solo il riferimento dell'immagine, la tua infrastruttura deve predisporre il sito per l'esecuzione in contenitore prima della distribuzione. Conoscere le aspettative di questa modalità di distribuzione consente di configurare correttamente il sito ed evitare distribuzioni non riuscite.
Questo articolo illustra il funzionamento della modalità di distribuzione, l'infrastruttura che deve essere già configurata e il modo in cui differisce dall'host containerapp . Presuppone che tu abbia familiarità con i progetti azd, azure.yaml, e i comandi di provisioning e distribuzione azd.
Come azd effettua il deployment di un contenitore in App Service
Quando un servizio viene impostato host: appservice con una configurazione del contenitore, azd deploy considera il sito di destinazione come app Web per contenitori ed esegue le operazioni seguenti:
- Compila un'immagine del contenitore dal Dockerfile.
- Carica l'immagine nell'istanza di Azure Container Registry (ACR) definita dalla tua infrastruttura.
- Aggiorna l'impostazione
linuxFxVersiondel sito suDOCKER|<image>in modo che il sito esegua l'immagine.
azd deploy aggiorna solo il riferimento all'immagine per un sito esistente. Non crea o configura l'infrastruttura sottostante, quindi il sito deve essere già pronto per il contenitore prima della distribuzione.
Configurazione del servizio in azure.yaml
Una distribuzione di contenitori nel servizio app usa host: appservice con una compilazione basata su Docker. Impostare language: docker, o aggiungere una configurazione docker che punti al tuo Dockerfile:
services:
web:
project: ./src/web
host: appservice
language: docker
docker:
path: ./Dockerfile
Con questa configurazione, azd compila l'immagine da ./src/web/Dockerfile, lo inserisce nel registro e aggiorna il sito del servizio app per eseguire l'immagine. L'host appservice non applica le impostazioni env: a livello di servizio, quindi configura le impostazioni dell'app attraverso la tua infrastruttura.
Requisiti dell'infrastruttura per un sito di App Service abilitato per i contenitori
azd deploy non esegue il provisioning né modifica l'infrastruttura per l'host appservice, quindi il codice Bicep esistente o Terraform deve configurare il sito come app contenitore basata su Linux prima di eseguire la distribuzione. L'infrastruttura deve soddisfare il contratto seguente:
| Requisito | dettagli |
|---|---|
| Piano di servizio app Linux | Il piano esegue Linux (kind: linux con reserved: true). Il servizio app supporta solo i contenitori in Linux, non Windows. |
| Sito pronto per i contenitori | Il linuxFxVersion del sito utilizza un valore DOCKER\|. Un'immagine segnaposto è corretta, perché azd deploy la sostituisce con l'immagine che compila ed esegue il push. |
| Contenitore singolo | Il sito esegue un container. L'host appservice non supporta configurazioni multi-contenitore o Docker Compose. |
| Accesso ad ACR tramite identità gestita | Il sito si autentica ad ACR tramite un'identità gestita assegnata dall'utente, ad esempio acrUseManagedIdentityCreds: true con acrUserManagedIdentityID. L'host appservice non supporta le credenziali di amministratore. |
Confronto tra azd deploy, provision e up
La distribuzione del contenitore in App Service comprende due ambiti, l'infrastruttura e il codice dell'applicazione, che corrispondono a diversi comandi azd:
| Comando | Funzionamento | Quando usarlo |
|---|---|---|
azd provision |
Crea e configura le risorse di Azure a partire da Bicep o Terraform, inclusi il sito di App Service predisposto per i contenitori e ACR. | Usarlo quando l'infrastruttura cambia o il sito non esiste ancora. |
azd deploy |
Crea l'immagine, la carica in ACR e aggiorna il riferimento dell'immagine del sito. Non tocca l'infrastruttura. | Usarlo per spedire le modifiche dell'applicazione a un sito di cui è già stato effettuato il provisioning. |
azd up |
Viene eseguito azd provision e quindi azd deploy in un singolo comando. |
Usare questa opzione per una prima distribuzione o quando si desidera effettuare il provisioning e la distribuzione contemporaneamente. |
Poiché azd deploy aggiorna solo il riferimento all'immagine, una appservice distribuzione del contenitore dipende sempre dall'infrastruttura precedente azd provision o azd up creata.
Convalida dell'idoneità per la distribuzione
Prima di aggiornare il sito, azd deploy verifica che il sito di destinazione sia pronto per il contenitore. Se il sito non è un'app contenitore Linux, ad esempio usa un piano Windows, non include un valore DOCKER|linuxFxVersion o non dispone dell'accesso all'identità gestita per ACR, allora azd deploy si arresta e restituisce un errore che identifica la configurazione mancante. Correggi l'infrastruttura ed esegui di nuovo il provisioning prima di effettuare nuovamente la distribuzione.
Contenitori di App Service a confronto con Container Apps
Sia gli host containerapp che appservice distribuiscono immagini di contenitori, ma gestiscono l'infrastruttura e la configurazione in modo diverso:
| Behavior |
appservice host |
containerapp host |
|---|---|---|
| Configurazione dell'infrastruttura |
azd deploy aggiorna solo il riferimento all'immagine e presuppone che il sito sia già predisposto per l'uso di container. |
Esegue il provisioning e configura una parte maggiore del runtime del container. |
| Variabili di ambiente | Non applica le impostazioni a livello env: di servizio. Configurare invece le impostazioni dell'app tramite l'infrastruttura. |
Applica le impostazioni a livello env: di servizio al contenitore. |
| Supporto poliglotta | Containerizza le app in qualsiasi linguaggio tramite language: docker, utile per i runtime senza supporto predefinito azd . |
Containerizza le app in qualsiasi linguaggio tramite language: docker, utile per i runtime senza supporto predefinito azd . |