原文はこちら
https://blogs.oracle.com/developers/official-docker-image-for-oracle-java-and-the-openjdk-roadmap-for-containers
世の中クラウドがもてはやされていますね。
Oracle Server JREのDockerイメージがDocker Storeからご利用いただけるようになりました。
Dockerイメージは、実際のDockerコンテナインスタンスを作成するためのパッケージ形式で、このイメージには実行するアプリケーション、当該アプリケーションの構成(の一部)だけでなく、アプリケーションが必要としている依存コンポーネントも含まれています。例えば、Webサービス用のDockerイメージには、実際のWebサービスコードだけでなく、依存するフレームワークやライブラリ、Java Runtime(JRE)、アプリケーションが必要とする任意のユーザー空間ライブラリが含まれています。
本格的かつ一般的なLinuxディストリビューションは通常、あらゆる種類のアプリケーションとユースケースを対象としており、それらをサポートしますが、今実行しようとしていることが正確にわかっていれば、その柔軟性のすべては必要でしょうか。
Alpine Linuxのスローガンは以下のようなものです。
OpenJDK "Project Portola"の目標は、JDKをAlpine Linuxに移植、特に "musl" Cライブラリに提供することです。 プロジェクトのCall-for-Voteは2月22日に提示され、2週間後(3月9日)に承認されました。(mercurial)コードリポジトリ、メーリングリストなどを含めて、OpenJDKプロジェクトのインフラストラクチャが新たに設定されました。必要なコード変更の統合作業がまもなく開始されます。
はい。Oracle Java SEは長年にわたってあらゆるコンテナプラットフォーム上で動作してきました。Oracle SupportはDockerやその他のコンテナプラットフォームをお使いのお客様をご支援します。
Docker固有のOracle Java SEライセンスの考慮事項はありますか?
いいえ。Dockerはコンテナプラットフォームであり、他のOS、仮想化環境、パッケージング形式と比較して、利用や再配布における固有および特別なライセンス上の制約はありません。
Oracle Java SEをDocker上で実行する際の推奨事項をOracleは提供していますか?
はい、GitHubに掲載しています。
Dockerをサポートするために直近で何かJavaに対する変更がありましたか?
はい。Java 8 Update 131(2017年4月18日リリース)には、JavaとDocker間でのメモリやプロセッサのよりよい統合を実現する、数多くの変更が含まれています。JDK 8ではデフォルトでスレッドとメモリ設定はホストOS由来ですが、JDK 9ではJVMはコンテナを認識します。あらゆるケースで、スレッドとメモリの制限を明示的にコマンドラインで管理・制御できます。機能強化の詳細は以下をご覧ください。
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)多くの競合技術はこの課題に対処するために長年にわたって開発がなされてきました。 いくつかの技術によって、OSインストールのスクリプト作成や一貫性のある環境の維持が容易になっています(この例としてPuppetがあります)し、ハードウェア仮想化により、(比較的)うまく定義され、隔離されたアプリケーション実行環境を提供するVMの設定が可能ですが、VMはいささか重量級です。
https://store.docker.com/images/oracle-serverjre-8
Quick recap of Docker
同じようにDockerが出てきました。実際にはDockerはいくつかの点で違うのですが、人々がDockerとつきあう重要な要素をあげてみましょう。- Dockerイメージフォーマットやイメージ作成ツール
- DockerがLinux上で提供する実行環境では、Linuxカーネルの機能を活用
- リソース(CPU、メモリ、I/Oなど)を管理するためのcgroups
- OS環境の種々のパートの仮想化および分離のための名前空間(cgroups namespace isolation/名前空間の分離)
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 LinuxAlpineが"musl"と呼ばれる小さなCライブラリを使っています。これは通常はGNU Cライブラリ(glibc)を使う傾向にある他のLinuxディストリビューションとは異なります。なぜそうしているのでしょうか。muslのWebページの内容を見てみましょう。
https://www.alpinelinux.org/
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 JavaFXOracle JDKはDockerエコシステムで幅広く利用され、採用されています。
http://java.com/license
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でのCPU制限
getAvailableProcessors may incorrectly report the number of cpus in Docker container
https://bugs.openjdk.java.net/browse/JDK-8140793 - Dockerでのメモリ制限の実験的サポート
[linux] Experimental support for cgroup memory limits in container (ie Docker) environments
https://bugs.openjdk.java.net/browse/JDK-8170888 - Dockerでのメモリ制限
physical memory does not see Docker resource limits
https://bugs.openjdk.java.net/browse/JDK-8146115
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
Happy coding!$ docker pull store/oracle/serverjre