Враховуючи важливість контейнеризації у розробці платформ, компанії завжди прагнуть автоматизувати та покращити життєвий цикл своїх програм для забезпечення якості й ефективності.
Однією з проблем створення образів Docker є створення якісних файлів Docker. Критерії включають швидкість і розмір запуску контейнера, структуру і стандарт Dockerfile, безпеку та спеціальні позначки для оптимізації конфігурації JVM. Зазвичай розробники застосунків створюють та обслуговують ці файли Docker і не завжди можуть мати відповідну підготовку.
На щастя, спільнота з відкритим кодом знайшла кілька корисних рішень, якими поділився Cloud Native Now.
Jib
Jib, проєкт із відкритим вихідним кодом від Google, оптимізує контейнеризацію, даючи змогу розробникам створювати образи контейнерів Java, не вимагаючи досвіду Docker або редагування Dockerfile.
Інструмент доступний через плагіни Maven і Gradle у вигляді бібліотеки та інтерфейсу командного рядка. Він оптимізує процес створення, використовуючи шарування.
Інструмент лише перебудовує та розширює рівні програми, які змінилися, що призводить до швидшого й ефективнішого створення зображень.
Крім того, він підтримує багатомодульні проєкти, дозволяючи розробникам легко контейнеризувати складні програми Java. А також автоматично обробляє залежності між модулями та забезпечує ефективне створення образу кожного модуля.
Коли ваш образ буде готовий, інструмент інтегрується з реєстрами контейнерів, уможливлюючи безпечне створення та надсилання зображень. А оскільки Jib не покладається на локальний демон Docker, його можна використовувати в різних середовищах, включаючи локальні машини розробки, конвеєри CI/CD і хмарні сервіси збірки. Ця гнучкість дозволяє легко інтегрувати Jib у наявні робочі процеси.
Після налаштування використовувати Jib на Maven так просто:
# Builds to a container image registry.
$ mvn compile jib:build
# Builds to a Docker daemon.
$ mvn compile jib:dockerBuild
Проєкт добре підтримується і, маючи 13 тисяч зірок на GitHub, безперечно є фаворитом спільноти!
Buildpacks
Якщо вам подобається ідея Jib, то вам точно сподобається Buildpacks. Концепція, яка полягає в переході від коду застосунку до запущеного образу, спочатку була створена Pivotal і Heroku, а згодом перетворилася на Cloud Native Buildpacks, якими керує CNCF.
Як і Jib, його дуже легко використовувати за допомогою однієї команди, і для упаковки вашої програми Java не потрібно знати Dockerfile. Розробники можуть використовувати пакет CLI, плагін Maven або плагін Gradle.
Buildpacks пропонують ті самі функції, що й Jib, із кількома додатковими, такими як можливість генерувати software bill of materials (SBOM), розширений механізм кешування та можливість легко оновлювати базові зображення без необхідності їх перебудови.
Buildpacks сумісні з більшістю сучасних мов, таких як Node.js, .NET Core, Go, Python, PHP і Ruby.
Щоб створити Buildpack, вам потрібен базовий образ, який ви можете створити самостійно або використати образ, створений багатьма постачальниками, такими як Google, Heroku та Paketo.
Перевага використання цих зображень полягає в тому, що ви можете скористатися знаннями цих компаній і спільнот, які створюють їх за допомогою найкращих практик для кожного стека. Крім того, вони мають швидкий час виконання, коли справа доходить до оновлення будь-якої ОС або виправлення безпеки бібліотеки.
Подібно до Jib, після встановлення ви можете створити образ контейнера програми Java за допомогою однієї команди:
pack build samples/java --path java/maven
Використання Jib або Buildpacks для створення образів контейнерів Java не тільки значно пришвидшує роботу та гарантує, що ваші образи створені правильно, але й автоматизує процес. Тобто ви можете інтегрувати його за допомогою DevOps як частину безперервної доставки.
Читайте також на ProIT про те, кому вдалося розпочати ІТ-карʼєру у 2023 році. Аналітика Mate academy по junior-айтівцях.
Підписуйтеся на ProIT у Telegram, щоб не пропустити жодну публікацію!