[Docker, Java] Official Docker Image for Oracle Java and the OpenJDK Roadmap for Containers

原文はこちら
https://blogs.oracle.com/developers/official-docker-image-for-oracle-java-and-the-openjdk-roadmap-for-containers

世の中クラウドがもてはやされていますね。
Containers, Containers Everywhere But Not a Drop to Drink!
https://blogs.oracle.com/developers/containers-everywhere
数千、数百万ものインスタンスにスケールする、一貫した、再作成可能な環境をセットアップすることがクラウドでの重要な課題の一つです。インスタンス/アプリケーション/サービス実行環境のばらつきは、メンテナンスコストに反映され、環境が同一であることを信頼できないためにトラブルシューティングはより複雑です。

Oracle Server JREのDockerイメージがDocker Storeからご利用いただけるようになりました。
Oracle Java 8 SE (Server JRE)
https://store.docker.com/images/oracle-serverjre-8
多くの競合技術はこの課題に対処するために長年にわたって開発がなされてきました。 いくつかの技術によって、OSインストールのスクリプト作成や一貫性のある環境の維持が容易になっています(この例としてPuppetがあります)し、ハードウェア仮想化により、(比較的)うまく定義され、隔離されたアプリケーション実行環境を提供するVMの設定が可能ですが、VMはいささか重量級です。

Quick recap of Docker

同じようにDockerが出てきました。実際にはDockerはいくつかの点で違うのですが、人々がDockerとつきあう重要な要素をあげてみましょう。
  • Dockerイメージフォーマットやイメージ作成ツール
  • DockerがLinux上で提供する実行環境では、Linuxカーネルの機能を活用
こうした機能を全て活用かつ組み合わせることにより、Dockerはうまく定義され、分離され、管理可能な「コンテナ」を提供しています。このコンテナは、効果的にハードウェアVMが提供するものと同様の一般的なメリットをオーバーヘッド無しで提供します。具体的には、コンテナはすべて同じLinuxカーネルインスタンス上で実行され/共有されるため、本来なら複製が必要な多くのリソースを共有できます。

Dockerイメージは、実際のDockerコンテナインスタンスを作成するためのパッケージ形式で、このイメージには実行するアプリケーション、当該アプリケーションの構成(の一部)だけでなく、アプリケーションが必要としている依存コンポーネントも含まれています。例えば、Webサービス用のDockerイメージには、実際のWebサービスコードだけでなく、依存するフレームワークやライブラリ、Java Runtime(JRE)、アプリケーションが必要とする任意のユーザー空間ライブラリが含まれています。

Towards a simple & lightweight deployment environment

ちょっと触れた数千、数百万ものインスタンスについて覚えてらっしゃるでしょうか。数百万のインスタンスにスケールする場合、ベースとなるものを合理化し簡素化することが重要になることがすぐにわかることでしょう。 依存性が少ないほど、うまくいきます。ベースイメージが小さければ小さいほど、ディスク上の静的なフットプリントとメモリの動的なフットプリントの両方が占有されるスペースが少なくなります。

本格的かつ一般的なLinuxディストリビューションは通常、あらゆる種類のアプリケーションとユースケースを対象としており、それらをサポートしますが、今実行しようとしていることが正確にわかっていれば、その柔軟性のすべては必要でしょうか。

Alpine Linuxのスローガンは以下のようなものです。
"Small. Simple. Secure. Alpine Linux is a security-oriented, lightweight Linux distribution based on musl libc and busybox.”(Small, Simple, Secure - Alpine Linuxは、musl libcとbusyboxをベースとしたセキュリティ指向、軽量なLinuxディストリビューションです。)
Alpine Linux
https://www.alpinelinux.org/
Alpineが"musl"と呼ばれる小さなCライブラリを使っています。これは通常はGNU Cライブラリ(glibc)を使う傾向にある他のLinuxディストリビューションとは異なります。なぜそうしているのでしょうか。muslのWebページの内容を見てみましょう。
musl libc
http://www.musl-libc.org/ 
"musl is lightweight, fast, simple, free, and strives to be correct in the sense of standards-conformance and safety.”(muslは軽量かつ高速、シンプルで、フリー、標準ベースで案戦という点で正しくあろうと努力しています)
では、busyboxのこの記述はどうでしょうか。
BusyBox: The Swiss Army Knife of Embedded Linux
https://www.busybox.net/about.html
"BusyBox combines tiny versions of many common UNIX utilities into a single small executable.”(BusyBoxは、よく使われる多くのUNIXユーティリティを一つの小さな実行バイナリにまとめたものです)
そうですね、Alpineは基本的に小さなCライブラリを使っており、それをLinux/UNIXユーティリティと組み合わせています。便利ですね。基本的には、通常のアプリケーションを使用でき、Alpine Linuxで実行すると、そのすべての利点が得られる、ということです。

What does Alpine Linux/musl mean to Java?

JDKのコードベースは移植性が高く、いくつかの異なるオペレーティングシステム、CPUアーキテクチャ、コンパイラをサポートしています。 しかし、JDKのソースコードはまだAlpine Linuxに移植されていません。より具体的には、musl Cライブラリに移植されていません。つまり、Alpine Linuxの場合、JDKのソースコードの観点で異なり、目立っている点はCライブラリです。

OpenJDK "Project Portola"の目標は、JDKをAlpine Linuxに移植、特に "musl" Cライブラリに提供することです。 プロジェクトのCall-for-Voteは2月22日に提示され、2週間後(3月9日)に承認されました。(mercurial)コードリポジトリ、メーリングリストなどを含めて、OpenJDKプロジェクトのインフラストラクチャが新たに設定されました。必要なコード変更の統合作業がまもなく開始されます。
Portola Project
http://openjdk.java.net/projects/portola/

Frequently Asked Questions

Oracle Support TeamはDockerコンテナ上で動作するJava SEをサポートしますか?
はい。Oracle Java SEは長年にわたってあらゆるコンテナプラットフォーム上で動作してきました。Oracle SupportはDockerやその他のコンテナプラットフォームをお使いのお客様をご支援します。

Docker固有のOracle Java SEライセンスの考慮事項はありますか?
いいえ。Dockerはコンテナプラットフォームであり、他のOS、仮想化環境、パッケージング形式と比較して、利用や再配布における固有および特別なライセンス上の制約はありません。
Oracle Binary Code License Agreement for the Java SE Platform Products and JavaFX
http://java.com/license
Oracle JDKはDockerエコシステムで幅広く利用され、採用されています。

Oracle Java SEをDocker上で実行する際の推奨事項をOracleは提供していますか?
はい、GitHubに掲載しています。
Oracle Java on Docker
http://github.com/oracle/docker-images/tree/master/OracleJava

Dockerをサポートするために直近で何かJavaに対する変更がありましたか?
はい。Java 8 Update 131(2017年4月18日リリース)には、JavaとDocker間でのメモリやプロセッサのよりよい統合を実現する、数多くの変更が含まれています。JDK 8ではデフォルトでスレッドとメモリ設定はホストOS由来ですが、JDK 9ではJVMはコンテナを認識します。あらゆるケースで、スレッドとメモリの制限を明示的にコマンドラインで管理・制御できます。機能強化の詳細は以下をご覧ください。

Docker Image for Oracle Server JRE

DockerでOracle Server JREを試してみる場合には、Docker Storeで個人カタログに追加してから、以下のコマンドを実行することができます。
Oracle Java 8 SE (Server JRE) - Docker Store
https://store.docker.com/images/oracle-serverjre-8
$ docker pull store/oracle/serverjre
Happy coding!

0 件のコメント:

コメントを投稿