Як докерізувати додаток для весняного завантаження за допомогою програми Jib Google

Зображення 1: Бездоришні зображення докера Java з Jib!

Привіт! Нещодавно працюючи на платформі, що базується на весні, я розглядав, яким шляхом піти на докеризацію мікросервісу. Тому я натрапив на Jib, досить новий підхід до цього питання, розроблений Google.

У цій публікації йдеться про використання Jib, а точніше плагіна-jib-maven для створення контейнерного додатка для весняного завантаження.

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

Що таке Джиб

Що 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 повинні містити рядки, такі:

[INFO] - - jib-maven-plugin: 0.10.1: dockerBuild (за замовчуванням-cli) @ spring-boot-jib - -
[ІНФОРМАЦІЯ]
[ІНФОРМАЦІЯ] Додавання вмісту до демона 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] Завантаження в демон Докера…
[ІНФОРМАЦІЯ]
[ІНФОРМАЦІЯ] Вбудований образ у демона Докера як Springbootjib

Поки немає помилок, і ми бачимо, що Maven "Вбудований образ в демон Докера як Springbootjib" ми все налаштовані.

Запустіть зображення докера

На даний момент у нас повинно з’явитися нове зображення докера в нашому локальному сховищі. Ми можемо перевірити, виконавши docker image ls, і нам слід побачити подібне до цього зображення:

springbootjib остання eb4bea693650 3 години тому 135MB

Зауважте дуже маленький розмір зображення (135 Мб), що обумовлено зображенням gcr.io/distroless/java, яке Jib використовує за замовчуванням (ми побачимо, як ми можемо змінити це пізніше).

Тож тепер ми можемо запустити зображення як зазвичай, набравши докер-run -it springbootjib і перевірити, чи працює програма як слід.

Налаштування плагіну Jib для тонкої настройки нашого зображення Docker

Ми можемо копати глибше і налаштовувати додатково додаток Jib, щоб відповідати декільком загальним сценаріям, таким як вхід у сховище докера, оголення портів, вибір конкретного базового зображення тощо.

Наприклад, у наступній конфігурації зображення:

  • Побудований з основи openjdk: альпійська (витягнута з Docker Hub)
  • Переміщено до localhost: 5000 / springbootjib: 0.0.1-SNAPSHOT, localhost: 5000 / springbootjib: alpine, and localhost: 5000 / springbootjib: останні
  • Запускається за допомогою виклику java -Xms256m -Xdebug -cp app / libs / *: app / ресурси: app / класів com.jibdemo.SpringBootJibApplication some args
  • Виставляє порт 8001 для tcp (за замовчуванням) та порти 8002 та 8003 для udp
  • Має етикетку (назва: springbootjib)
  • Побудований у форматі OCI

Тепер ви можете знову створити зображення та побачити різницю в журналах maven:

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

Зауважте в сегменті журналу вище, що плагін витягнув зображення openjdk: alpine з Docker Hub, побудував зображення до трьох різнотипних версій та зберігав їх у нашому локальному сховищі.

Чому я зняв знімок з Джибом

  • Вам не потрібно підтримувати Dockerfile, запускати демон Docker або навіть турбуватися про створення жирової JAR з усіма її залежностями.
  • Скористається шарами зображень та кешування реєстру для швидкого, поступового нарощування.
  • Можна налаштувати для створення відтворюваних зображень збірки до тих пір, поки ваші входи залишаються однаковими.

Висновок

Використовуючи інші плагіни Maven, як-от такі з spotify та fabric8 для створення зображень докерів для додатків java, я вітаю те, що Google взявся за цю справу. Для цього потрібно менше файлів, ніж плагін тканини8, і (на мою скромну думку) налаштовується легше, ніж налаштовувати плагін. Я звичайно рекомендую спробувати!

Відмова: Це не стаття порівняння, це лише моя точка зору на цю справу, підкріплену з особистого досвіду.

Ви завжди можете ознайомитись з детальніше про github repo Jib, який містить ретельну інформацію про всі параметри конфігурації. Дякуємо, що прочитали це далеко! Сподіваюся, вам сподобалось! Не соромтесь залишати свої відгуки тут.

Про мене

Гей, дякую, що завітали. Я незалежний інженер з повним стеком, наголошую на задньому кінці та devOps. Мені цікаво створити прототипи / MVP та розробити платформи, які масштабуються в хмарі, вирішивши створити цінність для бізнесу.

Більше про мене та мою історію ви можете прочитати тут. Якщо ви хочете обговорити бізнес або просто зв’язатися, надішліть мені електронний лист: tasos.tsaousis@codedlines.com.