if [ -n "$CI" ]; then
echo "⏭ Skipping Maven build in CI"
else
./mvnw package -Pprod
java -jar target/hello-java-*.jar app.App1
fi⏭ Skipping Maven build in CI
ARG, ENV (adapté au projet hello-java)Créer et optimiser des images Docker
2026-10-05
La correction des exercices est disponible dans le dépôt :
✅ : ebpro/notebook-containers-intro-exercices-images
/home/jovyan/work/github/ebpro/notebook-containers-intro-exercices-imagesClone Command:
Créer une image Docker contenant une application Java simple construite avec Maven Wrapper.
Créez l’arborescence suivante :
hello-java/
├── src/
│ └── main/
│ └── java/
│ └── app/
│ └── App1.java
├── pom.xml
Etudier le code de l’application Java App1.java :
src/main/java/app/App1.java
Etudier le fichier pom.xml, regarder :
main.class définit la classe principale de l’application (avec la méthode main) qui sera définit dans le manifeste du JAR exécutable.-Pprod). Ce profile sert à créer une version prête à être distribuée, avec un JAR exécutable (dans target) et les dépendances copiées dans le dossier (libe).pom.xml
Générer le Maven Wrapper avec la commande :
Tester que l’application fonctionne localement :
⏭ Skipping Maven build in CI
eclipse-temurin:21-jdk-alpine. Vous devrez copier les fichiers, construire l’application avec Maven Wrapper, et définir la commande de démarrage.Dockerfile
ARG, ENV (adapté au projet hello-java)Ajouter au projet la classe app.App2 qui lit un fichier pour connaitre le commit. Ce fichier sera créé à la construction de l’image avec un build-arg. L’application lit aussi la variable d’environnement LOG_LEVEL (pour contrôler le niveau de logs au runtime).
src/main/java/app/App2.java
Créer un Dockerfile.arg_env qui accepte un build-arg et crée le fichier /app/GIT_COMMIT avec cette valeur.
Depuis le dossier hello-java/, construisez l’image en passant la valeur du commit au build :
⏭ Skipping Docker step in CI
⏭ Skipping Docker step in CI
⏭ Skipping Docker step in CI
ENV COMMIT=${GIT_COMMIT} ?Dockerfile.arg_env
Compléter l’application Java :
src/main/java/app/App3.java
Créer une image optimisée en multi-stage et utiliser ENTRYPOINT + CMD.
Ecrire un Dockerfile Dockerfile.multistage qui utilise une construction en deux étapes :
eclipse-temurin:21-jdk pour compiler l’application Javaeclipse-temurin:21-jre pour exécuter cette nouvelle classe de l’application JavaUtiliser ENTRYPOINT pour définir la commande principale et CMD pour passer un argument optionnel (le nom à saluer).
Tester votre solution avec les commandes suivantes :
Construire l’image Docker
⏭ Skipping Docker step in CI
⏭ Skipping Docker step in CI
⏭ Skipping Docker step in CI
i Info → U In Use IMAGE ID DISK USAGE CONTENT SIZE EXTRA
GREETING personnalisable pour le message de salutation.--mount=type=cache associé à RUN pour cacher le répertoire .m2 lors du build Maven.eclipse-temurin:21-jre-alpine).Dockerfile.multistage