Site icon Blog Zenika

Jib, Java + Docker en mode facile ?

C’est tout nouveau, c’est tout frais, Google vient d’annoncer et de publier Jib, un outil pour « Build Java Docker images better ».
https://cloudplatform.googleblog.com/2018/07/introducing-jib-build-java-docker-images-better.html
Mais, pourquoi Jib ?

L’existant

Bon, on ne va pas se mentir, construire des images Java pour Docker n’est pas vraiment quelque chose de nouveau et révolutionnaire, il y a déjà de nombreuses possibilités pour ce faire et ça ressemble en général à ça :

(Source cloudplatform.googleblog.com)

Avec un Dockerfile à peu près comme ça :

FROM java:8
WORKDIR /
ADD jeanmichel.jar jeanmichel.jar
CMD java - jar jeanmichel.jar

Et, pour ordonnancer ce workflow, l’outil de CI de votre choix. Avec, en général une phase de build / push de l’image qui se fait en dehors de maven (sauf si vous utilisez le plugin dockerfile-maven de Spotify).

Alors pourquoi Jib ?

Jib vient avec plusieurs promesses :

  1. Simplifier le workflow pour le réduire à une seule phase, full Java, directement géré par le plugin maven / plugin et sans configuration (pas besoin de Dockerfile).
  2. Accélérer le process en s’appuyant de façon intelligente sur le système de couches de Docker. En séparant par exemple les couches dépendances, ressources et classes. Les builds sont donc plus incrémentaux et plus rapides : fini la couche unique non réutilisable parce qu’une ligne de code a changé dans le fatjar !
  3. Garantir la reproductibilité de votre image en se basant sur les métadonnées maven / gradle. Les mêmes inputs donneront la même image Docker.

Comment ça marche Jib ?

Jib promet de s’occuper de tout pour vous, du début (le code de votre projet) à la fin (l’image docker poussée dans un registry).

(Source cloudplatform.googleblog.com)

Concrètement, il s’agit simplement d’un plugin maven (existe aussi en version gradle) offrant un goal qui réalise l’ensemble du process.
Configuration dans le pom.xml :

<plugin>
  <groupId>com.google.cloud.tools</groupId>
  <artifactId>jib-maven-plugin</artifactId>
  <version>0.9.2</version>
  <configuration>
    <to>
      <image>nomDeLimage</image>
    </to>
  </configuration>
</plugin>

Exécution :

# Build et push sur un registry (à configurer, en particulier les credentials)
$ mvn compile jib:build
# Build et push en utilisant le client Docker local
$ mvn compile jib:dockerBuild

Et … voilà ! Une image Docker de votre application est disponible sur le registry cible !

Le dessous des cartes

Mais en fait, il fait quoi Jib ?

On aime

On aime moins

Conclusion

Jib propose une approche pensée et implémentée 100% Java pour dockeriser vos projets. Il est incroyablement simple de prise en main et très efficace.
Il souffre évidemment de défauts de jeunesse (première version en février 2018 et officialisation publique début juillet 2018) et troque de la flexibilité au profit de l’efficacité.
Jib est-il l’outil parfait pour vos besoins ? Faites l’essai !
https://github.com/GoogleContainerTools/jib
 
 

Auteur/Autrice

Quitter la version mobile