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.