JIB - Le container de JAR

JIB permet de générer votre app Java en container docker depuis Maven (ou gradle).

JIB - Le container de JAR

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:
jib01

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.
jib02

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:
jib04

A noter la date de création et la différence de taille...