Докеризиране на Java Apps с помощта на Jib

1. Общ преглед

В този урок ще разгледаме Jib и как той опростява контейнеризирането на Java приложения.

Ще вземем просто приложение Spring Boot и ще изградим неговия образ на Docker с помощта на Jib. И тогава ще публикуваме изображението и в отдалечен регистър.

И не забравяйте да се обърнете и към нашия урок за докеризиране на приложенията Spring Boot с помощта на инструмента dockerfile и d ocker .

2. Въведение в Jib

Jib е Java инструмент с отворен код, поддържан от Google за изграждане на Docker изображения на Java приложения. Това опростява контейнеризирането, тъй като с него не е необходимо да пишем dockerfile.

И всъщност дори не е нужно да имаме инсталиран докер, за да създаваме и публикуваме сами изображенията на докерите.

Google публикува Jib като плъгин Maven и Gradle. Това е хубаво, защото това означава, че Jib ще улавя всички промени, които правим в нашето приложение всеки път, когато изграждаме. Това ни спестява отделни команди за изграждане / натискане на докер и опростява добавянето на това към CI тръбопровод.

Има и няколко други инструмента, като приставките на Spocker на docker-maven-plugin и dockerfile-maven, въпреки че първият вече е оттеглен, а вторият изисква dockerfile .

3. Просто приложение за поздравления

Нека вземем едно просто приложение за пролетно зареждане и да го закачим с помощта на Jib Той ще изложи проста GET крайна точка:

//localhost:8080/greeting

Което можем да направим съвсем просто с Spring MVC контролер:

@RestController public class GreetingController { private static final String template = "Hello Docker, %s!"; private final AtomicLong counter = new AtomicLong(); @GetMapping("/greeting") public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) { return new Greeting(counter.incrementAndGet(), String.format(template, name)); } } 

4. Подготовка за разполагане

Също така ще трябва да се настроим локално за удостоверяване с хранилището на Docker, в което искаме да се разположим.

За този пример ще предоставим нашите идентификационни данни на DockerHub на .m2 / settings.xml :

  registry.hub.docker.com    

Има и други начини за предоставяне на пълномощията. Препоръчителният начин от Google е да се използват помощни инструменти, които могат да съхраняват идентификационните данни в криптиран формат във файловата система. В този пример бихме могли да използваме docker-credential-helpers, вместо да съхраняваме идентификационни данни с обикновен текст в settings.xml , което е много по-безопасно, макар и просто извън обхвата на този урок.

5. Разполагане в Docker Hub с Jib

Сега можем да използваме jib-maven-plugin или еквивалента на Gradle, за да съдържаме приложението си с проста команда :

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

където IMAGE_PATH е целевият път в регистъра на контейнерите.

Например, за да качим изображението baeldungjib / spring-jib-app в DockerHub , ще направим:

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

И това е! Това ще изгради образа на докер на нашето приложение и ще го изпрати към DockerHub .

Можем, разбира се, да качим изображението в Google Container Registry или Amazon Elastic Container Registry по подобен начин .

6. Опростяване на командата Maven

Също така, можем да съкратим първоначалната команда , като вместо това конфигурираме плъгина в нашия pom , както всеки друг плъгин maven.

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

С тази промяна можем да опростим командата ни maven:

mvn compile jib:build

7. Персонализиране на аспектите на Docker

По подразбиране Jib прави редица разумни предположения за това, което искаме , като FROM и ENTRYPOINT.

Нека направим няколко промени в нашето приложение, които са по-специфични за нашите нужди.

Първо, Spring Boot излага порт 8080 по подразбиране.

Но, да речем, искаме да накараме нашето приложение да работи на порт 8082 и да го направим експонируемо през контейнер.

Разбира се, ще направим съответните промени в Boot. И след това можем да използваме Jib, за да го направим експозиционен в изображението:

 ...   8082   

Или, да речем, че се нуждаем от различен ОТ. По подразбиране Jib използва java изображение без дистрибуция .

Ако искаме да стартираме приложението си на различно основно изображение, като alpine-java, можем да го конфигурираме по подобен начин:

 ...  openjdk:alpine  ... 

Ние конфигурираме тагове, томове и няколко други директиви на Docker по същия начин.

8. Персонализиране на Java аспекти

И, като асоциация, Jib също поддържа множество конфигурации за изпълнение на Java:

  • jvmFlags е за посочване на това кои знамена за стартиране да се предадат на JVM.
  • mainClass е за посочване на основния клас, за който Jib ще се опита да изведе автоматично по подразбиране.
  • args е мястото, където бихме посочили програмните аргументи, предадени на основния метод.

Разбира се, не забравяйте да разгледате документацията на Jib, за да видите всички налични свойства на конфигурацията.

9. Заключение

В този урок видяхме как да изграждаме и публикуваме изображения на докер с помощта на Jib на Google, включително как да осъществим достъп до директивите на докера и конфигурациите за изпълнение на Java чрез Maven.

Както винаги, изходният код за този пример е достъпен в Github.