DockerでOracle Javaを実行する

docker

ども、大瀧です。
「30億のデバイスで走る」でおなじみのJavaなわけですが、ライセンスの関係でこれまでDockerでの利用がグレーという状況でした。以下の記事が詳しいです。

一方で、この問題を解決するためにOracle社での取り組みが進み、手元でランタイムをダウンロードしてEULAに同意しつつ、Dockerイメージをビルドする手法がOracleの中の人によって紹介されています。

現在開催中のdockercon 17では、Docker社とOracle社の協調によりDocker Hub(Docker Store経由)でのOracleプロダクトの公開がアナウンスされました。今回はこちらの手順に沿って、Oracle Java SE 8をDockerで実行する手順をご紹介します。

OpenJDKについては、従来からDocker Hubで利用可能です。

動作検証環境

  • マシン : Macbook / macOS Sierra
  • Docker : バージョン17.03.1-ce

なお、Docker Storeのアカウント(≒Docker Hubアカウント)が必要ですので、あらかじめ登録しておきましょう *1

1. Docker Storeでの購入(無償)

Docker Storeにアクセスし、「oracle」で検索します。

dockerjava01

いくつかのコンテナイメージが検索結果として表示されるので、「Oracle Java 8 SE (Server JRE)」をクリックします *2

dockerjava02

Developer Tierとして$0.00とあるので、費用はかからないようです。画面右側の[Get Content]ボタンをクリックします。

dockerjava03

ログイン画面が表示されるので、ユーザー名およびパスワードを入力してログインし、Contact Informationを埋めます。右側のユーザー利用要件のチェックをオンにし、[Get Content]をクリックしてコンテナイメージの購入が完了します。

dockerjava04

My Contentのページに遷移するので、「Oracle Java 8 SE (Server JRE)」の項目の[Setup]ボタンをクリックします。

dockerjava05

Docker Engineで指定するべきコマンド例が表示されるのでコピーしておきましょう。

dockerjava06

2. Docker EngineでのPullとRun

では、手元のDocker EngineでOracle Javaイメージのダウンロードとコンテナ実行を試してみます。 Docker Storeアカウントでのログインを済ませておきましょう。

$ docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: takipone
Password: <パスワードを入力>
Login Succeeded
$

では、Dockerイメージstore/oracle/serverjre:8のダウンロードと実行を試してみます。

$ docker pull store/oracle/serverjre:8
8: Pulling from store/oracle/serverjre
915686a9e0a3: Pull complete
7f624fa50d1a: Pull complete
Digest: sha256:568df4bca1d8cb85938da94e46bcaf2b98fa682fe7046cd980a60aba64ac8668
Status: Downloaded newer image for store/oracle/serverjre:8
$ docker run -ti store/oracle/serverjre:8 java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
$

あっさり動きました。手元で試したときのJavaのバージョンはbuild 1.8.0_131-b11でした。

ちなみに、docker loginでログインしていないマシンで試すとイメージが見つからないというエラーになりました。

$ docker pull store/oracle/serverjre:8
Pulling repository docker.io/store/oracle/serverjre
Error: image store/oracle/serverjre:8 not found
$

まとめ

Docker Storeを利用した、Oracle JavaをDocker Engineで動かす手順をご紹介しました。地味〜なところですが、Oracle JavaがDockerで手軽に利用できるのはJava開発に役立つシーンが少なからずあるのでは、と思っています。

脚注

  1. メールが受信できるメールアドレスのみ必要で、費用はかかりません
  2. Oracle DB EEが並んでいてすごく気になりますが、今回はスルーします

AWS Cloud Roadshow 2017 福岡