Javaアプリケーションを簡単にDocker化できるJibを触ってみた
はい、どーも。モバイルアプリサービス部の吉田です。
今日は、Javaアプリケーションを簡単にDocker化できるツール、Jibを試してみたいと思います。
Jibとは
- Dockerfileを書かなくても、良い感じのDockerfileを生成してくれる
- DockerHub,Amazon ECR,Google Container Registryなどにpushしてくれる
など、いままでJavaアプリケーションをDocker化するにあたっての面倒な作業をやってくれるツールです。 また、既存のJavaアプリケーションに特に手を入れることなく、簡単にDocker化できるのも嬉しいポイントです。
導入方法
JibはMavenやGradleのプラグインが提供されていますので、これ経由で使うのが簡単です。今回はMavenのプラグインを使用しますが、Gradleプラグインでもほぼ同様です。
Docker化するアプリケーションはSpring Initializrで適当なSpring Bootアプリのスケルトンを使用しました。
対象のJavaアプリケーションのpom.xmlのbuildセクションにて、jib pluginを使うように記述を追加します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | < build > < plugins > ... < plugin > < groupId >com.google.cloud.tools</ groupId > < artifactId >jib-maven-plugin</ artifactId > < version >0.9.2</ version > < configuration > < to > < image >hellojib</ image > </ to > </ configuration > </ plugin > </ plugins > </ build > |
これでJibを使う準備は完了ですので、まずはローカルにDockerイメージを登録してみましょう。Dockerイメージを生成しローカルへ登録するにはMavenから jib:dockerBuild
を実行します。
1 | $ mvn compile jib:dockerBuild |
正常に実行されたことを確認したらdocker images
でイメージ一覧に登録されているか確認してみましょう。
Amazon ECRへpushする
次はAmazon ECRへpushできるように設定を行います。予め、ECRのリポジトリは作成しておきます。
まずはECRに対してpushを行えるようamazon-ecr-credential-helperを導入します。
導入自体は簡単で以下のコマンドを実行するだけです。
1 | $ go get -u github.com/awslabs/amazon-ecr-credential-helper/ecr-login/cli/docker-credential-ecr-login |
次に認証情報を設定します。
IAMでECRへpushする権限をもったユーザを作成し、環境変数AWS_ACCESS_KEY_ID
とAWS_SECRET_ACCESS_KEY
をセットします。自分はdirenvを使ってAWS_ACCESS_KEY_ID
とAWS_SECRET_ACCESS_KEY
を設定しました。
amazon-ecr-credential-helperがどの認証情報を参照しているかは、こちらを御覧ください。
その後、JibがECRへpushするようpom.xmlを以下のように修正します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | < build > < plugins > ... < plugin > < groupId >com.google.cloud.tools</ groupId > < artifactId >jib-maven-plugin</ artifactId > < version >0.9.2</ version > < configuration > < to > < image >xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/hellojib</ image > </ to > </ configuration > </ plugin > </ plugins > </ build > |
imageの部分をECRのリポジトリに変更するだけです。その後Jibのjib:buildタスクを実行することで、ECRへpushが行われます。
1 | $ mvn compile jib:build |
指定できるオプションなど
Jibではその他にもさまざまなオプションがあり、pom.xmlにこれらを指定することで生成されるDockerfileを変更することができます。
例えば
1 2 3 4 5 | < configuration > < from > < image >openjdk:alpine</ image > </ from > </ configuration > |
とすることで、ベースイメージを変えたり
1 2 3 4 5 6 7 | < configuration > < container > < ports > < port >8080</ port > </ ports > </ container > </ configuration > |
としてEXPOSE 8080
することもできます。