Java
AWS
AmazonLinux
docker
dockerfile

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を使う場合はマルチステージビルドを利用したほうが手堅いですね