2016-12-20 18 views
2

ドッキング用のコンテナで行われていることは、誰かが望むならば、jvmを使ってJavaで行うこともできると言えるのは本当ですか?ドッカーコンテナ対Java仮想マシン

あなた自身の言語でアプリケーションを書くことができ、多くのカスタマイズの柔軟性を持つことに加えて、ドッカーは基本的に、何年もJavaの仮想マシンで何をしてきたのですか?すなわち、基礎となるOSとは別個の実行可能な環境を提供する。

+1

短い答えはいいえです。長い答えはSEにとっては長すぎます。 – mustaccio

答えて

2

一般に、Dockerはアプリケーションをカプセル化し、JVMが起動した後に読み込まれるコードは「Java内」であるため、Dockerコンテナは「Java内」では実行できません。

JVMは、mainメソッドを検索するクラスを解析するときに既に実行されています。プロセス(JVM)がすでに実行されているため、プロセスレベルでのカプセル化は実行できません。

Javaには、さまざまなJava要素間の保護を提供するカプセル化技術があります(例として、Tomcatのクラスローダー階層を参照)。しかし、それらは単に "アプリケーションプラグイン"を互いに隔離するだけです。それらを実行している主なプロセスは、実際にはすでに実行中のJVMにロードされるプログラムであるTomcatです。

これは2つの製品を組み合わせることができないということではなく、2つの製品間で提供される分離の種類が交換できないことを意味します。

+0

私はカプセル化について何を言っているのか理解していますが、最終的に同じことを達成するための2つの異なる方法、つまりアプリケーションを仮想マシン上で実行する方法はありませんか? –

+0

同じことをする2つの方法ではありません。異なることをする2つの方法であり、同じだと思う点まで混乱しています。 Javaプログラムは、JVMによって使用される「共有ライブラリー」であると考えてください。 dockerは、実行可能ファイルの周りに移植性の高いラッパーであると考えてください。 JVMは実行可能ファイルなので、共有ライブラリの周りにドッカーを置くことは意味がありません。Java実行可能ファイル(JVM)と共有ライブラリ(メインの起動JARファイル)に配置します。 –

1
今ドッキングウィンドウコンテナで行われているもの

も、JVMの誰かとJavaで行わ

したかったことができ

短い答え:いいえ。あなたはあなたのJVMの周りにドッカコンテナをラップすることができますが、あなたがラップすることはできませんドッキング・コンテナの周りのJVM。

ドッカーは基本的に何年もの間、その仮想マシンで何をやっているのですか?すなわち、基礎となるOSとは別個の実行可能な環境を提供する。

Dockerコンテナは、仮想化レイヤを導入せずに他のコンテナからの分離を提供します。したがって、VMとは異なり、VMよりもパフォーマンスが優れています。