Andocken von Java Apps mit Jib

1. Übersicht

In diesem Tutorial werfen wir einen Blick auf Jib und wie es die Containerisierung von Java-Anwendungen vereinfacht.

Wir nehmen eine einfache Spring Boot-Anwendung und erstellen das Docker-Image mit Jib. Und dann veröffentlichen wir das Image auch in einer Remote-Registrierung.

Und stellen Sie sicher auch unser Tutorial beziehen über dockerizing Frühlings - Boot - Anwendungen mit dockerfile und d ocker - Tool.

2. Einführung in Jib

Jib ist ein Open-Source-Java-Tool, das von Google zum Erstellen von Docker-Images von Java-Anwendungen verwaltet wird. Dies vereinfacht die Containerisierung, da wir damit keine Docker-Datei schreiben müssen.

Und tatsächlich, wir müssen nicht einmal Docker installiert zu schaffen und die Docker Bilder selbst zu veröffentlichen.

Google veröffentlicht Jib sowohl als Maven- als auch als Gradle-Plugin. Das ist schön, weil es bedeutet, dass Jib alle Änderungen, die wir an unserer Anwendung vornehmen, bei jedem Erstellen abfängt. Dies erspart uns separate Docker-Build- / Push-Befehle und vereinfacht das Hinzufügen zu einer CI-Pipeline.

Es gibt ein paar andere Tools gibt, auch, wie Spotify Docker-maven-Plugin und dockerfile-maven - Plugins, obwohl der ehemalige jetzt veraltet ist und letzteres erfordert eine dockerfile .

3. Eine einfache Begrüßungs-App

Nehmen wir eine einfache Spring-Boot-Anwendung und docken Sie sie mit Jib an. Es wird ein einfacher GET-Endpunkt verfügbar gemacht:

//localhost:8080/greeting

Was wir mit einem Spring MVC Controller ganz einfach machen können:

@RestController public class GreetingController { private static final String template = "Hello Docker, %s!"; private final AtomicLong counter = new AtomicLong(); @GetMapping("/greeting") public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) { return new Greeting(counter.incrementAndGet(), String.format(template, name)); } } 

4. Vorbereiten der Bereitstellung

Wir müssen uns auch lokal einrichten, um uns beim Docker-Repository zu authentifizieren, für das wir die Bereitstellung durchführen möchten.

In diesem Beispiel stellen wir unsere DockerHub-Anmeldeinformationen für .m2 / settings.xml bereit :

  registry.hub.docker.com    

Es gibt auch andere Möglichkeiten, die Anmeldeinformationen bereitzustellen. Die von Google empfohlene Methode ist die Verwendung von Hilfstools, mit denen die Anmeldeinformationen in einem verschlüsselten Format im Dateisystem gespeichert werden können. In diesem Beispiel hätten wir Docker-Anmeldeinformations-Helfer verwenden können, anstatt Klartext-Anmeldeinformationen in settings.xml zu speichern. Dies ist viel sicherer, obwohl es für dieses Lernprogramm einfach nicht möglich ist.

5. Bereitstellung auf Docker Hub mit Jib

Jetzt können wir das Jib-Maven-Plugin oder das Gradle-Äquivalent verwenden, um unsere Anwendung mit einem einfachen Befehl zu containerisieren :

mvn compile com.google.cloud.tools:jib-maven-plugin:2.5.0:build -Dimage=$IMAGE_PATH

Dabei ist IMAGE_PATH der Zielpfad in der Containerregistrierung.

Um beispielsweise das Bild baeldungjib / spring- jib -app auf DockerHub hochzuladen , gehen wir wie folgt vor :

export IMAGE_PATH=registry.hub.docker.com/baeldungjib/spring-jib-app

Und das ist es! Dadurch wird das Docker-Image unserer Anwendung erstellt und auf den DockerHub übertragen .

Wir können das Bild natürlich auf ähnliche Weise in die Google Container Registry oder die Amazon Elastic Container Registry hochladen .

6. Vereinfachung des Maven-Befehls

Außerdem können wir unseren ersten Befehl durch die Konfiguration des Plugins in unserer verkürzen pom stattdessen wie jede andere Maven Plugin.

 ...   ...  com.google.cloud.tools jib-maven-plugin 2.5.0   ${image.path}    ...   ... 

Mit dieser Änderung können wir unseren Befehl maven vereinfachen:

mvn compile jib:build

7. Anpassen von Docker-Aspekten

Standardmäßig macht Jib eine Reihe vernünftiger Vermutungen darüber, was wir wollen , wie das FROM und das ENTRYPOINT.

Nehmen wir einige Änderungen an unserer Anwendung vor, die spezifischer auf unsere Anforderungen zugeschnitten sind.

Erstens macht Spring Boot standardmäßig Port 8080 verfügbar.

Angenommen, wir möchten, dass unsere Anwendung auf Port 8082 ausgeführt und über einen Container verfügbar gemacht wird.

Natürlich werden wir die entsprechenden Änderungen in Boot vornehmen. Danach können wir Jib verwenden, um es im Bild sichtbar zu machen:

 ...   8082   

Oder nehmen wir an, wir brauchen ein anderes FROM. Standardmäßig verwendet Jib das Java-Image ohne Distribution .

Wenn wir unsere Anwendung auf einem anderen Basis-Image wie alpine-java ausführen möchten, können wir sie auf ähnliche Weise konfigurieren:

 ...  openjdk:alpine  ... 

Wir konfigurieren Tags, Volumes und mehrere andere Docker-Anweisungen auf dieselbe Weise.

8. Anpassen von Java-Aspekten

Außerdem unterstützt Jib zahlreiche Java-Laufzeitkonfigurationen:

  • Mit jvmFlags wird angegeben, welche Startflags an die JVM übergeben werden sollen.
  • mainClass gibt die Hauptklasse an, auf die Jib standardmäßig automatisch schließen möchte .
  • In args würden wir die Programmargumente angeben, die an die Hauptmethode übergeben werden.

Lesen Sie natürlich unbedingt die Dokumentation zu Jib, um alle verfügbaren Konfigurationseigenschaften zu sehen.

9. Fazit

In diesem Tutorial haben wir gesehen, wie Docker-Images mit Google Jib erstellt und veröffentlicht werden, einschließlich des Zugriffs auf die Docker-Direktiven und Java-Laufzeitkonfigurationen über Maven.

Wie immer ist der Quellcode für dieses Beispiel auf Github verfügbar.