Использование Jib - контейнеровозов Java с открытым исходным кодом от Google.

К настоящему времени многие из нас использовали бы Docker для развертывания приложений / микросервисов Java. И почему бы и нет, в наши дни это де-факто становится стандартом для развертывания приложений.

Однако нужно правильно изучить и понять Docker, чтобы применять лучшие практики. Многие из нас теряются в сложностях Dockerfile.

В этой статье я собираюсь рассказать об очень крутом проекте с открытым исходным кодом, который позволяет нам создавать и развертывать докеризированные Java-приложения, используя простые сборки Maven / Gradle.

Типичный процесс докеризации Java-приложений

Если вы разработчик Java и хотите докеризовать свое приложение, вы, как правило, выполните следующие действия:

  1. Создайте толстую банку, используя сборку Maven / Gradle.
  2. Напишите Dockerfile.
  3. Создайте образ из файла Docker.
  4. Отправьте образ в реестр контейнеров.

Как разработчик Java, шаг 1 довольно прост, но когда дело доходит до следующих шагов, большинство из нас полагается на контент, доступный в Интернете. Типичный Dockerfile может выглядеть так, как показано ниже:

FROM open-jdk:8-jdk-alpine 
COPY target/myapp-*.jar /app.jar
ENTRYPOINT java -jar /app.jar

Если я использую этот Dockerfile, я смогу создать образ Docker своего приложения и использовать его, но это может быть не самый эффективный образ, который я мог бы создать.

Если я буду искать больше в Интернете, я, возможно, смогу улучшить Dockerfile, следуя лучшим практикам Dockerfile.

С указанным выше файлом Dockerfile возникают различные проблемы.

  1. Здесь используется базовый образ JDK вместо JRE. При запуске вашего приложения требуется JRE, а не JDK. Если мы изменим это, то сможем значительно уменьшить размер изображения. Размер образа JRE составляет примерно 55 МБ, тогда как размер образа JDK - 192 МБ.
  2. Приложение построено с использованием толстой банки, что означает, что для этого приложения будет создан только один слой в образе Docker. Если мы вносим какие-либо изменения, то каждый раз, когда мы нажимаем весь уровень приложения, его нужно перестраивать. Мы можем улучшить это, разделив зависимости и код приложения на разные уровни. Разделить зависимости можно с помощью следующей команды maven: mvn dependency:copy-dependencies -DoutputDirector=target/dependencies.

Итак, после улучшения Dockerfile будет выглядеть, как показано ниже:

FROM open-jdk:8-jre-alpine 
COPY target/dependencies /app/dependencies
COPY target/resources /app/resources
COPY target/classes /app/classes
ENTRYPOINT java -cp /app/dependencies/*:/app/resources/:/app/classes hello.Application

Введение в Jib

Jib - это контейнерный Java-контейнер с открытым исходным кодом от Google, который позволяет разработчикам создавать Docker-образы своих Java-приложений из сборок Maven / Gradle.

Как видно выше, создание образа Docker - сложный процесс, если вы не знакомы с лучшими практиками. Jib пытается решить эту проблему, но предоставляет плагин для сборки Maven и Gradle.

Итак, если вам нужно создать Docker-образ Java-приложения, вам просто нужно сделать две вещи.

  1. Добавьте зависимость Maven в pom.xml.
<plugin>
 <groupId>com.google.cloud.tools</groupId>
 <artifactId>jib-maven-plugin</artifactId>
 <version>1.8.0</version>
   <configuration>
   <to>
   <image><path-to-container-registry>/hello-jib</image>
   </to>
  </configuration>
</plugin>

2. Выполните следующую команду:

mvn compile jib:build

Это приведет к внутреннему применению лучших практик Docker, разделит ваше приложение на несколько уровней, построит образ и отправит его в репозиторий контейнера.

Преимущества Jib

Использование Jib дает различные преимущества.

  • Как Java-разработчику все, что мне нужно сделать, это сосредоточиться на Java и не беспокоиться о сложностях Docker.
  • Поскольку это часть сборок Maven / Gradle, внедрение и развертывание происходит быстро.
  • Поскольку Jib использует лучшие практики Docker, создаваемые образы бывают легкими, стандартными и многоуровневыми.
  • Вам не нужен демон Docker для создания и отправки образов Docker.

Докер против Джиба

Вот некоторые результаты прямого сравнения двух методов.

использованная литература

  1. Https://speakerdeck.com/coollog/build-containers-faster-with-jib-a-google-image-build-tool-for-java-applications
  2. Https://github.com/GoogleContainerTools/jib