Як запустити Java-жирові банки в Docker, Kubernetes та Openshift

запустити

У світі, де важлива маневреність, прагнення зменшити витрачений час у конфігураціях середовища є очевидним у багатьох технологіях. Деякі методи, такі як віртуальні машини, які дозволяють розповсюдження попередньо налаштованих зображень, існують десятиліттями, тоді як інші, як контейнери Linux, є пізнішими.

Навіть такі платформи, як Java, дозволяють розробникам пакувати всі залежності, ресурси та конфігураційні файли в один файл JAR (Java Archive). Те, що спочатку почалося як спосіб виконання виконуваних класів Java у Java SE (Standard Edition), зараз набуло популярності і в Enterprise. Обіцянка забезпечити доступні для запуску сервери у "жирному банку", який містить не тільки вашу програму, але також час роботи сервера та його ресурси (бібліотеки, джерела даних, конфігурацію транзакцій тощо); такі проекти, як WildFly Swarm, Spring Boot та Vert.x стають дуже популярними в "Java Java".

Незважаючи на те, що ці проекти дозволяють "упаковувати" час роботи сервера, еластичне середовище, таке як "хмарні обчислення", потребує ще одного "шару" обгортання, і контейнери Linux ідеально підходять для нього. Коли ви загортаєте свою «жирну банку» в контейнер, ви також можете забезпечити власне середовище виконання для вашого файлу JAR, що забезпечує Операційну систему, віртуальну машину Java, а також можна збагатити JMX (Java Management Extensions), що уможливити легкий моніторинг JVM. Ви також можете встановити прапорці конфігурації, які дозволяють налагоджувати тощо.

Рішення

Для контейнерів Linux одним із методів запуску «жирних банок» є використання fabric8/java-jboss-openjdk8-jdk як базового образу докера. Це зображення надає Open JDK 1.8 та сценарій запуску (run.sh), що дозволяє агенту Jolokia - віддаленому JMX із JSON через HTTP - а також дозволяє використовувати змінні середовища для модифікації поведінки JVM відповідно до того, що визначається Третій фактор «Дванадцятифакторної програми»: зберігати конфігурацію в середовищі

Візьмемо, наприклад, мікросервіс WildFly-Swarm "привіт", який називається "hola", який повертає "привіт світ" іспанською мовою. Вихідний код для цієї програми доступний на Github, тут: https://github.com/redhat-helloworld-msa/hola.

Примітка: Для повного прикладу MSA (Microservices Architecture), який інтегрує такі технології, як WildFly Swarm, Spring-boot, Vert.x та NodeJS, перегляньте документацію, доступну за адресою: https://github.com/redhat-helloworld-msa/helloworld-msa

Зауважте, що файл Docker у програмі “hola” дуже простий. Вам просто потрібно встановити ім'я вашого файлу JAR у змінній середовища JAVA_APP_JAR, а про все подбає сценарій запуску:

Примітка: Змінна середовища AB_OFF = true відключає використання Jolokia. Він нам потрібен для банок для жиру WildFly-Swarm через відому помилку.

Це базове зображення також дозволяє налаштувати запуск процесу Java за допомогою багатьох інших змінних середовища, які ви можете побачити у файлі readme проекту. Ось кілька прикладів:

  • JAVA_OPTIONS - опції, які можна додати під час виклику
  • JAVA_MAIN_CLASS - Основний клас, який слід використовувати як аргумент для Java .
  • JAVA_APP_JAR - jar-файл із відповідним маніфестом, щоб його можна було запустити за допомогою java -jar, якщо не встановлено $ JAVA_MAIN_CLASS. У всіх випадках цей файл jar також додається до шляху до класу.
  • JAVA_APP_NAME - Ім'я для використання в процесі
  • JAVA_CLASSPATH - шлях до класу для використання. Якщо не вказано, скрипт перевіряє файл $/classpath і використовує його вміст буквально як шлях до класу. Якщо цього файлу немає, додаються всі банки в директорію програми (класи: $/*).
  • JAVA_ENABLE_DEBUG - Якщо встановлено віддалену налагодження, буде ввімкнено
  • JAVA_DEBUG_PORT - Порт, що використовується для віддаленої налагодження. За замовчуванням: 5005

Після створення образу Docker за допомогою команди “docker build -t redhatmsa/hola”. ви зможете запустити контейнер за допомогою Docker, Kubernetes та Openshift.

Все, що потрібно для зростання вашої кар’єри.

З вашим безкоштовним членством у програмі Red Hat Developer розблокуйте нашу бібліотеку шпаргалок та електронних книг про розробку додатків наступного покоління.

Докер

Це не так просто?

Але як змінити конфігурацію контейнера? Змінні середовища потрібно встановити перед виконанням контейнера, тому, якщо ви хочете виконати цю програму з 1 ГБ пам'яті Heap, ви можете просто зробити:

Кубернетес

Це саме зображення можна використовувати всередині Kubernetes. Щоб запустити контейнер з 1 Гб купи, виконайте:

Відкритий зсув

Подібною командою для розгортання цього образу в Openshift буде:

Додаткова порада для Openshift: Якщо ви хочете оновити конфігурацію, просто оновіть змінну середовища в конфігурації розгортання “hola”. Конфігурація розгортання подбає про заміну всіх запущених підрозділів новими на нову конфігурацію.

Висновок

Замість жорсткого кодуванняCMD java -jar ”Усередині файлу Docker, використання fabric8/java-jboss-openjdk8-jdk як базового образу докера дозволяє використовувати існуючий час виконання JDK 1.8 із зовнішніми конфігураціями JVM - файл Docker для вашого додатку стає надзвичайно простим. Такі функції, як віддалена налагодження та моніторинг, можуть бути легко ввімкнені без необхідності модифікувати існуюче зображення.

Щоб отримати додаткову інформацію, пов’язану з контейнерами (та багато іншого), зареєструйтесь сьогодні на веб-сайті розробників Red Hat.