Edited at

AmazonLinuxにJRE8/JDK8を入れたDockerコンテナイメージを作成する


背景


  • AmazonLinuxにJRE(色々な経緯がありver8)が入ったコンテナイメージを作成する


    • 過去の様々な経緯があり 8 です



  • JDK, JREをそれぞれのパッケージ名が混乱したのでメモ

  • それぞれのイメージサイズもメモしておく


JREコンテナイメージ作成


  • JREの方のDockerfileです

  • headlessというのがJREのみ入っています


    • 無印の java-1.8.0-openjdk はiconなどが入っている分容量が大きいらしい



  • 実際はマルチステージビルドで利用することが多いかと思いますが、今回は簡略化してベースイメージで動かします


Dockerfile

FROM amazonlinux:2.0.20181114

RUN yum install -y java-1.8.0-openjdk-headless && yum clean all


  • イメージを作成 & (アンチパターン感ありますが、sshで入って) java, javac のバージョンを確認します

# Dockerコンテナイメージを作成

$ docker build -t amazonlinux-jre8 .
(省略)

# (確認のため) コンテナにsshで入ってversionを確認
$ docker run -it amazonlinux-jre8 sh
sh-4.2# java -version
openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)
sh-4.2# javac -version
sh: javac: command not found


  • 無事、javaコマンドは実行でき、javacコマンドは(当然)インストールされていません


JDKコンテナイメージ作成


  • JDKの方のDockerfileです


  • devel 付きがJDKになります

  • マルチステージビルド側で利用することが多いと思いますが、シンプルにベースイメージで確認します


Dockerfile

FROM amazonlinux:2.0.20181114

RUN yum install -y java-1.8.0-openjdk-devel && yum clean all


  • JRE版と同じくイメージを作成 & java, javac のバージョンを確認します

# Dockerコンテナイメージを作成

$ docker build -t amazonlinux-jdk
(省略)

# (確認のため) コンテナにsshで入ってversionを確認
$ docker run -it amazonlinux-jdk sh
sh-4.2# java -version
openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)
sh-4.2# javac -version
javac 1.8.0_191


  • 無事、java, javac の両方のコマンドが利用可能


サイズを確認



  • docker images コマンドでイメージサイズを取得可能なので取得


    • ベースのamazonlinuxとの差分が、JRE,JDKのパッケージサイズ追加コマンドで生じたもの



$ docker images --format "table {{.Repository}}\t{{.Size}}" | grep amazonlinux

amazonlinux 162MB
amazonlinux-jre8 308MB
amazonlinux-jdk 362MB


まとめ


  • JREしか使わないときは java-1.8.0-openjdk-headless

  • JDKを使うときは java-1.8.0-openjdk-devel

  • サイズの差は約54MB。のためJDKを使う場合はマルチステージビルドを利用したほうが手堅いですね