Dockerで色んなJDKを試す

9月25日にJDK 11がリリースされました。リリースサイクルも変わり、今後は半年サイクルで新しいバージョンが出てきます。「Javaが有償化される」という間違った情報が一人歩きしているようですが…それは誤った情報なので、以下辺りをご確認ください。

- [JDK: 新しいリリースモデル解説（ver.2.1）](https://www.slideshare.net/oracle4engineer/jdk-ver21)
- [Introduction to Java 11: Support and JVM Features #jjug](https://www.slideshare.net/YujiKubota/introduction-to-- java-11-support-and-jvm-features)
- [【GlassFish勉強会レポート】各JDKベンダの動向を知ってJava 11に備えよう](https://gihyo.jp/news/report/2018/10/0501)
- [Javaのサポートについてのまとめ](https://qiita.com/nowokay/items/edb5c5df4dbfc4a99ffb)

異なるJDK、異なるバージョンを触る機会が今後増えそうですが、それぞれインストールしたり、設定したりするのは大変です。ちなみに今自分がメインで使っているPCは、OpenJDK 11を入れていますが、binのPathやJAVA_HOMEはOracle JDK 8のままだったりします(^^;

そんなときは、やはりDockerがいいのかな、ということで、Docker HubにあるJDKを調べて実際に動かしてみました。

動作確認に使ったコードは以下です。環境はDocker Comminitu Edition 18.0.6.1-ce-win73で確認しました。

```java:HelloWorld.java
public class HelloWorld{
   public static void main(String[] args){
     System.out.println("Hello World!!");
     System.out.println(System.getProperty("java.version"));
     System.out.println(System.getProperty("java.vendor"));
     System.out.println(System.getProperty("java.vm.name"));
   }
}
```

なお、一通り試した後に気づいたのですが、[「最適な Java の Docker イメージを選びたい」](https://k11i.biz/blog/2018/05/17/base-docker-images-for-java/)でそれぞれの特徴など細かくまとまっています。本記事は単純に実行方法と結果のみまとめています。実行で指定したバージョンは必ずしも最新ではないので、詳細はDocker Hubのリンク先をご確認ください。

# OpenJDK

https://hub.docker.com/r/_/openjdk/

```docker
docker run -v C:\Docker:/tmp -w /tmp openjdk:11-jdk javac HelloWorld.java
```

```docker
docker run -v C:\Docker:/tmp -w /tmp openjdk:11-jdk java HelloWorld
```

```
Hello World!!
11
Oracle Corporation
OpenJDK 64-Bit Server VM
```

以下のような注意点があるようです。
[DockerコミュニティがメンテしているOpenJDKイメージを使って遭遇した問題](https://matsumana.info/blog/2018/10/13/openjdk11-docker/)

# AdoptOpenJDK

https://hub.docker.com/r/adoptopenjdk/openjdk11/

```docker
docker run -v C:\Docker:/tmp -w /tmp  adoptopenjdk/openjdk11:latest javac HelloWorld.java
```

```docker
docker run -v C:\Docker:/tmp -w /tmp  adoptopenjdk/openjdk11:latest java HelloWorld
```

```
Hello World!!
11
Oracle Corporation
OpenJDK 64-Bit Server VM
```

# Zulu

https://hub.docker.com/r/azul/zulu-openjdk/

```docker
docker run -v C:\Docker:/tmp -w /tmp  azul/zulu-openjdk javac HelloWorld.java
```

```docker
docker run -v C:\Docker:/tmp -w /tmp  azul/zulu-openjdk java HelloWorld
```

```
Hello World!!
1.8.0_181
Azul Systems, Inc.
OpenJDK 64-Bit Server VM
```

# IBM

https://hub.docker.com/_/ibmjava/

```docker
docker run -v C:\Docker:/tmp -w /tmp ibmjava:sdk-alpine javac HelloWorld.java
```

```docker
docker run -v C:\Docker:/tmp -w /tmp ibmjava:sdk-alpine java HelloWorld
```

```
Hello World!!
1.8.0_181
IBM Corporation
IBM J9 VM
```

# おまけ

Oracle JDKについては、JREが[Docker Store](https://store.docker.com/images/oracle-serverjre-8)にあって、[イメージが利用](http://chiroito.hatenablog.jp/entry/2017/04/20/015220)できるようです。9以降ないのかな…？

DockerはMicrosoft Learnが勉強になりました。

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">コンテナ系だいぶ出遅れててDockerあまりちゃんと触ってなかったので連休を使って勉強中。色んなサイトみたけど、Microsoft Learnの「コンテナーの概要」がいいなー。コンソールで手を動かしながらできるのが、やはり良い。 <a href="https://t.co/nyq75nYbWG">https://t.co/nyq75nYbWG</a> <a href="https://t.co/a67wsyZXFV">pic.twitter.com/a67wsyZXFV</a></p>&mdash; キクタロー@エバスク役職超ボッター (@kikutaro_) <a href="https://twitter.com/kikutaro_/status/1049179865017069569?ref_src=twsrc%5Etfw">2018年10月8日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>