Jak ukotvit aplikaci pro jarní spouštění pomocí Jib Google

Obrázek 1: Obrázky ukotvitelného java bez tření s programem Jib!

Ahoj! Když jsem nedávno pracoval na jarní platformě, uvažoval jsem o tom, jak jít dockerizovat mikroservis. Takže jsem narazil na Jib, docela nový přístup k této záležitosti, vyvinutý společností Google.

Tento příspěvek pojednává o využití Jibu, konkrétně jib-maven-pluginu, k vytvoření kontejnerové jarní spouštěcí aplikace.

Demo projekt použitý v tomto příspěvku najdete zde:

Co je to Jib

Jib přináší do tabulky to, že vám umožňuje vytvořit kontejner jednoduchým přidáním pluginu do nástroje pro sestavení podle vašeho výběru (Maven nebo Gradle). Žádné další soubory, pouze několik řádků konfigurace a zpracovává všechny kroky zabalení aplikace do obrazu kontejneru.

Vlastními slovy cloudového týmu Google:

Jib je open-source Java kontejnerizer od společnosti Google, který umožňuje vývojářům Java vytvářet kontejnery pomocí nástrojů Java, které znají. Nevyžaduje, abyste psali soubor Dockerfile nebo nainstalovali ukotvitelnou stanici a je přímo integrován do Maven a Gradle.

V „tradičním“ toku vytváření obrázků Java to Docker potřebujeme nainstalovaný Dockerfile a docker démona, jak je ukázáno níže:

Obrázek 2: Tradiční kroky k vytvoření obrázku ukotvení v aplikaci Java.

Jak ukazuje diagram, v toku sestavení Jib potřebujete pouze plugin pro sestavení souboru projektu:

Obrázek 3: Jib způsob, jak vytvořit docker obrázek z aplikace Java.

Založit

Vytvoření vývojového prostředí Java není v rozsahu tohoto příspěvku, ale pojďme to udělat!

  1. Ujistěte se, že máte nainstalovanou Javu 8+.
  2. Použijeme maven, takže pokud není k dispozici, nainstalujte maven 3.5+.
  3. Ujistěte se, že máte nainstalován ukotvitelný panel a pokud používáte Linux, váš uživatel má ukotvitelný přístup.
  4. Nainstalujte si své oblíbené IDE (zatmění nebo nápad).

Vytvořte základní jarní spouštěcí aplikaci

To lze provést buď pomocí inicializace na jaře, nebo prostřednictvím vašeho oblíbeného IDE. Pokud jste použili inicializátor jaro, budete muset importovaný nově vytvořený projekt maven do svého IDE (zatmění / nápad).

Přidejte jib-maven-plugin do svého pom.xml

Pro velmi základní lokálně uložený obrázek vaší aplikace nakonfigurujte jib-maven-plugin v pom.xml takto:

Zkompilujte aplikaci a vytvořte obrázek

Nyní můžeme sestavit aplikaci a zkontrolovat, zda je obraz vytvořen v našem místním úložišti ukotvitelných stanic.

Přes terminál přejděte do kořenové složky projektu a spusťte:

mvn compile jib: dockerBuild

Protokoly sestavení Maven by měly obsahovat následující řádky:

[INFO] - - jib-maven-plugin: 0.10.1: dockerBuild (default-cli) @ spring-boot-jib - -
[INFO]
[INFO] Kontejnerizační aplikace do Dockerova démona jako springbootjib…
[VAROVÁNÍ] Základní obrázek „gcr.io/distroless/java“ nepoužívá specifický soubor obrázků - sestavení nemusí být reprodukovatelné
[INFO] Získání základního obrázku gcr.io/distroless/java…
[INFO] Budování vrstvy závislostí ...
[INFO] Vrstva stavebních zdrojů…
[INFO] Vrstva stavebních tříd…
[INFO] Dokončení…
[INFO]
[INFO] Vstupní bod kontejneru je nastaven na [java, -cp, / app / resources: / app / classes: / app / libs / *, com.jibdemo.SpringBootJibApplication]
[INFO] Načítání do Dockerova démona…
[INFO]
[INFO] Postavený obrázek do Dockerova démona jako springbootjib

Dokud neexistují žádné chyby a vidíme, že maven „Built image to Docker démon jako springbootjib“ jsme všichni nastaveni.

Spusťte obrázek ukotvení

V tomto okamžiku bychom měli mít nový obrázek doku v našem místním úložišti. Můžeme to zkontrolovat provedením docker image ls a měli bychom vidět obrázek podobný tomuto:

springbootjib latest eb4bea693650 před 3 hodinami 135MB

Všimněte si velmi malé velikosti obrázku (135 Mb), což je způsobeno obrázkem gcr.io/distroless/java, který Jib ve výchozím nastavení používá (uvidíme, jak to později můžeme změnit).

Nyní tedy můžeme obrázek spustit jako obvykle zadáním docker run -it springbootjib a ověřit, že aplikace běží podle očekávání.

Konfigurace Jib pluginu pro jemné doladění našeho Docker image

Můžeme kopat hlouběji a dále konfigurovat plugin Jib, aby vyhovoval několika běžným scénářům, jako je přihlášení do úložiště doků, odhalení portů, výběr konkrétního základního obrázku atd.

Například v následující konfiguraci obrázek:

  • Je postaven ze základny openjdk: vysokohorský (vytáhnutý z Docker Hubu)
  • Je tlačen na localhost: 5000 / springbootjib: 0.0.1-SNAPSHOT, localhost: 5000 / springbootjib: alpine, a localhost: 5000 / springbootjib: latest
  • Spouští volání java -Xms256m -Xdebug -cp app / libs / *: app / resources: app / classes com.jibdemo.SpringBootJibApplication některé args
  • Vystavuje port 8001 pro tcp (výchozí) a porty 8002 a 8003 pro udp
  • Má štítek (název: springbootjib)
  • Je postaven jako formát OCI

Nyní můžete obrázek sestavit znovu a vidět rozdíl v protokolech maven:

[INFO] --- jib-maven-plugin: 0.10.1: dockerBuild (default-cli) @ spring-boot-jib ---
[INFO]
[INFO] Kontejnerizační aplikace pro Docker démona jako localhost: 5000 / springbootjib: 0.0.1-SNAPSHOT, localhost: 5000 / springbootjib: vysokohorský, localhost: 5000 / springbootjib ...
[INFO] Získání základního obrázku openjdk: alpine ...
[INFO] Budování vrstvy závislostí ...
[INFO] Vrstva stavebních zdrojů ...
[INFO] Vrstva stavebních tříd ...
[INFO] Základní obrázek vyžaduje autor. Zkouším znovu pro openjdk: vysokohorský ...
[INFO] Načítání pověření registru pro registry.hub.docker.com ...
[INFO] Dokončení ...
[INFO]
[INFO] Vstupní bod kontejneru je nastaven na [java, -Xms256m, -Xdebug, -cp, / app / resources: / app / classes: / app / libs / *, com.jibdemo.SpringBootJibApplication]
[INFO] Načítání do Dockerova démona ...
[INFO]
[INFO] Postavený obrázek do Dockerova démona jako localhost: 5000 / springbootjib: 0.0.1-SNAPSHOT, localhost: 5000 / springbootjib: vysokohorský, localhost: 5000 / springbootjib

Všimněte si v logu výše, že plugin vytáhl obrázek openjdk: alpine z Docker Hub, postavil obrázek do tří verzí s různými značkami a uložil je do našeho místního úložiště.

Proč jsem střílel s Jibem

  • Nemusíte udržovat Dockerfile, spouštět Docker démona, nebo si dělat starosti s vytvářením tlustého JAR se všemi jeho závislostmi.
  • Využívá vrstvení obrazu a ukládání do mezipaměti registru k dosažení rychlých, přírůstkových sestavení.
  • Lze nakonfigurovat tak, aby vytvářel reprodukovatelné obrázky sestavení, pokud vaše vstupy zůstanou stejné.

Závěr

Poté, co jsem použil jiné doplňky typu maven, jako jsou ty z spotify a fabric8, k vytvoření obrázků dockerů pro aplikace Java, vítám to, že společnost Google tuto záležitost převzala. Potřebuje méně souborů než plugin plugin8 a podle mého skromného názoru se cítí snadněji konfigurovat než plugin Spotify. Rozhodně doporučuji zkusit to!

Zřeknutí se odpovědnosti: Nejedná se o srovnávací článek, ale pouze o můj názor na záležitost podpořenou osobní zkušeností.

Vždy si můžete přečíst více o repozitáři Jib's github, který obsahuje důkladné informace o všech konfiguračních parametrech. Děkuji za přečtení tak daleko! Doufám, že sis to užil! Neváhejte a zanechte svůj názor zde.

O mně

Hej, díky za zastavení. Jsem nezávislý technik kompletního zásobníku, zdůrazňující zadní část a devOps. Zajímám se o vytváření prototypů / MVP a vývoj platforem, které se mění v cloudu a rozhoduji se vytvořit obchodní hodnotu.

Více o mně a mém příběhu si můžete přečíst zde. Pokud chcete diskutovat o podnikání nebo se jen spojit, pošlete mi e-mail: tasos.tsaousis@codedlines.com.