Cum să anulați o aplicație de pornire de primăvară cu Jib-ul Google

Imagine 1: Imagini cu docker java fără frecare cu Jib!

Salut! În timp ce lucram recent la o platformă bazată pe resort, am avut în vedere ce modalitate trebuie să parcurgeți despre dockerizarea unui microservice. Așa că am dat peste Jib, o abordare destul de nouă în această privință, dezvoltată de Google.

Această postare este despre utilizarea Jib, și mai precis jib-maven-plugin, pentru a construi o aplicație de bootare cu arcuri containerizată.

Proiectul demonstrativ utilizat în acest post îl puteți găsi aici:

Ce este Jib

Ceea ce Jib aduce în tabel este faptul că vă permite să creați un container, adăugând pur și simplu un plugin la instrumentul de construire la alegere (Maven sau Gradle). Fără fișiere suplimentare, doar câteva linii de configurare și gestionează toți pașii de ambalare a aplicației într-o imagine a containerului.

Cu cuvintele echipei Google nor:

Jib este un containerizant Java open-source de la Google care permite dezvoltatorilor Java să creeze containere folosind instrumentele Java pe care le cunosc. Nu necesită să scrieți un Dockerfile sau să aveți instalat docker și este integrat direct în Maven și Gradle.

În fluxul „tradițional” de construire a imaginilor Java către Docker, avem nevoie de un Dockerfile și de daemonul docker instalat, așa cum se arată mai jos:

Imagine 2: Pașii tradiționali pentru a crea o imagine docker dintr-o aplicație Java.

După cum indică diagrama, în fluxul de compilare Jib aveți nevoie doar de fișierul de construire a proiectului:

Imagine 3: Modul Jib pentru crearea unei imagini docker dintr-o aplicație Java.

Înființat

Nu este în sfera acestei postări să creăm un mediu de dezvoltare Java, dar să-i oferim o imagine!

  1. Asigurați-vă că aveți instalat Java 8+.
  2. Vom folosi maven, deci, dacă nu sunt prezente, instalați maven 3.5+.
  3. Asigurați-vă că aveți instalat docker și dacă utilizați Linux, utilizatorul dvs. are acces la docker.
  4. Aveți IDE preferat instalat (eclipse sau idee).

Creați o aplicație de pornire de primăvară de bază

Acest lucru se poate face fie prin inițializatorul de primăvară, fie prin IDE-ul preferat. Dacă ați folosit inițializatorul de primăvară, va trebui să importați noul proiect maven în IDE-ul dvs. (eclipse / idee).

Adăugați jib-maven-plugin la pom.xml

Pentru o imagine stocată local de bază a aplicației dvs., configurați plugin-ul jib-maven în pom.xml după cum urmează:

Compilați aplicația și construiți imaginea

Acum putem construi aplicația și verifica dacă imaginea este creată în depozitul nostru local de docker.

Accesați folderul rădăcină al proiectului printr-un terminal și executați:

mvn compila jib: dockerBuild

Jurnalele de construire Maven ar trebui să conțină linii precum următoarele:

[INFO] - - jib-maven-plugin: 0.10.1: dockerBuild (implicit-cli) @ spring-boot-jib - -
[INFO]
[INFO] Aplicație de conținut pentru daemonul Docker ca springbootjib ...
[AVERTIZARE] Imaginea de bază „gcr.io/distroless/java” nu utilizează o digerare specifică a imaginii - crearea este posibil să nu fie reproductibilă
[INFO] Obținerea imaginii de bază gcr.io/distroless/java…
[INFO] Structura de dependențe de construire ...
[INFO] Structura resurselor de construire ...
[INFO] Strat de clase de construcție ...
[INFO] Finalizând ...
[INFO]
[INFO] Punctul de intrare al containerului setat pe [java, -cp, / app / resurse: / app / classes: / app / libs / *, com.jibdemo.SpringBootJibApplication]
[INFO] Se încarcă la daemonul Docker ...
[INFO]
[INFO] Imagine construită pentru demonul Docker ca springbootjib

Atâta timp cât nu există erori și vedem că mavenul „Imagine construită pentru daemon Docker ca springbootjib”, suntem cu toții pregătiți.

Rulați imaginea de andocare

În acest moment ar trebui să avem noua imagine docker în depozitul nostru local. Putem verifica executând imagini docker ls și ar trebui să vedem o imagine similară cu aceasta:

springbootjib ultima eb4bea693650 acum 3 ore 135MB

Observați dimensiunea imaginii foarte mică (135mb), care se datorează imaginii gcr.io/distroless/java pe care Jib o folosește implicit (vom vedea cum o putem schimba mai târziu).

Așadar, acum putem rula imaginea, de obicei, tastând docker run -it springbootjib și verificăm dacă aplicația rulează așa cum era de așteptat.

Configurarea pluginului Jib pentru a regla fina imaginea Docker

Putem săpa mai adânc și configuram suplimentar Jib, pentru a se potrivi cu mai multe scenarii comune, cum ar fi conectarea la un depozit de docker, expunerea porturilor, alegerea unei imagini de bază specifice etc.

De exemplu, în următoarea configurație, imaginea:

  • Este construit dintr-o bază de openjdk: alpine (extras din Docker Hub)
  • Este împins către localhost: 5000 / springbootjib: 0.0.1-SNAPSHOT, localhost: 5000 / springbootjib: alpine și localhost: 5000 / springbootjib: ultimul
  • Se execută apelând la java -Xms256m -Xdebug -cp app / libs / *: app / resurse: app / classes com.jibdemo.SpringBootJibApplication some args
  • Expune portul 8001 pentru tcp (implicit) și porturile 8002 și 8003 pentru udp
  • Are o etichetă (nume: springbootjib)
  • Este construit ca format OCI

Acum puteți construi din nou imaginea și puteți vedea diferența în jurnalele maven:

[INFO] --- jib-maven-plugin: 0.10.1: dockerBuild (default-cli) @ spring-boot-jib ---
[INFO]
[INFO] Aplicație de conținut pentru daemonul Docker ca localhost: 5000 / springbootjib: 0.0.1-SNAPSHOT, localhost: 5000 / springbootjib: alpine, localhost: 5000 / springbootjib ...
[INFO] Obținerea imaginii de bază openjdk: alpine ...
[INFO] Structura de dependențe de construire ...
[INFO] Strat de resurse pentru construire ...
[INFO] Strat de clase de construcție ...
[INFO] Imaginea de bază necesită autentificare. Încercați din nou pentru openjdk: alpine ...
[INFO] Recuperarea credențelor registrului pentru registry.hub.docker.com ...
[INFO] Finalizare ...
[INFO]
[INFO] Punctul de intrare al containerului setat pe [java, -Xms256m, -Xdebug, -cp, / app / resurse: / app / classes: / app / libs / *, com.jibdemo.SpringBootJibApplication]
[INFO] Se încarcă la daemonul Docker ...
[INFO]
[INFO] Imaginea construită în Daemon Docker ca localhost: 5000 / springbootjib: 0.0.1-SNAPSHOT, localhost: 5000 / springbootjib: alpine, localhost: 5000 / springbootjib

Observați în segmentul de jurnal de mai sus că pluginul a scos imaginea openjdk: alpine de la Docker Hub, a construit imaginea în trei versiuni cu etichete diferite și le-a stocat în depozitul nostru local.

De ce am făcut o lovitură cu Jib

  • Nu este necesar să mențineți un Dockerfile, să rulați un demon Docker sau chiar să vă faceți griji despre crearea unui JAR gras cu toate dependențele sale.
  • Profită de stratificarea imaginilor și de memorie în cache a registrelor pentru a realiza construcții progresive rapide.
  • Poate fi configurat pentru a crea imagini de reproducere reproductibile, atât timp cât intrările dvs. rămân aceleași.

Concluzie

După ce am folosit alte plugin-uri maven, precum cele de la spotify și fabric8, pentru a crea imagini de docker pentru aplicațiile java, salut faptul că Google acceptă acest aspect. Are nevoie de mai puține fișiere decât plugin-ul fabric8 și, în umila mea părere, se simte mai ușor de configurat decât pluginul spotify. Vă recomand cu siguranță să încercați!

Disclaimer: Acesta nu este un articol de comparație, doar punctul meu de vedere asupra chestiunii susținute din experiența personală.

Puteți citi mereu mai multe despre github repo de Jib, care conține informații detaliate despre toți parametrii de configurare. Vă mulțumim că ați citit până acum! Sper ca ti-a placut! Simțiți-vă liber să vă lăsați feedback-ul aici.

Despre mine

Hei, mulțumesc că te-ai oprit. Sunt un inginer independent independent, evidențiez în partea din spate și devOps. Mă interesează să creez prototipuri / MVP și să dezvolt platforme care se extind la scară în cloud, optând pentru a crea valoare de afaceri.

Puteți citi mai multe despre mine și povestea mea aici. Dacă doriți să discutați despre afaceri sau pur și simplu să luați legătura, trimiteți-mi un e-mail: tasos.tsaousis@codedlines.com.