Aller à la navigation

Blog

Retour à l’accueil

24 Sep 2019

Tutoriel : Java Builder Image

Introduction : 

Tous les développeurs sont familiers avec les conteneurs, et plus particulièrement les conteneurs Docker. Mais est-t-il vraiment facile de conteneuriser son application Java ?

En tant que Développeur Java, nous accumulons une avalanche de nouveau Framework qu’il faut maitriser, mais est-il vraiment facile d’aborder les nouvelles fonctionnalités qu’apporte Docker ?

Comme toute autre technologie, Docker apporte son lot de complexités dans un domaine déjà complexe. Dans l’optique de diluer cette complexité, Google a lancé le projet JIB ( Java Image Builder),  dont le but est de permettre aux développeurs de conteneuriser les applications Java en utilisant des outils qu’ils maitrisent déjà, en l’occurrence Maven ou Gradle.

Dans cet article, il sera exposé deux cas de création d’images Docker pour une application Java spring boot, ultra simple, qui affichera « Bonjour Finaxys ». Le premier cas consistera à construire une image Docker avec un Dockerfile, et le deuxième cas consistera à créer la même image avec JIB.

Note : le principe présenté dans le cas Maven est identique à celui de Gradle.

ConteneurISATION AVEC DOKER

Prérequis :
–  Maven
– Java
– Docker

Dans une première étape, il est crée un projet spring boot qui expose une API REST qui permet d’afficher « Bonjour Finaxys », en suivant les étapes suivantes :

1 – Dans le répertoire src\main\Java\hello\ , créer la classe Application comme suit :

2 – Toujours dans le répertoire src\main\Java\hello\ , créer la classe Application  :

3 – A la racine du projet, créer le pom.xml  :

4 – Créer le Dockerfile à la racine du projet : 

5 – Construire le projet en exécutant la commande : mvn clean install

6 – Construire l’image Docker en exécutant la commande : Docker build -t sans-jib-exemple:1.0.0 .

7 – Lancer le conteneur avec la commande :

8 – Enfin, tester l’application en tapant l’URL dans le navigateur : 

 

———————————————

Conteneurisation avec JIB

Prérequis :
–  Maven
– Java
– Ici, Docker n’est pas nécessaire pour constuire l’image Docker

Reprenons l’exemple de notre application de départ, toutefois en y apportant les modifications suivantes :

1 – Faire une copie du projet précédent, et modifier l’artifact ID du pom xml, qui devient :

2 – Ajouter le plugin JIB dans le pom.xml :

L’username et le password sont les identifiants de votre registry, ici pour exemple il est utilisé la registry Docker.

3 – Pour construire l’image Docker, exécuter la commande suivante : mvn compile jib:build

4 – L’image est construite et remontée sur le registry Docker sur le repository configuré dans le pom.xml, en l’occurrence : 

5 – Noter qu’il est utilisé ici une authentification basique pour la simplicité de son utilisation, néanmoins elle est totalement déconseillée. Il y a plusieurs méthodes d’authentifications possibles, il est préconisé d’utiliser les fonctionnalités de Maven pour chiffrer le mot de passe avec l’utilitaire Maven de chiffrement de mot de passe en suivant les étapes suivantes :

  • Générer le mot de passe master de votre Maven avec la commande : mvn –encrypt-master-password <Votre mot de passe>

  • Copier ce mot de passe dans le fichier :  ${user.home}/.m2/settings-security.xml

  • Chiffrer votre mot de passe :

  • Enfin ajouter votre registry au fichier settings.xml de votre Maven

Cette méthode d’authentification à l’avantage d’être simple et elle fonctionne avec les différentes registry Docker.

6 – Maintenant que l’image Docker a été construite, il reste à la tester en exécutant la commande suivante :

7 – Tester l’application sur l’URL http://localhost:8087/

 

conclusion

Le plugin JIB offre une multitude d’options de configuration pour couvrir une grande partie des instructions possibles dans le Dockerfile. L’objectif de ce tutoriel est de montrer un exemple de base d’une application JAVA en utilisant dans un premier temps le Dockerfile, puis démontrer qu’il est possible de reproduire le même principe avec uniquement Maven.  

 

Par Laid MERZOUK – Consultant DevOps FINAXYS

Share our news :

-