Créer une image de conteneur à partir d'un JAR ou d'un WAR
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 à :✅ Essentiel/Standard ✅ Entreprise
Cet article fournit des conseils sur la manière de conditionner votre application Java à partir d'un fichier JAR ou WAR dans une image de conteneur.
Le plan Azure Spring Apps Standard vous permet de télécharger un fichier JAR ou WAR, qu’il empaque automatiquement dans une image de conteneur gérée. De même, Azure Container Apps et Azure Kubernetes Service (AKS) prennent également en charge le déploiement d’une application conteneur directement à partir d’un fichier JAR ou WAR.
Prérequis
- Docker.
- Un registre de conteneurs existant pour le stockage d'images de conteneurs. Pour Azure Container Registry, vous pouvez le configurer à l’aide du Portail Microsoft Azure ou via Azure CLI.
Générer une image conteneur
Si vous souhaitez créer une image de conteneur cohérente avec celle utilisée dans Azure Spring Apps, vous pouvez créer l’image vous-même. Pour créer un fichier JAR, un fichier WAR ou un code source Java dans une image de conteneur, procédez comme suit :
- Créez votre code source Java dans un fichier JAR ou un fichier WAR.
- Créez un Dockerfile et effectuez les actions suivantes :
- (Pour les fichiers WAR uniquement) Téléchargez Tomcat et configurez-le.
- Copiez votre fichier JAR ou WAR dans l’image du conteneur.
- Spécifiez le point d’entrée de l’image du conteneur.
- Créez une image de conteneur en exécutant la commande
docker build
avec le Dockerfile créé à l’étape précédente. - Envoyez l’image du conteneur vers un registre de conteneurs public ou privé afin de pouvoir la déployer ultérieurement dans un environnement Azure Container Apps ou un cluster Azure Kubernetes Service (AKS).
Les sections suivantes décrivent ces étapes plus en détail.
Générer un fichier JAR
Nous vous recommandons d’utiliser des Images de conteneur pour la version Microsoft d’OpenJDK si votre application fonctionne correctement sur Azure Spring Apps. Si vos besoins changent, vous pouvez choisir d’autres images de conteneurs qui répondent mieux à vos besoins.
Pour déterminer la version JDK utilisée dans votre déploiement exécuté dans Azure Spring Apps, utilisez la commande suivante :
az spring app deployment show \
--app <app-name> \
--name <deployment-name> \
--resource-group <resource-group> \
--service <service-name> \
--query properties.source.runtimeVersion
L'exemple de Dockerfile suivant est basé sur JDK 17 :
# filename: JAR.dockerfile
FROM mcr.microsoft.com/openjdk/jdk:17-mariner
ARG JAR_FILENAME
COPY $JAR_FILENAME /opt/app/app.jar
ENTRYPOINT ["java", "-jar", "/opt/app/app.jar"]
Pour créer votre image de conteneur avec ce Dockerfile, utilisez la commande suivante :
docker build -t <image-name>:<image-tag> \
-f JAR.dockerfile \
--build-arg JAR_FILENAME=<path-to-jar> \
.
Pour plus d'informations sur la personnalisation des options JVM, voir Options JVM.
Créer un fichier WAR
Avant de créer un fichier WAR, vous devez décider quelles versions du JDK et de Tomcat utiliser.
Pour déterminer la version de Tomcat utilisée dans votre déploiement exécuté dans Azure Spring Apps, utilisez la commande suivante :
az spring app deployment show \
--app <app-name> \
--name <deployment-name> \
--resource-group <resource-group> \
--service <service-name> \
--query properties.source.serverVersion
L'exemple suivant montre un Dockerfile basé sur JDK 17 :
# filename: WAR.dockerfile
FROM mcr.microsoft.com/openjdk/jdk:17-mariner
ARG TOMCAT_VERSION
ARG TOMCAT_MAJOR_VERSION
ARG WAR_FILENAME
ARG TOMCAT_HOME=/opt/tomcat
# Set up Tomcat
ADD https://archive.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR_VERSION/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz \
$TOMCAT_HOME/apache-tomcat-$TOMCAT_VERSION.tar.gz
RUN tdnf update -y \
&& tdnf install -y tar \
&& tar -zxf $TOMCAT_HOME/apache-tomcat-$TOMCAT_VERSION.tar.gz -C $TOMCAT_HOME --strip-components 1 \
&& rm $TOMCAT_HOME/apache-tomcat-$TOMCAT_VERSION.tar.gz \
&& rm -r $TOMCAT_HOME/webapps/*
COPY $WAR_FILENAME $TOMCAT_HOME/webapps/app.war
ENTRYPOINT ["/bin/sh", "-c" , "/opt/tomcat/bin/catalina.sh run"]
Pour créer votre image de conteneur avec ce Dockerfile, utilisez la commande suivante :
docker build -t <image-name>:<image-tag> \
-f WAR.dockerfile \
--build-arg WAR_FILENAME=<path-to-war> \
--build-arg TOMCAT_VERSION=<version> \
--build-arg TOMCAT_MAJOR_VERSION=<major-version> \
.
Builds multi-étapes
Les deux approches mentionnées précédemment sont des builds de packages uniquement. Ils s'appuient sur votre outil de build local pour gérer le processus de build et empaqueter le résultat dans un fichier JAR ou WAR.
Si vous préférez ne pas installer d'outil de build ou de JDK sur la machine hôte, mais que vous souhaitez des résultats cohérents sur différentes machines, vous pouvez utiliser une méthode alternative en définissant plusieurs étapes de build dans un Dockerfile. Une étape est dédiée à la compilation et au packaging, et une autre étape gère le processus de création d'image. Pour plus d'informations, voir Constructions en plusieurs étapes.
Azure Container Registry Tasks
Si vous disposez d’une instance Azure Container Registry, vous pouvez créer, envoyer et exécuter une image de conteneur à l’aide d’Azure Container Registry Taks. Pour plus d’informations, consultez Démarrage rapide : créer et exécuter une image de conteneur à l’aide d’Azure Container Registry Tasks.