Distribuire un'applicazione con un'immagine del contenitore personalizzata
Attenzione
Questo articolo fa riferimento a CentOS, una distribuzione di Linux che ha raggiunto lo stato di fine del servizio (EOL). Valutare le proprie esigenze e pianificare di conseguenza. Per ulteriori informazioni, consultare la Guida alla fine del ciclo di vita di CentOS.
Nota
I piani Basic, Standard ed Enterprise saranno deprecati a partire dalla metà di marzo 2025, con un periodo di ritiro di 3 anni. È consigliabile eseguire la transizione ad App Azure Container. Per altre informazioni, vedere l'annuncio di ritiro di Azure Spring Apps.
Il piano Standard a consumo e dedicato sarà deprecato a partire dal 30 settembre 2024, con un arresto completo dopo sei mesi. È consigliabile eseguire la transizione ad App Azure Container. Per altre informazioni, vedere Eseguire la migrazione del consumo di Azure Spring Apps Standard e del piano dedicato alle app Azure Container.
Questo articolo si applica a:✅ Standard ✅ Enterprise
Questo articolo illustra come distribuire applicazioni Spring Boot in Azure Spring Apps usando un'immagine del contenitore personalizzata. La distribuzione di un'applicazione con un contenitore personalizzato supporta la maggior parte delle funzionalità come quando si distribuisce un'applicazione JAR. È anche possibile distribuire altre applicazioni Java e non Java con l'immagine del contenitore.
Prerequisiti
- Immagine del contenitore contenente l'applicazione.
- Viene eseguito il push dell'immagine in un registro di immagini. Per altre informazioni, vedere Registro Azure Container.
Nota
L'applicazione Web deve essere in ascolto sulla porta 1025
per il piano Standard e sulla porta 8080
per il piano Enterprise. Il modo per modificare la porta dipende dal framework dell'applicazione. Ad esempio, specificare SERVER_PORT=1025
per le applicazioni Spring Boot o ASPNETCORE_URLS=http://+:1025/
per ASP.NET applicazioni Core. È possibile disabilitare il probe per le applicazioni che non sono in ascolto su alcuna porta. Per altre informazioni, vedere Come configurare probe di integrità e periodi di terminazione normale per le app ospitate in App Spring di Azure.
Distribuire l'applicazione
Per distribuire un'applicazione in un'immagine del contenitore personalizzata, seguire questa procedura:
Per distribuire un'immagine del contenitore, usare uno dei comandi seguenti:
Per distribuire un'immagine del contenitore nell'hub Docker pubblico in un'app, usare il comando seguente:
az spring app deploy \ --resource-group <your-resource-group> \ --name <your-app-name> \ --container-image <your-container-image> \ --service <your-service-name>
Per distribuire un'immagine del contenitore da Registro Azure Container a un'app o da un altro registro privato a un'app, usare il comando seguente:
az spring app deploy \ --resource-group <your-resource-group> \ --name <your-app-name> \ --container-image <your-container-image> \ --service <your-service-name> --container-registry <your-container-registry> \ --registry-password <your-password> | --registry-username <your-username>
Per sovrascrivere il punto di ingresso dell'immagine, aggiungere i due argomenti seguenti a uno dei comandi precedenti:
--container-command "java" \
--container-args "-jar /app.jar -Dkey=value"
Per disabilitare l'ascolto su una porta per le immagini che non sono applicazioni Web, aggiungere l'argomento seguente ai comandi precedenti:
--disable-probe true
Matrice di supporto delle funzionalità
La matrice seguente illustra le funzionalità supportate in ogni tipo di applicazione.
Funzionalità | App Spring Boot - Distribuzione di contenitori | App polyglot - Distribuzione di contenitori | Note |
---|---|---|---|
Gestione del ciclo di vita dell’app | ✅ | ✅ | |
Supporto per i registri contenitori | ✅ | ✅ | |
Assegna endpoint | ✅ | ✅ | |
Monitoraggio di Azure | ✅ | ✅ | |
Integrazione di APM | ✅ | ✅ | Supportato dall'installazione manuale. |
Distribuzione blu/verde | ✅ | ✅ | |
Dominio personalizzato | ✅ | ✅ | |
Ridimensionamento - Ridimensionamento automatico | ✅ | ✅ | |
Ridimensionamento: ridimensionamento manuale (in/out, aumento/riduzione) | ✅ | ✅ | |
Identità gestita | ✅ | ✅ | |
Spring Cloud Eureka & Config Server | ✅ | ❎ | |
Portale API per VMware Tanzu | ✅ | ✅ | Solo piano enterprise. |
Spring Cloud Gateway per VMware Tanzu | ✅ | ✅ | Solo piano enterprise. |
Servizio di configurazione dell'applicazione per Tanzu VMware | ✅ | ❎ | Solo piano enterprise. |
Visualizzazione dinamica dell'applicazione per VMware Tanzu | ✅ | ❎ | Solo piano enterprise. |
Registro dei servizi VMware Tanzu | ✅ | ❎ | Solo piano enterprise. |
Rete virtuale | ✅ | ✅ | Aggiungere il Registro di sistema per consentire l'elenco di sicurezza di rete o Firewall di Azure. |
Indirizzo IP in uscita | ✅ | ✅ | |
E2E TLS | ✅ | ✅ | Considerare attendibile un'autorità di certificazione autofirmato. |
Impostazioni di liveness e idoneità | ✅ | ✅ | |
Risoluzione dei problemi avanzata - thread/heap/JFR dump | ✅ | ❎ | L'immagine deve includere Bash e JDK con PATH specificato. |
Usare risorse di archiviazione personali | ✅ | ✅ | |
Integrare l'associazione di servizi con Connettore di risorse | ✅ | ❎ | |
Availability Zone (Zona di disponibilità) | ✅ | ✅ | |
Eventi del ciclo di vita dell'app | ✅ | ✅ | |
Dimensioni dell'app ridotte - 0,5 vCPU e 512 MB | ✅ | ✅ | |
Automatizzare le distribuzioni di app con Terraform | ✅ | ✅ | |
Eliminazione temporanea | ✅ | ✅ | |
Esperienza di diagnostica interattiva (basata su AppLens) | ✅ | ✅ | |
Contratto di servizio | ✅ | ✅ |
Nota
Le app polyglot includono app Java non Spring Boot, NodeJS, AngularJS, Python e .NET.
Punti comuni da tenere presenti durante la distribuzione con un contenitore personalizzato
I punti seguenti consentono di risolvere le situazioni comuni durante la distribuzione con un'immagine personalizzata.
Considerare attendibile un'autorità di certificazione
Esistono due opzioni per considerare attendibile un'autorità di certificazione:
Opzione 1: Caricare tramite App Azure Spring
Per caricare i certificati CA nelle app, vedere Usare i certificati TLS/SSL nell'applicazione in Azure Spring Apps. I certificati verranno quindi montati nel percorso /etc/azure-spring-cloud/certs/public/.
Opzione 2: Installazione manuale nell'immagine
Per considerare attendibile una CA nell'immagine, impostare le variabili seguenti a seconda dell'ambiente:
È necessario importare applicazioni Java nell'archivio attendibilità aggiungendo le righe seguenti nel Dockerfile:
ADD EnterpriseRootCA.crt /opt/ RUN keytool -keystore /etc/ssl/certs/java/cacerts -storepass changeit -noprompt -trustcacerts -importcert -alias EnterpriseRootCA -file /opt/EnterpriseRootCA.crt
Per le applicazioni Node.js, impostare la
NODE_EXTRA_CA_CERTS
variabile di ambiente:ADD EnterpriseRootCA.crt /opt/ ENV NODE_EXTRA_CA_CERTS="/opt/EnterpriseRootCA.crt"
Per Python o altri linguaggi che si basano sull'archivio CA di sistema, nelle immagini Debian o Ubuntu, aggiungere le variabili di ambiente seguenti:
ADD EnterpriseRootCA.crt /usr/local/share/ca-certificates/ RUN /usr/sbin/update-ca-certificates
Per Python o altri linguaggi che si basano sull'archivio CA di sistema, nelle immagini basate su CentOS o Fedora aggiungere le variabili di ambiente seguenti:
ADD EnterpriseRootCA.crt /etc/pki/ca-trust/source/anchors/ RUN /usr/bin/update-ca-trust
Evitare comportamenti imprevisti quando le immagini cambiano
Quando l'applicazione viene riavviata o ridimensionata, l'immagine più recente verrà sempre estratta. Se l'immagine è stata modificata, le istanze dell'applicazione appena avviate useranno la nuova immagine mentre le istanze precedenti continueranno a usare l'immagine precedente.
Nota
Evitare di usare il latest
tag o sovrascrivere l'immagine senza una modifica del tag per evitare comportamenti imprevisti dell'applicazione.
Evitare di potersi connettere al registro contenitori in una rete virtuale
Se l'istanza è stata distribuita in una rete virtuale, assicurarsi di consentire il traffico di rete al registro contenitori nel gruppo di sicurezza di rete o Firewall di Azure (se usato). Per altre informazioni, vedere Responsabilità dei clienti per l'esecuzione nella rete virtuale per aggiungere le regole di sicurezza necessarie.
Installare manualmente un modulo APM nell'immagine
I passaggi di installazione variano in base a diversi monitoraggi delle prestazioni delle applicazioni e lingue. I passaggi seguenti sono relativi alle applicazioni New Relic con Java. È necessario modificare il Dockerfile attenendosi alla procedura seguente:
Scaricare e installare il file dell'agente nell'immagine aggiungendo quanto segue al Dockerfile:
ADD newrelic-agent.jar /opt/agents/newrelic/java/newrelic-agent.jar
Aggiungere le variabili di ambiente richieste da APM:
ENV NEW_RELIC_APP_NAME=appName ENV NEW_RELIC_LICENSE_KEY=newRelicLicenseKey
Modificare il punto di ingresso dell'immagine aggiungendo:
java -javaagent:/opt/agents/newrelic/java/newrelic-agent.jar
Per installare gli agenti per altre lingue, vedere la documentazione ufficiale per gli altri agenti:
New Relic:
- Python: Installare l'agente Python
- Node.js: installare l'agente di Node.js
Dynatrace:
- Python: Instrumentare applicazioni Python con OpenTelemetry
- Node.js: Instrumentare Node.js applicazioni con OpenTelemetry
AppDynamics:
- Python: installare l'agente Python
- Node.js: Installazione dell'agente Node.js
Visualizzazione dei log del contenitore
Per visualizzare i log della console dell'applicazione contenitore, è possibile usare il comando dell'interfaccia della riga di comando seguente:
az spring app logs \
--resource-group <your-resource-group> \
--name <your-app-name> \
--service <your-service-name> \
--instance <your-instance-name>
Per visualizzare i log degli eventi del contenitore da Monitoraggio di Azure, immettere la query:
AppPlatformContainerEventLogs
| where App == "hw-20220317-1b"
Analizzare l'immagine per individuare le vulnerabilità
È consigliabile usare Microsoft Defender per il cloud con Registro Azure Container per impedire che le immagini siano vulnerabili. Per altre informazioni, vedere Microsoft Defender per il cloud
Passare dalla distribuzione jar alla distribuzione del contenitore
È possibile passare dal tipo di distribuzione JAR alla distribuzione del contenitore direttamente ridistribuendo usando il comando seguente:
az spring app deploy \
--resource-group <your-resource-group> \
--name <your-app-name> \
--container-image <your-container-image> \
--service <your-service-name>
In alternativa:
az spring app deploy \
--resource-group <your-resource-group> \
--name <your-app-name> \
--artifact-path <your-jar-file> \
--service <your-service-name>
Creare un'altra distribuzione con una distribuzione JAR esistente
È possibile creare un'altra distribuzione usando una distribuzione JAR esistente usando il comando seguente:
az spring app deployment create \
--resource-group <your-resource-group> \
--name <your-deployment-name> \
--app <your-app-name> \
--container-image <your-container-image> \
--service <your-service-name>
CI/CD
L'automazione delle distribuzioni tramite attività di Azure Pipelines o GitHub Actions è ora supportata. Per altre informazioni, vedere Automatizzare le distribuzioni di applicazioni in App Spring di Azure e Usare l'integrazione continua/distribuzione continua di Azure Spring Apps con GitHub Actions