Google、Javaアプリケーションを簡単にコンテナ化できるオープンソースツール「Jib 1.0.0」をリリースDockerデーモンやDockerfileなしでコンテナ化できる

Googleは、DockerのインストールやDockerデーモンの実行、さらにはDockerfileの作成も行うことなく、Javaアプリケーションをコンテナ化できるオープンソースツール「Jib」を正式リリースした。

» 2019年02月13日 08時00分 公開
[@IT]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

 Googleは2019年2月12日(米国時間)、DockerのインストールやDockerデーモンの実行、さらにはDockerfileの作成を行うことなく、Javaアプリケーションを最小限の労力でコンテナ化できるオープンソースツール「Jib 1.0.0」の正式版の提供開始を発表した。

 Jibプラグインを「Maven」ビルドや「Gradle」ビルドに適用し、ビルドを実行すれば、Jibがそのビルド情報を使って、アプリケーションを迅速かつ効率的、自動的にコンテナ化する。「Jibを使えば、JavaコンテナのビルドはJARのパッケージ化並みに簡単だ」とGoogleは述べている。

 Googleは2018年にJibのβ版をリリースし、今回のJib 1.0.0のリリースまでに、コミュニティーのフィードバックや貢献を踏まえて改良を加えてきた。主な改良点は以下の通り。

WARプロジェクトのサポート

 JavaベースのWebアプリケーションは「WARファイル」としてパッケージ化されていることが多い。Jibは、特別な構成を行わなくても、WARプロジェクトをコンテナ化できるようになった。次のように実行する。

$ mvn package jib:build
Maven
$ gradle jib
Gradle

 コンテナのデフォルトアプリケーションサーバは「Jetty」だが、ベースイメージと「appRoot」を次のように構成して、「Tomcat」のような別のサーバを使うこともできる。

<configuration>
  <from>
    <image>tomcat:8.5-jre8-alpine</image>
  </from>
  <to>
    <image>gcr.io/my-project/my-war-image</image>
  </to>
  <container>
    <appRoot>/usr/local/tomcat/webapps/my-webapp</appRoot>
  </container>
</configuration>
Maven (pom.xml)
jib {
  from.image = 'tomcat:8.5-jre8-alpine'
  to.image = 'gcr.io/my-project/my-war-image'
  container.appRoot = '/usr/local/tomcat/webapps/my-webapp'
}
Gradle (build.gradle)

Skaffoldとの統合

 「Skaffold」は、「Kubernetes」で継続的な開発を行うためのコマンドラインツールだ。GoogleはSkaffoldとJibを統合し、Kubernetesでシームレスに開発を行えるようにした。JibはSkaffoldでビルダーとして利用できる。

 JavaプロジェクトでSkaffoldを使うには、Skaffoldをインストールし、「skaffold.yaml」をプロジェクトに追加する。

skaffold.yaml:
apiVersion: skaffold/v1beta4
kind: Config
build:
  artifacts:
  - image: gcr.io/my-project/my-java-image
    # Use this for a Maven project:
    jibMaven: {}
    # Use this for a Gradle project:
    jibGradle: {}

 Kubernetesマニフェストを「k8s/」ディレクトリに置き、コンテナ仕様におけるイメージ参照を「gcr.io/my-project/my-java-image」と一致させる。

 続いて、次のコマンドでSkaffoldの継続的開発を開始する。

$ skaffold dev --trigger notify

 Skaffoldは、変更を行うたびにアプリケーションの再ビルドと再デプロイの実行に伴う面倒なステップを不要にする。これは、変更を検出するたびに、Jibでアプリケーションをコンテナ化し、Kubernetesクラスタにデプロイすることで実現できる。

JavaでDockerイメージをビルドするJib Core

 Jibは、コンテナイメージをビルドするための独自の汎用(はんよう)ライブラリを使って動作する。このライブラリは「Jib Core」としてリリースされている。JibをMavenやGradleのプラグインとして使うだけでなく、任意のアプリケーションでDockerデーモンを使うことなく、Javaでコンテナ化できる。

 Jib Coreを使うには、次のようにプロジェクトに追加する。

<dependency>
  <groupId>com.google.cloud.tools</groupId>
  <artifactId>jib-core</artifactId>
  <version>0.1.1</version>
</dependency>
Maven (pom.xml)
dependencies {
  implementation 'com.google.cloud.tools:jib-core:0.1.1'
}
Gradle (build.gradle)

 シンプルなDockerイメージをビルドする例を以下に示す。ベースイメージからスタートして、1つのレイヤーを追加し、エントリポイントを設定した上で、リモートレジストリにプッシュしている。

Jib.from("busybox")
   .addLayer(Arrays.asList(Paths.get("helloworld.sh")), AbsoluteUnixPath.get("/"))
   .setEntrypoint("sh", "/helloworld.sh")
   .containerize(
       Containerizer.to(RegistryImage.named("gcr.io/my-project/hello-from-jib")
                                     .addCredential("myusername", "mypassword")));

シンプルなコンテナ化

 Jibでは、正式リリースまでにこれらの改良が行われた。JibによるJavaアプリケーションのコンテナ化は、これまで通り簡単だ。Mavenを使っている場合は、プラグインをpom.xmlに追加する。

<plugin>
  <groupId>com.google.cloud.tools</groupId>
  <artifactId>jib-maven-plugin</artifactId>
  <version>1.0.0</version>
  <configuration>
    <to>
      <image>gcr.io/my-project/my-java-image</image>
    </to>
  </configuration>
</plugin>

 イメージをビルドしてコンテナレジストリにプッシュするには、次のコマンドを使用する。

$ mvn compile jib:build

 Dockerデーモンを実行してビルドする場合は、次のコマンドを使用する。

$ mvn compile jib:dockerBuild

 次のような呼び出しを行えば、pom.xmlを変更せずにアプリケーションをコンテナ化できる。

$ mvn compile com.google.cloud.tools:jib-maven-plugin:1.0.0:build -Dimage=gcr.io/my-project/my-java-image

 GradleでJibを使う場合は、プラグインをbuild.gradleに追加する。

plugins {
  id 'com.google.cloud.tools.jib' version '1.0.0'
}
jib.to.image = 'gcr.io/my-project/my-java-image'

 次のコマンドでアプリケーションをコンテナ化し、コンテナレジストリにプッシュできる。

$ gradle jib

 また、Dockerデーモンを実行してコンテナ化を行える。

$ gradle jibDockerBuild

Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。