jib を使って Java アプリケーションを超簡単にコンテナ化!
もっと簡単に Java アプリケーションを動かす Docker イメージをつくれたら…
そんな悩みを解決してくれるのが、jib というツールです。
モバイルソリューショングループの arai.ya です。こんにちは。
先日、Google が jib の GA リリースを発表しました。この記事では、jib の基本的な使い方を見ていきます。
jib とは?
jib は、Google がオープンソースとして公開している、Java アプリケーションを実行する Docker コンテナイメージを超簡単に作成するためのツールです。Maven や Gradle のプラグインとしてインストールし使用します。
従来 Java アプリケーションをコンテナ化しようとすると、Docker 環境を用意して、Dockerfile を書いて、イメージをビルドして、リポジトリにプッシュして、…と意外に面倒で時間がかかる作業が発生していました。
jib を使うと、Docker 環境をローカルにインストールする必要はありません。なんと Dockerfile を書く必要もありません。とても簡単に Docker イメージを作成できるので、開発者はアプリケーションのコードを書くという本来の役割に集中できますね。
jib は昨年からベータ版として公開されていましたが、先日ついにGA版がリリースされました。
それでは、さっそくつかってみましょう。
jib をつかってみよう!
今回は、Spring Boot の簡単なサンプルアプリケーションをコンテナイメージ化してみます。
次のものが用意されている前提です。
- Git クライアント
- Google Cloud Platform プロジェクト
- Docker Desktop などローカルで Docker を動かせる環境(無くても大丈夫!)
以下のような流れで、jib でどんなことができるのかを見ていきましょう。
- サンプルコードの取得
- jib で簡単に Docker イメージをつくる
- jib で簡単につくった Docker イメージを GCP で動かしてみる
1. サンプルプロジェクトの取得
この Spring Boot のサンプルアプリケーションを使用します。
ソースコードを任意のディレクトリにクローンします。
git clone https://github.com/spring-guides/gs-spring-boot.git
cd gs-spring-boot/complete/
まずは、普通に jar をつくってアプリケーションを起動してみましょう。
./gradlew build && java -jar build/libs/gs-spring-boot-0.1.0.jar
ウェブブラウザで http://localhost:8080
にアクセスすると、
このような画面が表示されれば成功です。Ctrl-C
などでアプリケーションを終了してください。
それでは、jib を使ってこのアプリケーションを Docker イメージにしてみます。
2. jib で簡単に Docker イメージをつくってローカルで動かしてみる
まずは、ローカルで Docker イメージを作成してみます。(ローカルに Docker 環境が無い方は、ここはスキップして次へ進んでください。)
jib の gradle プラグインを使用するため、 build.gradle
内、 buildscript
ブロックの下に、以下を追記します。
plugins {
id 'com.google.cloud.tools.jib' version '1.0.0'
}
jib {
to {
image = 'play-with-jib/gs-spring-boot'
}
}
次のコマンドを実行します。
./gradlew jibDockerBuild
これだけで Docker イメージの出来上がりです!
作成したイメージからコンテナを起動して確認してみましょう。
docker run -it --rm -p 8080:8080 play-with-jib/gs-spring-boot
ウェブブラウザで http://localhost:8080
を開いてみます。
コンテナが正常に起動すると、先ほどと同じ画面が表示されます。
3. jib で簡単に Docker イメージをつくって GCP 上で動かしてみる
ここまでで、とても簡単に Java アプリケーションを Docker イメージ化できることがわかりました。次は、GCP の Dockerリポジトリ(Container Registry)にイメージをプッシュし、そのイメージからコンテナを GCP 上で起動してみます。
予め、使用するプロジェクトで GCE API と Container Registry API を有効化しておいてください。
jib が Container Registry へ Docker イメージをプッシュするために、GCP プロジェクトへの認証が必要になります。今回は、サービスアカウントを作成して認証を行います。
用意した GCP プロジェクトのサービスアカウントコンソールを開きます。
サービスアカウントを作成します。
適当な名前のサービスアカウントをつくって、
ここでサービスアカウントに「ストレージ管理者」の権限を与えてください。(Container Registry にイメージをプッシュするために必要です。)
キーを JSON 形式でダウンロードします。
ダウンロードした JSON ファイルは、 build.gradle
と同じディレクトリに配置します。
"GCPプロジェクトID"
と"さっきダウンロードしたJSONファイル名"
は適宜読み替えてください。
plugins {
id 'com.google.cloud.tools.jib' version '1.0.0'
}
jib {
to {
image = 'gcr.io/"GCPプロジェクトID"/gs-spring-boot'
auth {
username = '_json_key'
password = file('"さっきダウンロードしたJSONファイル名".json').text
}
}
}
以下のコマンドを実行すると、Docker イメージの作成から、用意した GCP プロジェクトの Container Registry へのプッシュまで、自動で行ってくれます。
./gradlew jib
Container Registry コンソールで、イメージが登録されていることを確認します。
Container Registry に登録したイメージから、Compute Engine 上にコンテナを起動してみましょう。
Compute Engine コンソールから、新しく VM インスタンスを作成します。
ここで、VM にコンテナをデプロイするオプションがあるので、これにチェックを入れ、コンテナイメージには、先程つくって Container Registry にプッシュしたイメージ名を指定します。
今回の Java アプリケーションは 8080 ポートでアクセスするので、ファイアウォールに 8080 ポートの通信を許可するよう設定を追加します。
アクセスするための IP アドレスをメモしておきます。
ウェブブラウザで 外部IP:8080
にアクセスすると…
コンテナが起動しているのが確認できました。とても簡単ですね。
ひととおり遊び終わったら、作成したインスタンスを削除するのを忘れずに。
おわりに
jib を使うことで、Java アプリケーションをとても簡単にコンテナ化できることがわかりました。
GAになったので、これから Java アプリケーションを Docker に乗せたいなーと考えている方は、ぜひ jib の利用を検討してみてください。