Dokerizacija Java aplikacija pomoću Jiba

1. Pregled

U ovom uputstvu pogledat ćemo Jib i kako pojednostavljuje kontejnerizaciju Java aplikacija.

Uzeti ćemo jednostavnu aplikaciju Spring Boot i izgraditi njegovu Docker sliku koristeći Jib. A zatim ćemo i sliku objaviti u udaljenom registru.

Obavezno se pozovite i na naš vodič o dodavanju dokumenata Spring Boot aplikacija dockerfile i doker alat.

2. Uvod u Jib

Flok je otvoreni izvor Java alata koji Google održava za izgradnju Docker slika Java aplikacija. Pojednostavljuje kontejnerizaciju jer s njom, ne trebamo pisati a dockerfile.

I zapravo, ne moramo ni imati lučki radnik instaliran da sami stvorimo i objavimo slike dockera.

Google objavljuje Jib i kao dodatak Maven i kao Gradle. To je lijepo jer to znači da će Jib uhvatiti sve promjene koje napravimo u našoj aplikaciji svaki put kada gradimo. To nam štedi odvojene naredbe za izgradnju / guranje dockera i pojednostavljuje dodavanje ovog u CI cjevovod.

Postoji i nekoliko drugih alata, poput dodataka za docker-maven-spotify i dockerfile-maven za Spotify, iako je prvi zastario, a za drugi je potreban dockerfile.

3. Jednostavna aplikacija za pozdrav

Uzmimo jednostavnu aplikaciju za proljetno pokretanje i dockeriziramo je pomoću Jiba. Otkrit će jednostavnu GET krajnju točku:

// localhost: 8080 / pozdrav

Što možemo učiniti jednostavno s Spring MVC kontrolerom:

@RestController javna klasa GreetingController {private static final String template = "Hello Docker,% s!"; privatni konačni brojač AtomicLong = novi AtomicLong (); @GetMapping ("/ pozdrav") javni pozdravni pozdrav (@RequestParam (value = "name", defaultValue = "World") Naziv niza) {return new Greeting (counter.incrementAndGet (), String.format (template, name)) ; }} 

4. Priprema implementacije

Trebat ćemo se postaviti i lokalno za provjeru autentičnosti s Dockerovim spremištem u koje se želimo rasporediti.

Za ovaj primjer ćemo pružiti naše vjerodajnice za DockerHub .m2 / settings.xml:

  registry.hub.docker.com 

Postoje i drugi načini za pružanje vjerodajnica. Google preporučuje način korištenja pomoćnih alata koji mogu pohraniti vjerodajnice u šifriranom formatu u datotečni sustav. U ovom smo primjeru mogli upotrijebiti pomoćnike docker-credential-helpers umjesto pohrane vjerodajnica u običnom tekstu u postavke.xml, što je mnogo sigurnije, iako je jednostavno izvan opsega ovog vodiča.

5. Postavljanje u Docker Hub s Jibom

Sada možemo koristiti jib-maven-plugin, ili ekvivalent Gradle-a, dosadržavajte našu aplikaciju jednostavnom naredbom:

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

gdje je IMAGE_PATH ciljana staza u registru spremnika.

Na primjer, za prijenos slike baeldungjib / spring-jib-app do DockerHub, učinili bismo:

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

I to je to! Ovo će izgraditi docker sliku naše aplikacije i gurnuti je na DockerHub.

Možemo, naravno,prenesite sliku u Google Container Registry ili Amazon Elastic Container Registry na sličan način.

6. Pojednostavljivanje zapovijedi Maven

Također, možemo skratiti svoju početnu naredbu konfiguriranjem dodatka u našem pom umjesto toga, kao i bilo koji drugi dodatak za maven.

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

Ovom promjenom možemo pojednostaviti naredbu maven:

mvn kompajliraj jib: build

7. Prilagođavanje aspekata Dockera

Prema zadanim postavkama, Jib iznosi niz razumnih nagađanja o onome što želimo, poput FROM i ENTRYPOINT.

Napravimo nekoliko promjena u našoj aplikaciji koje su specifičnije za naše potrebe.

Prvo, Spring Boot prema zadanim postavkama izlaže port 8080.

Ali, recimo, želimo omogućiti da se naša aplikacija izvodi na portu 8082 i učini je izložljivom kroz spremnik.

Naravno, u Boot-u ćemo napraviti odgovarajuće promjene. I, nakon toga, možemo koristiti Jib kako bismo ga učinili dostupnim na slici:

 ...   8082   

Ili, recimo da nam treba drugačiji OD. Prema zadanim postavkama Jib koristi java sliku bez distribucije.

Ako želimo pokrenuti našu aplikaciju na drugoj osnovnoj slici, poput alpine-jave, možemo je konfigurirati na sličan način:

 ... openjdk: alpski ... 

Na isti način konfiguriramo oznake, volumene i nekoliko drugih Dockerovih direktiva.

8. Prilagođavanje Java aspekata

A, udruživanjem, Jib podržava i brojne Java runtime konfiguracije:

  • jvmFlags služi za naznaku koje zastavice za pokretanje trebaju proslijediti JVM-u.
  • mainClass je za označavanje glavne klase, koja Jib će pokušati automatski zaključiti prema zadanim postavkama.
  • argumenata ovdje bismo odredili programske argumente proslijeđene u glavni metoda.

Naravno, provjerite Jibovu dokumentaciju kako biste vidjeli sva dostupna svojstva konfiguracije.

9. Zaključak

U ovom smo tutorijalu vidjeli kako graditi i objavljivati ​​slike dockera pomoću Googleovog Jiba, uključujući kako pristupiti direktivama dockera i Java runtime konfiguracijama putem Mavena.

Kao i uvijek, izvorni kod za ovaj primjer dostupan je na Githubu.