Csökkentse a dokkoló kép méretét a tavaszi indító alkalmazással

Ievgen Degtiarenko

2019. június 30. · 4 perc olvasás

Nemrég volt egy feladatom dokkolni és futtatni a k8s egyszerű tavaszi boot 2 alkalmazásban. Ez nem valami új, és a Google-ben nagyon sok példát találhat erre. Meglepődtem, hogy nem találtam modern alpesi jdk11 képet az openjdk adattárban. Arra számítottam, hogy a slim elég kicsi lesz, de kiderült, hogy 422 MB. Ez a bejegyzés megosztja tapasztalataimat a java 11-en futó tavaszi boot 2 képméretének csökkentéséről 144 MB-ra.

dokkoló

Alkalmazás

Mint már említettem, a 2. tavaszi bootot használom, amely egy REST API a relációs adatbázis felett (a @RepositoryRestResource használatával).
A következő függőségeim vannak:

Az üveg mérete 37,6 mb.

A dokkoló felépítése után 422 MB méretű képet kapok a dokkoló képek szerint Kimenet. Nagyon érdekes, hogy 8-jdk-slim eredményt használva 306 MB-os képben.

1. kísérlet: újabb képek

A csökkentés első logikus lépése az alternatív kép megtalálása lenne (lehetőleg alpesi alapon).

Ellenőriztem a következő java tárolókat

(11 jelenlegi LTS kiadásként és 8, mivel még mindig van elég régi alkalmazás, amelyet nem lehet frissíteni)

A táblázatot képekkel, címkékkel és méretükkel (a cikk írásának pillanatában) itt találja.

Ez egy rövid minta:

Ezen eredmények szerint átállhatunk az adoptopenjdk/openjdk11: alpine-jre-re. Ez csak 177 MB képet eredményez.

2. kísérlet: egyéni futásidő

A jdk9 és a modularizációs szolgáltatás óta megpróbálhatjuk saját futásidejüket felépíteni, csak az alkalmazáshoz szükséges modulokkal.
Ezt a funkciót itt dokumentálják.

Próbáljuk meg megtalálni a tavaszi boot 2 alkalmazáshoz szükséges modulokat:

Oké, úgy tűnik, hogy a jdeps nem tudta kezelni a fat-jar-ot, csomagoljuk ki és adjuk meg az classpath-t:

Megpróbáltam a jdk12-t beszerezni ezeket az információkat, de még egy problémával szembesültem:

A ClassNotFoundException által a próba, a hiba és a keresés modul használatával azt tapasztaltam, hogy a következő modulokra van szükség a futtatáshoz:

  • java.base
  • java.logging
  • java.sql
  • java.nevezés
  • java.kezelés
  • java.eszköz
  • java.desktop
  • java.security.jgss

Egyéni futásidejű végrehajtás létrehozása:

Csomagolja ezt a Dockerfile fájlba:

Az eredmény dokkoló képe (alkalmazás nélkül) mindössze 106 MB, ami csendes kicsi, összehasonlítva a többi rendelkezésre álló lehetőséggel. Az alkalmazással történő használat után 144 MB-ra nő.

Címkézhetnénk úgy, hogy "spring-boot-runtime: openjdk-11-slim", és alapdocker képként használhatnánk az összes tavaszi boot-alkalmazást, ha mindegyiknek hasonló a függősége. Ha ez nem igaz, akkor minden alkalmazást dokkolhatunk többlépcsős összeállítással (1. lépés: egyéni futásidejű, 2. lépés: jar hozzáadása).

Következtetés

Jelenleg az alapértelmezett java dokkoló képek nagy méretűek.
Ez könnyen megváltoztatható csak jre-vel ellátott címkék használatával, vagy egyedi java futásidejű képek készítésével.