JIB - Le container de JAR
JIB permet de générer votre app Java en container docker depuis Maven (ou gradle).
Pour faire simple, JIB est un projet de Google dont l'idée principale est de faire du container le jar du futur. Le process de développement deviendrait, on développe et on build en container directement sans passer par un jar qu'on ajoute à un container.
Voici une illustration de présentation de Google:
Petite démo rapide
Nous partons d'un projet spring boot très très simple. Nous allons sur le starter et ajoutons actuator et spring mvc.
Run du jar
Soit via ./mvnw spring-boot:run
directement ou bien
$ ./mvnw clean package
$ java -jar target/jibemo-0.0.1-SNAPSHOT.jar
et on a notre application qui tourne. On peut tester avec:
$ curl -w "\n" http://localhost:8080/actuator/health
{"status":"UP"}
Ajout dans un container avec un Dockerfile
Voici un exemple de Dockerfile pour ajouter le jar généré:
FROM openjdk:8u171-jre-alpine
COPY target/*.jar /app.jar
EXPOSE 8080
CMD echo "Start the container" && \
java -jar /app.jar
et on build l'image Docker avec docker build -t jibdemo .
que nous pouvons tester avec docker run --rm -it jibemo_dockerfile
Ajout du plugin maven JIB
Pour cette démo, nous utilisons le mode local qui utilise le docker daemon du poste. Mais la principale utilisation reste avec un registre comme celui de Google ou bien de Docker.
Nous pouvons créer l'image en appelant directement le plugin maven avec la commande suivante :
./mvnw compile com.google.cloud.tools:jib-maven-plugin:0.9.11:dockerBuild -Dimage=jibemo_jib1
Pour faciliter l'appel du plugin, vous pouvez l'ajouter dans le pom.xml:
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>0.9.11</version>
<configuration>
<to>
<image>jibemo_jib2</image>
</to>
</configuration>
</plugin>
et du coup la compilation devient ./mvnw compile jib:dockerBuild
Comparons les images ainsi générées:
A noter la date de création et la différence de taille...