Dockerizing Java Apps ved hjelp av Jib

1. Oversikt

I denne opplæringen tar vi en titt på Jib og hvordan det forenkler containerisering av Java-applikasjoner.

Vi tar en enkel Spring Boot-applikasjon og bygger Docker-bildet ved hjelp av Jib. Og så vil vi også publisere bildet til et eksternt register.

Sørg også for å henvise til opplæringen vår om docking av Spring Boot-applikasjoner ved hjelp av dockerfil og docker verktøy.

2. Introduksjon til Jib

Jib er et Java-verktøy med åpen kildekode som vedlikeholdes av Google for å bygge Docker-bilder av Java-applikasjoner. Det forenkler containerisering siden det, vi trenger ikke å skrive en dockerfil.

Og faktisk, vi trenger ikke engang å ha docker installert å lage og publisere dockerbildene selv.

Google publiserer Jib som både et Maven- og et Gradle-plugin. Dette er hyggelig fordi det betyr at Jib vil fange endringene vi gjør i applikasjonen vår hver gang vi bygger. Dette sparer oss separate docker build / push-kommandoer og forenkler å legge dette til en CI-rørledning.

Det er et par andre verktøy der ute også, som Spotifys docker-maven-plugin og dockerfile-maven-plugins, selv om førstnevnte nå er utfaset og sistnevnte krever en dockerfil.

3. En enkel hilsen-app

La oss ta en enkel vår-boot-applikasjon og dockerize den ved hjelp av Jib. Det avslører et enkelt GET-endepunkt:

// localhost: 8080 / hilsen

Som vi kan gjøre ganske enkelt med en Spring MVC-kontroller:

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

4. Klargjør distribusjonen

Vi må også sette oss opp lokalt for å autentisere med Docker-arkivet vi vil distribuere til.

For dette eksemplet vil vi gi DockerHub-legitimasjonen vår til .m2 / settings.xml:

  registry.hub.docker.com 

Det er andre måter å gi legitimasjonen også. Den anbefalte måten av Google er å bruke hjelpeverktøy, som kan lagre legitimasjonen i et kryptert format i filsystemet. I dette eksemplet kunne vi ha brukt docker-credential-helpers i stedet for å lagre legitimasjon for ren tekst i settings.xml, som er mye tryggere, men rett og slett utenfor omfanget for denne opplæringen.

5. Distribuere til Docker Hub With Jib

Nå kan vi bruke jib-maven-plugin, eller Gradle-ekvivalenten, tilcontaineriser applikasjonen vår med en enkel kommando:

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

der IMAGE_PATH er målstien i containerregisteret.

For eksempel for å laste opp bildet baeldungjib / spring-jib-app til DockerHub, ville vi gjort:

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

Og det er det! Dette vil bygge dockerbildet av applikasjonen vår og skyve den til DockerHub.

Vi kan selvfølgeliglast opp bildet til Google Container Registry eller Amazon Elastic Container Registry på en lignende måte.

6. Forenkling av Maven Command

Vi kan også forkorte vår første kommando ved å konfigurere plugin-modulen i vår pom i stedet, som alle andre maven-plugin-er.

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

Med denne endringen kan vi forenkle kommandoen vår:

mvn kompilere fok: bygge

7. Tilpasse Docker-aspekter

Som standard, Jib gir en rekke rimelige gjetninger om hva vi vil ha, som FROM og ENTRYPOINT.

La oss gjøre et par endringer i applikasjonen vår som er mer spesifikke for våre behov.

Først eksponerer Spring Boot port 8080 som standard.

Men la oss si at vi ønsker å gjøre applikasjonen vår kjørt på port 8082 og gjøre den eksponert gjennom en container.

Selvfølgelig vil vi gjøre de riktige endringene i Boot. Og etter det kan vi bruke Jib for å gjøre det eksponert i bildet:

 ...   8082   

Eller la oss si at vi trenger en annen FROM. Som standard bruker Jib det distro-mindre java-bildet.

Hvis vi vil kjøre applikasjonen vår på et annet grunnbilde, som alpine-java, kan vi konfigurere det på en lignende måte:

 ... openjdk: alpin ... 

Vi konfigurerer koder, volumer og flere andre Docker-direktiver på samme måte.

8. Tilpasse Java-aspekter

Og ved tilknytning støtter Jib også mange Java-kjøretidskonfigurasjoner:

  • jvmFlagg er for å indikere hvilke oppstartsflagg som skal overføres til JVM.
  • hovedklasse er for å indikere hovedklassen, hvilken Jib vil forsøke å utlede automatisk som standard.
  • argumenterer er der vi vil spesifisere programargumentene som sendes til hoved- metode.

Husk selvfølgelig å sjekke dokumentasjonen til Jib for å se alle tilgjengelige konfigurasjonsegenskaper.

9. Konklusjon

I denne opplæringen så vi hvordan du bygger og publiserer dockerbilder ved hjelp av Googles Jib, inkludert hvordan du får tilgang til dockerdirektivene og Java runtime-konfigurasjoner gjennom Maven.

Som alltid er kildekoden for dette eksemplet tilgjengelig på Github.


$config[zx-auto] not found$config[zx-overlay] not found