Affichage des articles dont le libellé est OpenJDK. Afficher tous les articles
Affichage des articles dont le libellé est OpenJDK. Afficher tous les articles

mercredi 28 septembre 2022

Vous saviez pour OpenJDK et Docker™?

Jusqu'à la version 11 de la JDK, il était possible d'utiliser une image "fine" pour empaqueter les applications Java: openjdk:11-jre-slim. Mais depuis, ça se complique car il n'existe plus d'image officielle OpenJDK uniquement centrée sur la JRE.
La conséquence majeure: on se retrouve alors avec une image d'environ 400 MiB pour enrober une API dont le JAR n'en fait que 70; pas cool. On dirait un rapport Charge Utile / Masse Totale digne d'une fusée Arianne. Toute cela parce que:

  • l'image embarque l'ensemble du JDK; incluant le compilateur ainsi qu'un tas d'autres trucs inutiles au runtime
  • le concept de JRE n'existe pas au niveau de l'OpenJDK, c'est un "détail" laissé à la discretion des distributeurs du JDK

J'ai retenu deux solutions[1] à ce problème :

  1. la plus simple: changer d'image de base pour passer sur celle d'une distribution livrant une version JRE (comme docker.io/library/eclipse-temurin:18-jre-alpine par exemple ~170 MiB, ou une autre)
  2. la plus fun: utiliser jdeps et jlink pour fabriquer un JRE custom sur base de l'OpenJDK

On explorera ici la deuxième solution : non pas parce que c'est la plus facile, mais parce que c'est la plus compliquée 🙂 (… et parce que la première, vous la connaissiez sûrement déjà)

mise à jour du 29/03/2024:
Un projet d'exemple est disponible ici montrant un exemple d'usage production ready.