AmazonLinux2のコンテナにAmazon Coretto8,11をインストールして、alternativesで切り替える

AmazonLinux2のコンテナに、AmazonCorretto8,11をインストールして、alternatives で切り替えられるようにします。

環境

  • ホスト : amzn2-ami-ecs-hvm-2.0.20200430-x86_64-ebs (ami-03179588b2f59f257)
    • ECSインスタンスのイメージ利用していますが、Dockerがインストールされている環境であればなんでもOKです。
  • DockerVersion : 18.09.7
  • コンテナイメージ : amazonlinux : latest(2.0.20200406.0)

作業

Docker Imageの取得

Docker HubよりDockerイメージを取得します。

Docker Hub

> docker pull amazonlinux:latest

Dockerの起動

> docker run -it amazonlinux bash

Dockerに入ったら実行しているOSの確認

> cat /etc/os-release

NAME="Amazon Linux"
VERSION="2"
ID="amzn"
ID_LIKE="centos rhel fedora"
VERSION_ID="2"
PRETTY_NAME="Amazon Linux 2"
ANSI_COLOR="0;33"
CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2"
HOME_URL="https://amazonlinux.com/"

念のため、Javaが存在しないことを確認

>bash-4.2# java -version

bash: java: command not found

Corretto8 インストール

Corretto8 をインストールしていきます。
参考 : Amazon Linux 2 に Amazon Corretto 8 をインストールする手順 - Amazon Corretto

yumレポジトリの有効化

> amazon-linux-extras enable corretto8

インストール

> yum install -y javajava-1.8.0-amazon-corretto java-1.8.0-amazon-corretto-devel

動作確認

>  java -version

openjdk version "1.8.0_252"
OpenJDK Runtime Environment Corretto-8.252.09.1 (build 1.8.0_252-b09)
OpenJDK 64-Bit Server VM Corretto-8.252.09.1 (build 25.252-b09, mixed mode)
> javac -version

javac 1.8.0_252

altenatives 確認

インストールする際に自動的にaltenativesにイメージが登録されます。

> alternatives --display java

java - status is manual.
 link currently points to /usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/jre/bin/java
/usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/jre/bin/java - priority 100
 slave jre: /usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/jre
 slave jjs: /usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/jre/bin/jjs
 slave keytool: /usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/jre/bin/keytool
~~
> alternatives --display javac

javac - status is manual.
 link currently points to /usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/bin/javac
/usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/bin/javac - priority 100
 slave java_sdk: /usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64
 slave appletviewer: /usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/bin/appletviewer
 slave extcheck: /usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/bin/extcheck
 slave idlj: /usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/bin/idlj
 slave jar: /usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/bin/jar
 slave jarsigner: /usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/bin/jarsigner
 slave javadoc: /usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/bin/javadoc
 slave javah: /usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/bin/javah
 slave javap: /usr/lib/jvm/java-1.8.0-amazon-corretto.x86_64/bin/javap
~~

Corretto11 インストール

次にCorretto11をインストールします。 参考: Amazon Linux 2 における Amazon Corretto 11 のインストール手順 - Amazon Corretto

インストール

> yum install -y  java-11-amazon-corretto-headless

Corretto11に切り替え

alternatives を利用して Corretto11に切り替えます。

> alternatives --config java
> alternatives --config javac

動作確認

> java --version

openjdk 11.0.7 2020-04-14 LTS
OpenJDK Runtime Environment Corretto-11.0.7.10.1 (build 11.0.7+10-LTS)
OpenJDK 64-Bit Server VM Corretto-11.0.7.10.1 (build 11.0.7+10-LTS, mixed mode)
> javac --version
javac 11.0.7

これで作業は完了です。後はexitとして、docker commit でイメージを保存してください。

Dockerfile

大したことしてませんが、一応DockerFileおいておきます。

FROM amazonlinux:latest

# Install Corretto11
RUN yum install -y  java-11-amazon-corretto-headless

# Install Corretto8
RUN amazon-linux-extras enable corretto8
RUN yum install -y javajava-1.8.0-amazon-corretto java-1.8.0-amazon-corretto-devel

最後に

簡単に環境に合わせて、Correttoのバージョンを切り替えるられるコンテナができました。いろいろ検証して、失敗したらすぐ捨てられるしほんとコンテナ最高ですねー。