Déployer une application avec une image conteneur personnalisée
Attention
Cet article fait référence à CentOS, une distribution Linux ayant atteint l’état EOL (fin du service). Faites le point sur votre utilisation et organisez-vous en conséquence. Pour plus d’informations, consultez les conseils d’aide relatifs à la fin de vie de CentOS.
Remarque
Les plans Essentiel, Standard et Entreprise seront déconseillés à compter de la mi-mars 2025, avec une période de mise hors service de 3 ans. Nous vous recommandons de passer à Azure Container Apps. Pour plus d’informations, consultez l’annonce de mise hors service d’Azure Spring Apps.
Le plan de consommation standard et dédiée sera déconseillé à compter du 30 septembre 2024, avec un arrêt complet après six mois. Nous vous recommandons de passer à Azure Container Apps. Pour plus d’informations, consultez Migrer le plan de consommation standard et dédiée Azure Spring Apps vers Azure Container Apps.
Cet article s'applique à : ✅ Standard ✅ Entreprise
Cet article explique comment déployer des applications Spring Boot dans Azure Spring Apps en utilisant une image conteneur personnalisée. Le déploiement d’une application avec un conteneur personnalisé prend en charge la plupart des fonctionnalités que lors du déploiement d’une application JAR. D’autres applications Java et non-Java peuvent également être déployées avec l’image conteneur.
Prérequis
- Une image conteneur contenant l’application.
- L’image est envoyée à un registre d’images. Pour plus d’informations, consultez Azure Container Registry.
Remarque
L’application web doit écouter sur le port 1025
du plan Standard et sur le port 8080
du plan Enterprise. La façon de changer le port dépend du framework de l’application. Par exemple, spécifiez SERVER_PORT=1025
pour les applications Spring Boot ou ASPNETCORE_URLS=http://+:1025/
pour les applications ASP.NET Core. Vous pouvez désactiver la sonde pour les applications qui n’écoutent sur aucun port. Pour plus d’informations, consultez Guide pratique pour configurer des sondes d’intégrité et des périodes d’arrêt approprié pour les applications hébergées dans Azure Spring Apps.
Déployer votre application
Pour déployer une application sur une image conteneur personnalisée, effectuez les étapes suivantes :
Pour déployer une image conteneur, utilisez une des commandes suivantes :
Pour déployer une image conteneur sur le Docker Hub public puis sur une application, utilisez la commande suivante :
az spring app deploy \ --resource-group <your-resource-group> \ --name <your-app-name> \ --container-image <your-container-image> \ --service <your-service-name>
Pour déployer une image conteneur depuis ACR sur une application ou depuis un autre registre privé sur une application, utilisez la commande suivante :
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>
Pour remplacer le point d’entrée de l’image, ajoutez les deux arguments suivants à une des commandes ci-dessus :
--container-command "java" \
--container-args "-jar /app.jar -Dkey=value"
Pour désactiver l’écoute sur un port pour les images qui ne sont pas des applications web, ajoutez l’argument suivant aux commandes ci-dessus :
--disable-probe true
Matrice de prise en charge des fonctionnalités
La matrice suivante montre les fonctionnalités prises en charge dans chaque type d’application.
Fonctionnalité | Applications Spring Boot - Déploiement de conteneur | Applications polyglottes - Déploiement de conteneur | Notes |
---|---|---|---|
Gestion de cycle de vie des applications | ✅ | ✅ | |
Prise en charge des registres de conteneurs | ✅ | ✅ | |
Affecter un point de terminaison | ✅ | ✅ | |
Azure Monitor | ✅ | ✅ | |
Intégration d’APM | ✅ | ✅ | Prise en charge par l’installation manuelle. |
Déploiement bleu/vert | ✅ | ✅ | |
Domaine personnalisé | ✅ | ✅ | |
Mise à l’échelle - Mise à l’échelle automatique | ✅ | ✅ | |
Mise à l’échelle - Mise à l’échelle manuelle (scale-in, scale-out, scale-up, scale-down) | ✅ | ✅ | |
Identité managée | ✅ | ✅ | |
Spring Cloud Eureka et Config Server | ✅ | ❎ | |
Portail des API pour VMware Tanzu | ✅ | ✅ | Plan Enterprise uniquement. |
Spring Cloud Gateway pour VMware Tanzu | ✅ | ✅ | Plan Enterprise uniquement. |
Service de configuration des applications pour VMware Tanzu | ✅ | ❎ | Plan Enterprise uniquement. |
Affichage en direct Application pour VMware Tanzu | ✅ | ❎ | Plan Enterprise uniquement. |
VMware Tanzu Service Registry | ✅ | ❎ | Plan Enterprise uniquement. |
Réseau virtuel | ✅ | ✅ | Ajout d’un registre à la liste verte dans un groupe de sécurité réseau ou dans Pare-feu Azure. |
Adresse IP sortante | ✅ | ✅ | |
E2E TLS | ✅ | ✅ | Approuver une autorité de certification auto-signée. |
Paramètres d’activité et de préparation | ✅ | ✅ | |
Résolution avancée des problèmes -Vidage de threads/segments de mémoire/JFR | ✅ | ❎ | L’image doit inclure Bash et le JDK avec PATH spécifié. |
Apporter votre propre stockage | ✅ | ✅ | |
Intégrer la liaison de service à Resource Connector | ✅ | ❎ | |
Zone de disponibilité | ✅ | ✅ | |
Événements du cycle de vie d’une application | ✅ | ✅ | |
Taille d’application réduite - 0,5 processeur virtuel et 512 Mo | ✅ | ✅ | |
Automatisation des déploiements d’application avec Terraform | ✅ | ✅ | |
Suppression réversible | ✅ | ✅ | |
Expérience de diagnostic interactive (basée sur AppLens) | ✅ | ✅ | |
Contrat SLA | ✅ | ✅ |
Remarque
Les applications polyglottes incluent les applications non-Spring Boot Java, NodeJS, AngularJS, Python et .NET.
Points courants à prendre en compte lors du déploiement avec un conteneur personnalisé
Les points suivants vous aideront à résoudre les situations courantes lors du déploiement avec une image personnalisée.
Approuver une autorité de certification
Il existe deux options pour approuver une autorité de certification :
Option 1 : Charger via Azure Spring Apps
Pour charger les certificats d’autorité de certification dans vos applications, consultez Utiliser des certificats TLS/SSL dans votre application dans Azure Spring Apps. Les certificats seront alors montés à l’emplacement /etc/azure-spring-cloud/certs/public/.
Option 2 : Installation manuelle dans l’image
Pour approuver une autorité de certification dans l’image, définissez les variables suivantes en fonction de votre environnement :
Vous devez importer des applications Java dans le magasin de confiance en ajoutant les lignes suivantes à votre fichier Dockerfile :
ADD EnterpriseRootCA.crt /opt/ RUN keytool -keystore /etc/ssl/certs/java/cacerts -storepass changeit -noprompt -trustcacerts -importcert -alias EnterpriseRootCA -file /opt/EnterpriseRootCA.crt
Pour les applications Node.js, définissez la variable d’environnement
NODE_EXTRA_CA_CERTS
:ADD EnterpriseRootCA.crt /opt/ ENV NODE_EXTRA_CA_CERTS="/opt/EnterpriseRootCA.crt"
Pour Python ou d’autres langages s’appuyant sur le magasin d’autorité de certification du système, sur les images Debian ou Ubuntu, ajoutez les variables d’environnement suivantes :
ADD EnterpriseRootCA.crt /usr/local/share/ca-certificates/ RUN /usr/sbin/update-ca-certificates
Pour Python ou d’autres langages s’appuyant sur le magasin d’autorité de certification du système, sur les images basées sur CentOS ou Fedora, ajoutez les variables d’environnement suivantes :
ADD EnterpriseRootCA.crt /etc/pki/ca-trust/source/anchors/ RUN /usr/bin/update-ca-trust
Éviter un comportement inattendu quand les images changent
Quand votre application est redémarrée ou fait l’objet d’un scale-out, la dernière image est toujours extraite. Si l’image a été modifiée, les instances d’application nouvellement démarrées utilisent la nouvelle image tandis que les anciennes instances vont continuer d’utiliser l’ancienne image.
Remarque
Évitez d’utiliser l’étiquette latest
ou remplacez l’image sans modification de l’étiquette pour éviter un comportement inattendu de l’application.
Éviter de ne pas être en mesure de se connecter au registre de conteneurs dans un réseau virtuel
Si vous avez déployé l’instance sur un réseau virtuel, veillez à autoriser le trafic réseau vers votre registre de conteneurs dans le groupe de sécurité réseau ou dans Pare-feu Azure (s’il est utilisé). Pour plus d’informations, consultez Responsabilités du client pour l’exécution dans un réseau virtuel pour ajouter les règles de sécurité nécessaires.
Installer manuellement un APM dans l’image
Les étapes d’installation varient selon les analyses de performances des applications (APM) et les langues. Les étapes suivantes concernent New Relic avec des applications Java. Vous devez modifier le fichier Dockerfile en effectuant les étapes suivantes :
Téléchargez et installez le fichier de l’agent dans l’image en ajoutant ce qui suit au fichier Dockerfile :
ADD newrelic-agent.jar /opt/agents/newrelic/java/newrelic-agent.jar
Ajoutez les variables d’environnement requises par l’APM :
ENV NEW_RELIC_APP_NAME=appName ENV NEW_RELIC_LICENSE_KEY=newRelicLicenseKey
Modifiez le point d’entrée de l’image en ajoutant :
java -javaagent:/opt/agents/newrelic/java/newrelic-agent.jar
Pour installer les agents pour d’autres langages, reportez-vous à la documentation officielle des autres agents :
New Relic :
- Python : Installer l’agent Python
- Node.js : Installer l’agent Node.js
Dynatrace :
- Python : Instrumenter des applications Python avec OpenTelemetry
- Node.js : Instrumenter des applications Node.js avec OpenTelemetry
AppDynamics :
- Python : Installer l’agent Python
- Node.js : Installation de l’agent Node.js
afficher les journaux d’activité du conteneur.
Pour visualiser les journaux de console de votre application conteneur, la commande CLI suivante peut être utilisée :
az spring app logs \
--resource-group <your-resource-group> \
--name <your-app-name> \
--service <your-service-name> \
--instance <your-instance-name>
Pour visualiser les journaux des événements de conteneur à partir d’Azure Monitor, entrez la requête :
AppPlatformContainerEventLogs
| where App == "hw-20220317-1b"
Analyser votre image à la recherche de vulnérabilités
Nous vous recommandons d’utiliser Microsoft Defender pour le cloud avec ACR pour éviter que vos images soient vulnérables. Pour plus d’informations, consultez Microsoft Defender pour le cloud.
Basculer entre le déploiement JAR et le déploiement de conteneurs
Vous pouvez changer de type de déploiement (d’un déploiement JAR en un déploiement conteneur) directement en redéployant avec la commande suivante :
az spring app deploy \
--resource-group <your-resource-group> \
--name <your-app-name> \
--container-image <your-container-image> \
--service <your-service-name>
Ou inversement :
az spring app deploy \
--resource-group <your-resource-group> \
--name <your-app-name> \
--artifact-path <your-jar-file> \
--service <your-service-name>
Créer un autre déploiement avec un déploiement JAR existant
Vous pouvez créer un autre déploiement en utilisant un déploiement JAR existant avec la commande suivante :
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’automatisation des déploiements en utilisant des tâches Azure Pipelines ou GitHub Actions est désormais prise en charge. Pour plus d’informations, consultez Automatiser les déploiements d’applications dans Azure Spring Apps et Utiliser CI/CD Azure Spring Apps avec GitHub Actions.