Bessere Docker Java Images dank Jib

Google hat mit Jib ein neuen “Containerizer” vorgestellt, der die Erstellung von Container Images für Java Entwickler deutlich vereinfachen soll. Das nächste neue Ding, das durchs Container-Dorf getrieben wird?

Ein Java Entwickler, der seine Applikation als Docker Image ausliefern will, hat gewisse Hürden zu überwinden. Die Applikation muss in den Container, die Start-Skripte wollen geschrieben werden und natürlich muss ein geeignetes Basis Image ausgewählt werden. Das ist nur die Spitze des Eisbergs. Natürlich wollen auch die Build-Tools konfiguriert, die Container-Umgebungen installiert und die Shell-Skripte zum Starten und Stoppen der Anwendung geschrieben werden. Teile davon können die entsprechenden Plugins für das jeweilige Build-Tool übernehmen.

Aber geht es noch einfacher? Googles Antwort drauf: Jib!

Jib baut die Images und das ohne eine Container-Umgebung, sondern pusht das Container-Image direkt in die Container-Registry. Zur Verdeutlichung schematisch dargestellt, wie Images ohne Jib gebaut werden.

Container Images bauen klassisch

Container Images mit Build Tool und Container-Umgebung bauen

Klassisch wird in der IDE entwickelt und dann über Build-Tools, wie z. B. Gradle, ein entsprechendes Dockerfile generiert. Dieses wird dann von einem Docker-Daemon verarbeitet und zur Erzeugung eines Images genutzt. Nach Erstellung des Images muss dieses noch in eine Registry gepusht werden, bevor es auf entsprechenden Testmaschinen über Pull abgerufen werden kann. Aufwendig, das manuell zu tun und kompliziert die entsprechenden Build-Skripte zu erstellen.

Mit Jib ist dieser Ablauf deutlich vereinfacht, und auch das Erstellen komplizierter Build-Skripte entfällt.

Ablauf mit Jib

Images bauen mit Jib


Sieht einfach aus, doch wie macht Jib das?

Jib, selbst in Java implementiert und über Gradle oder Maven Plugins in den Build-Prozess eingebettet, generiert dabei eigenständig Images, die wahlweise dem OCI oder Docker V2.2 Standard entsprechen. Die Images nutzen eine “Distroless” Distribution als Basis für die generierten Images. Selbst an dem Dockerfile zu schrauben, ist in Jib nicht vorgesehen. Lediglich das Setzen eigener JVM Parameter und das Hinzufügen eigener Verzeichnisse ist derzeit möglich. Sind umfangreiche Anpassungen am Basis Image notwendig, kann ein eigenes Image als Basis verwendet werden.

Die Konfiguration von Jib, zum Beispiel in Gradle, ist relativ simpel:

...
plugins {
id 'com.google.cloud.tools.jib' version '0.9.0'
id 'java'
}

//build image every time a new build is created
tasks.build.dependsOn tasks.jib

//push image direct to a remote registry
jib.to.image = ''

repositories {
jcenter()
}
...

Sieht einfach aus und funktioniert ohne größere Anpassungen. Jib unterstützt neben “Private Docker Registries” auch verschiedene Cloud Provider, für die über verschiedene Tools noch Zugangsdaten hinterlegt werden müssen.

Ist Jib nun die Silver-Bullet für Java-Entwickler, die Container Images bauen müssen? Das hängt sicherlich vom Anwendungsfall ab. Jib wird aber die Containerisierung von Anwendungen deutlich vereinfachen und ist somit sicher auch für Java-Entwickler einen Blick wert.

Wer jetzt Lust bekommen hat loszulegen, findet das Repository im Jib GitHub-Repository.

Short URL for this post: https://wp.me/p4nxik-39Q
Patrick Rudloff

About Patrick Rudloff

Patrick Rudloff ist bei der Mannheimer Firma OIO - Orientation in Objects GmbH als Trainer, Berater und Entwickler tätig. Dort beschäftigt er sich mit agilen Methoden, Softwarearchitektur und dem Atlassian Tool-Stack. Patrick twittert unter @RudloffPatrick.
This entry was posted in Build, config and deploy and tagged , , . Bookmark the permalink.

Leave a Reply