Как да докерирате приложение за пролетно зареждане с Jib на Google

Изображение 1: Безфрикционни снимки на java docker с Jib!

Здравейте! Докато работех на пролетна платформа наскоро, обмислях кой път да предприема докинг за микросервиз. Така попаднах на Jib, доста нов подход по въпроса, разработен от Google.

Тази публикация е свързана с използването на Jib и по-точно jib-maven-plugin за изграждане на контейнерно приложение за пролетно зареждане.

Демонстрационният проект, използван в тази публикация, може да намерите тук:

Какво е Джиб

Това, което Jib носи в таблицата е, че ви позволява да създадете контейнер, като просто добавите плъгин към инструмента за изграждане по ваш избор (Maven или Gradle). Без допълнителни файлове, само няколко реда конфигурация и той обработва всички стъпки на опаковане на приложението ви в изображение на контейнер.

Със собствените думи на екипа на Google в облака:

Jib е отворен код на Java контейнеровизатор от Google, който позволява на разработчиците на Java да изграждат контейнери, като използват инструментите на Java, които познават. Не изисква от вас да напишете Dockerfile или да сте инсталирали докер и той е директно интегриран в Maven и Gradle.

В „традиционния“ поток за изграждане на изображение от Java до Docker се нуждаем от Dockerfile и инсталиран демон за докер, както е показано по-долу:

Изображение 2: Традиционните стъпки за създаване на изображение на докер от Java приложение.

Както диаграмата показва, в потока на сглобяване на Jib просто се нуждаете от приставката на файла за изграждане на проекта:

Изображение 3: Начинът на Jib за създаване на изображение на докер от Java приложение.

Настройвам

Не е в обхвата на тази публикация да се създаде среда за разработка на Java, но нека да я изстреляме!

  1. Уверете се, че имате инсталирана Java 8+.
  2. Ще използваме maven, така че ако няма, инсталирайте maven 3.5+.
  3. Уверете се, че имате инсталиран докер и ако използвате Linux, вашият потребител има достъп до докер.
  4. Поставете любимата си IDE (затъмнение или идея).

Създайте основно приложение за пролетно зареждане

Това може да стане или чрез пролетния инициализъм, или чрез вашия любим IDE. Ако сте използвали пролетния инициализъм, ще трябва да импортирате новосъздадения проект maven във вашия IDE (eclipse / idea).

Добавете jib-maven-плъгин към pom.xml

За много основно локално съхранено изображение на приложението ви конфигурирайте приставката jib-maven във вашия pom.xml, както следва:

Компилирайте приложението и изградете изображението

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

Отидете в основната папка на проекта чрез терминал и изпълнете:

mvn компилиране jib: dockerBuild

Дневниците на Maven build трябва да съдържат редове като следното:

[ИНФОРМАЦИЯ] - - jib-maven-plugin: 0.10.1: dockerBuild (по подразбиране-клип) @ spring-boot-jib - -
[INFO]
[ИНФОРМАЦИЯ] Съдържане на приложение в демон Docker като springbootjib ...
[ПРЕДУПРЕЖДЕНИЕ] Базовото изображение „gcr.io/distroless/java“ не използва дайджест на конкретно изображение - изграждането може да не се възпроизвежда
[INFO] Получаване на базово изображение gcr.io/distroless/java…
[INFO] Слой за изграждане на зависимости ...
[INFO] Слой за изграждане на ресурси ...
[ИНФОРМАЦИЯ] Създаване на класове слой ...
[ИНФОРМАЦИЯ] Финализиране ...
[INFO]
[INFO] Точка за вход за контейнер, зададена на [java, -cp, / app / ресурси: / app / класове: / app / libs / *, com.jibdemo.SpringBootJibApplication]
[ИНФОРМАЦИЯ] Зареждане в демон на Докер ...
[INFO]
[ИНФОРМАЦИЯ] Вградено изображение в демон на Докер като пролетта на работа

Докато няма грешки и виждаме, че Maven „Вграден образ на демон на Докер като пролетта на работа“, всички сме готови.

Пуснете изображението на докера

В този момент трябва да имаме новото изображение на докер в нашето местно хранилище. Можем да проверим чрез изпълнение на изображение на докер ls и трябва да видим изображение, подобно на това:

springbootjib последни eb4bea693650 преди 3 часа 135MB

Забележете много малкия (135mb) размер на изображението, което се дължи на gcr.io/distroless/java изображението, което Jib използва по подразбиране (ще видим как можем да променим това по-късно).

Така че сега можем да стартираме изображението, както обикновено, като напишете docker run -it springbootjib и проверим дали приложението работи както се очаква.

Конфигуриране на приставката Jib за фина настройка на нашето Docker изображение

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

Например в следната конфигурация на изображението:

  • Изградена е от база на openjdk: alpine (издърпана от Docker Hub)
  • Избута се към localhost: 5000 / springbootjib: 0.0.1-SNAPSHOT, localhost: 5000 / springbootjib: alpine, и localhost: 5000 / springbootjib: последни
  • Работи с повикване на java -Xms256m -Xdebug -cp app / libs / *: app / ресурси: приложение / класове com.jibdemo.SpringBootJibApplication някои аргументи
  • Излага порт 8001 за tcp (по подразбиране) и портове 8002 и 8003 за udp
  • Има етикет (име: springbootjib)
  • Изграден е като OCI формат

Сега можете да изградите изображението отново и да видите разликата в maven log:

[ИНФОРМАЦИЯ] --- jib-maven-plugin: 0.10.1: dockerBuild (по подразбиране-клип) @ spring-boot-jib ---
[INFO]
[ИНФОРМАЦИЯ] Съдържане на приложение в Docker демон като localhost: 5000 / springbootjib: 0.0.1-SNAPSHOT, localhost: 5000 / springbootjib: alpine, localhost: 5000 / springbootjib ...
[ИНФОРМАЦИЯ] Получаване на базово изображение openjdk: alpine ...
[INFO] Слоят за изграждане на зависимости ...
[INFO] Слой за изграждане на ресурси ...
[ИНФОРМАЦИЯ] Създаване на класове слой ...
[INFO] Базовото изображение изисква авт. Опитайте отново за openjdk: alpine ...
[ИНФОРМАЦИЯ] Извличане на идентификационни данни на системния регистър за register.hub.docker.com ...
[ИНФОРМАЦИЯ] Финализиране ...
[INFO]
[INFO] Точка за вход за контейнер, зададена на [java, -Xms256m, -Xdebug, -cp, / app / ресурси: / app / класове: / app / libs / *, com.jibdemo.SpringBootJibApplication]
[ИНФОРМАЦИЯ] Зареждане в демон на Докер ...
[INFO]
[ИНФОРМАЦИЯ] Вградено изображение в Docker демон като localhost: 5000 / springbootjib: 0.0.1-SNAPSHOT, localhost: 5000 / springbootjib: alpine, localhost: 5000 / springbootjib

Забележете в сегмента на дневника по-горе, че плъгинът изтегли изображението openjdk: alpine от Docker Hub, изгради изображението в три различни маркирани версии и ги съхранява в нашето местно хранилище.

Защо се снимах с Джиб

  • Не е необходимо да поддържате Dockerfile, да стартирате Docker демон или дори да се притеснявате за създаването на тлъст JAR с всичките му зависимости.
  • Възползва се от наслояването на изображенията и кеширането на регистъра за постигане на бързи, постепенни надстройки.
  • Може да бъде конфигуриран да създава възпроизводими изображения за изграждане, стига вашите входове да останат същите.

заключение

Използвайки други Maven плъгини като тези от spotify и fabric8, за да създадете docker изображения за java приложения, приветствам Google да вземе въпроса. Има нужда от по-малко файлове, отколкото приставката на fabric8 и (според моето скромно мнение) се чувства по-лесно да се конфигурира, отколкото в плъгинът на Spotify. Със сигурност препоръчвам да го пробвам!

Отказ от отговорност: Това не е статия за сравнение, просто моята гледна точка по въпроса, подкрепена от личен опит.

Винаги можете да прочетете повече от gitub repo на Jib, който има подробна информация относно всички конфигурационни параметри. Благодаря, че прочетохте дотук! Надявам се да ви е харесало! Чувствайте се свободни да оставите отзивите си тук.

За мен

Ей, благодаря, че спряхте. Аз съм независим пълен стек инженер, наблягащ на задния край и devOps. Интересувам се да създавам прототипи / MVP и да разработвам платформи, които мащабират в облака, като изберат да създадат бизнес стойност.

Можете да прочетете повече за мен и моята история тук. Ако искате да обсъдите бизнес или просто да се свържете, изпратете ми имейл: tasos.tsaousis@codedlines.com.