Javaアプリケーションを簡単にDocker化できるJibを触ってみた

162件のシェア(すこし話題の記事)

はい、どーも。モバイルアプリサービス部の吉田です。

今日は、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を使うように記述を追加します。

<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 を実行します。

$ mvn compile jib:dockerBuild

正常に実行されたことを確認したらdocker imagesでイメージ一覧に登録されているか確認してみましょう。

Amazon ECRへpushする

次はAmazon ECRへpushできるように設定を行います。予め、ECRのリポジトリは作成しておきます。

まずはECRに対してpushを行えるようamazon-ecr-credential-helperを導入します。

導入自体は簡単で以下のコマンドを実行するだけです。

$ go get -u github.com/awslabs/amazon-ecr-credential-helper/ecr-login/cli/docker-credential-ecr-login

次に認証情報を設定します。

IAMでECRへpushする権限をもったユーザを作成し、環境変数AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYをセットします。自分はdirenvを使ってAWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYを設定しました。

amazon-ecr-credential-helperがどの認証情報を参照しているかは、こちらを御覧ください。

その後、JibがECRへpushするようpom.xmlを以下のように修正します。

<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が行われます。

$ mvn compile jib:build

指定できるオプションなど

Jibではその他にもさまざまなオプションがあり、pom.xmlにこれらを指定することで生成されるDockerfileを変更することができます。

例えば

<configuration>
  <from>
    <image>openjdk:alpine</image>
  </from>
</configuration>  

とすることで、ベースイメージを変えたり

<configuration>
  <container>
    <ports>
      <port>8080</port>
    </ports>
  </container>
</configuration>  

としてEXPOSE 8080することもできます。