Dockerisering af Java-apps ved hjælp af Jib

1. Oversigt

I denne vejledning ser vi på Jib, og hvordan det forenkler containerisering af Java-applikationer.

Vi tager en simpel Spring Boot-applikation og bygger dens Docker-billede ved hjælp af Jib. Og så offentliggør vi også billedet i et fjernregister.

Og sørg også for at henvise til vores vejledning om dockerisering af Spring Boot-applikationer ved hjælp af dockerfil og docker værktøj.

2. Introduktion til Jib

Jib er et open source Java-værktøj, der vedligeholdes af Google til opbygning af Docker-billeder af Java-applikationer. Det forenkler containerisering siden det, vi behøver ikke at skrive en dockerfil.

Og faktisk, vi behøver ikke engang at have docker installeret at oprette og udgive dockerbillederne selv.

Google udgiver Jib som både et Maven- og et Gradle-plugin. Dette er rart, fordi det betyder, at Jib vil opfange de ændringer, vi foretager i vores applikation, hver gang vi bygger. Dette sparer os separate docker build / push-kommandoer og forenkler at tilføje dette til en CI-pipeline.

Der er også et par andre værktøjer derude, som Spotifys docker-maven-plugin og dockerfile-maven-plugins, selvom førstnævnte nu er udfaset, og sidstnævnte kræver en dockerfil.

3. En simpel hilsen-app

Lad os tage en simpel spring-boot-applikation og dockerize den ved hjælp af Jib. Det udsætter et simpelt GET-slutpunkt:

// localhost: 8080 / hilsen

Hvilket vi kan gøre ganske enkelt med en Spring MVC-controller:

@RestController offentlig klasse GreetingController {privat statisk endelig strengskabelon = "Hej Docker,% s!"; privat final AtomicLong-tæller = ny AtomicLong (); @GetMapping ("/ greeting") offentlig hilsenhilsen (@RequestParam (value = "name", defaultValue = "World") String name) {return new Greeting (counter.incrementAndGet (), String.format (template, name)) ; }} 

4. Forberedelse af implementeringen

Vi bliver også nødt til at indstille os lokalt til at godkende med det Docker-lager, vi vil implementere til.

For dette eksempel vil vi give vores DockerHub-legitimationsoplysninger til .m2 / settings.xml:

  registry.hub.docker.com 

Der er også andre måder at give legitimationsoplysningerne på. Den anbefalede måde af Google er at bruge hjælpeværktøjer, der kan gemme legitimationsoplysningerne i et krypteret format i filsystemet. I dette eksempel kunne vi have brugt docker-legitimationshjælpere i stedet for at gemme legitimationsoplysninger i almindelig tekst i settings.xml, som er meget sikrere, men simpelthen uden for denne tutorials omfang.

5. Implementering til Docker Hub With Jib

Nu kan vi bruge jib-maven-plugineller Gradle-ækvivalent tilcontaineriser vores applikation med en simpel kommando:

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

hvor IMAGE_PATH er målstien i containerregistret.

For eksempel at uploade billedet baeldungjib / spring-jib-app til DockerHub, ville vi gøre:

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

Og det er det! Dette vil bygge dockerbilledet af vores applikation og skubbe det til DockerHub.

Vi kan selvfølgeliguploade billedet til Google Container Registry eller Amazon Elastic Container Registry på en lignende måde.

6. Forenkling af Maven Command

Vi kan også forkorte vores oprindelige kommando ved at konfigurere pluginet i vores pom i stedet som ethvert andet maven-plugin.

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

Med denne ændring kan vi forenkle vores maven-kommando:

mvn kompilér jib: build

7. Tilpasning af Docker-aspekter

Som standard, Jib laver et antal rimelige gæt om, hvad vi vil have, ligesom FROM og ENTRYPOINT.

Lad os foretage et par ændringer i vores applikation, der er mere specifikke for vores behov.

For det første udsætter Spring Boot port 8080 som standard.

Men lad os sige, vi ønsker at få vores applikation til at køre på port 8082 og gøre den eksponeret gennem en container.

Selvfølgelig foretager vi de relevante ændringer i Boot. Og derefter kan vi bruge Jib til at gøre det eksponeret i billedet:

 ...   8082   

Eller lad os sige, at vi har brug for en anden FROM. Som standard bruger Jib det distro-mindre java-billede.

Hvis vi vil køre vores applikation på et andet basisbillede, som alpine-java, kan vi konfigurere det på en lignende måde:

 ... openjdk: alpine ... 

Vi konfigurerer tags, diskenheder og flere andre Docker-direktiver på samme måde.

8. Tilpasning af Java-aspekter

Og ved tilknytning understøtter Jib også adskillige Java-runtime-konfigurationer:

  • jvmFlags er til at angive, hvilke startflag der skal overføres til JVM.
  • hovedklasse er til angivelse af hovedklassen, hvilken Jib forsøger at udlede automatisk som standard.
  • argumenterer er det sted, hvor vi specificerer programargumenter, der sendes til vigtigste metode.

Sørg selvfølgelig for at tjekke Jibs dokumentation for at se alle tilgængelige konfigurationsegenskaber.

9. Konklusion

I denne vejledning så vi, hvordan man bygger og udgiver dockerbilleder ved hjælp af Googles Jib, herunder hvordan man får adgang til docker-direktiverne og Java-runtime-konfigurationer gennem Maven.

Som altid er kildekoden til dette eksempel tilgængelig på Github.


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