LoginSignup
1
0

More than 1 year has passed since last update.

JibのDockerベースイメージのバージョンを固定してみた

Last updated at Posted at 2022-06-21

はじめに

こんにちは!毎日あれこれくだらないことを思い巡らすシステムエンジニアのfengdidiです。
本日はJibのDockerベースイメージのバージョンを固定する方法をご紹介させていただきます。

Dockerベースイメージのバージョンを固定する理由

先日、Google Jibを使ってSpringbootのプロジェクトをデプロイしていました。

Jibは、Javaアプリケーションの構成を読み取り、ビルドプロセスの中でJDKが入っているベースイメージにJavaアプリケーションを加えてコンテナイメージを生成し、Dockerコンテナのレジストリへの登録まで自動的に行ってくれるビルドツールです。

Jibは非常に便利ですが、JibはデフォルトでDockerベースイメージを固定しないので、Jibのバージョンにより、ビルドする時に使うDockerベースイメージは違う可能性があります。

Jibの公式ドキュメントによりますと、

Starting from version 3.2, the default base image is the official eclipse-temurin image on Docker Hub. Note that Eclipse Temurin by Adoptium is the successor of AdoptOpenJDK. (For versions 3.0 and 3.1, the default is the official adoptopenjdk image.) For WAR projects, the default is the official jetty image on Docker Hub.

要するに、Jib3.2以上の場合はeclipse-temurinというOpenJDKが入っているベースイメージは使われているのですが、3.0及び3.1の場合はadoptopenjdkが使われているようです。

ここで仮にJibのバージョンをアップグレードすると、ビルドする際に使うベースのDockerイメージも勝手にバージョン変更されます。開発環境だと別に気にならないとは思いますが、本番環境の場合は嫌だと思われる方が多いのではないでしょうか。本番環境は安定性が一番大事なので、やはり皆さんはできるだけ本番環境に安定させたいですよね。

それでは、Dockerベースイメージのバージョンの固定方法を見てみましょう。

Dockerベースイメージのバージョンを固定する

※今回の開発環境はSpringboot、Gradle、Jibになります。

手順は3つあります。

  1. GradleでJavaのバージョンを指定する
  2. ベースイメージのイメージ名とタグを固定する
  3. ベースイメージのハッシュまで固定する

1. GradleでJavaのバージョンを指定する

まずは、下記のようにJavaのバージョンを指定しましょう。

build.gradleファイルに下記のソースコードを追加します。

sourceCompatibility = 11
targetCompatibility = 11

こうすると、Javaのバージョンを11に固定できます。Jibはビルドする時にこの設定を見て、とりあえずJavaメジャーバージョン11のベースイメージを使うようにします。

2. ベースイメージのイメージ名とタグを固定する

Javaのベースイメージは色んな種類があるので、Javaメジャーバージョンを固定することだけでは勿論足りないと思いますので、次はベースイメージのイメージ名とタグを固定してみましょう。

まずは、固定するイメージ名とタグを決めなければなりません。私の場合はJibの公式ドキュメントが推奨するイメージ名とタグを使用しようと思いますので、イメージ名はeclipse-temurinにします。次はイメージのタブを決めます。

ちなみに私は、以下の3つの条件があるので、Dockerhubにあるeclipse-temurinの公式サイトに訪問して、11-jre-alpineを選びました。

  1. LinuxベースのDockerイメージを使いたい
  2. JDKではなく、より軽量なJREを使いたい
  3. Java11を使いたい

そして、このイメージ名とタグを設定します。

build.gradleファイルのビルドの部分に下記のような設定を加えます。


jib {
  from.image = 'eclipse-temurin:11-jre-alpine' // こちらはイメージ名とタグです。
  ...
}

3. ベースイメージのハッシュまで固定する

ベースイメージのイメージ名とタグを固定すれば、Dockerイメージの出品先及びJavaのメジャーバージョンは固定されます。
但し、それでも足りないと思う方はいらっしゃるでしょう.
例えば、Javaメジャーバージョンを11に固定しても、細かいバージョン番号(小数点以下の数字)を固定していないので(時間によって変わる)、昨日検証環境にリリースした時に、Java11の最新バージョン番号は11.0.9であったので、検証環境のJavaバージョンは11.0.9になりました。そして、ちょうど本日はJavaバージョン11.0.10が出ました。そして明日、本番環境にリリースすれば、本番環境のJavaバージョンは11.0.10になるわけです。

そうなると、検証環境のJavaバージョンと本番環境のバージョンは一致しなくなってしまいます。場合によっては、それは危険な可能性があるので、次は細かいバージョンまで固定してみましょう。

Dockerのイメージは、SHA Digestという唯一無二の識別子であるので、SHA DigestをさらにGradleの設定ファイルに設定すると、Dockerのイメージのバージョンを確実に固定できます。
ソースで言うと、下記のようなイメージです。

jib {
  from.image = 'eclipse-temurin:11-jre-alpine@sha256:5fa1c745e68287a0f6fdd68aefbb89f139bd6a028007a22c6ed8e8b6be00457f' // こちらはイメージ名とタグとダイジェストです。
  ...
}

ここまでにすれば、Jibビルドする時に必ず同じベースイメージ、OS及びJavaバージョンを使えるようになります。

最後に

以上です~!最後までご覧頂きありがとうございます!
記事内容への意見などがあれば是非コメント欄にお願いします!
なお、Qiitaへの投稿は初めてなので色々な齟齬があるかもしれませんが、お手柔らかにお願い致します〜!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0