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