2016-12-20 3 views
2

Ist es wahr zu sagen, dass in hohem Maße, was jetzt in Docker Container getan wird, kann auch in Java mit JVM getan werden, wenn jemand wollte?Docker Container vs Java Virtual Machine

Neben der Möglichkeit, eine Anwendung in Ihrer eigenen Sprache zu schreiben und viel Anpassungsflexibilität zu haben, macht Docker im Grunde das, was Java seit Ewigkeiten mit seiner virtuellen Maschine macht? h. es stellt eine ausführbare Umgebung zur Verfügung, die von dem zugrundeliegenden OS getrennt ist.

+1

Die kurze Antwort ist nein. Die lange Antwort ist zu lang für SE. – mustaccio

Antwort

2

Im Allgemeinen können Docker-Container nicht "innerhalb von Java" ausgeführt werden, da Docker dazu dient, die Anwendung zu kapseln, und "innerhalb von Java" der Code ist, der nach dem Start der JVM geladen wird.

Die JVM wird bereits ausgeführt, wenn sie die Klasse analysiert, die nach der main-Methode sucht. Eine Kapselung auf Prozessebene ist daher nicht möglich, da der Prozess (die JVM) bereits ausgeführt wird.

Java verfügt über Kapselungstechniken, die Schutz zwischen verschiedenen Java-Elementen bieten (siehe z. B. Klassenladerhierarchien in Tomcat); aber diese isolieren nur "Anwendungsplugins" voneinander, der Hauptprozess, der sie alle ausführt, ist Tomcat, was wirklich ein Programm ist, das in eine bereits laufende JVM geladen wird.

Dies bedeutet nicht, dass Sie die beiden nicht kombinieren können, um ein Objekt zu erreichen. Es bedeutet lediglich, dass die Arten der Isolierung zwischen den beiden Produkten nicht austauschbar sind.

+0

Ich verstehe, was Sie über die Kapselung sagen, aber am Ende ist nicht, dass nur zwei verschiedene Möglichkeiten, um das gleiche zu erreichen, d. H. Eine Anwendung auf einer virtuellen Maschine ausgeführt haben? –

+0

Es gibt nicht zwei Möglichkeiten, das Gleiche zu tun, es sind zwei Arten, verschiedene Dinge zu tun, verwirrt bis zu dem Punkt, an dem du denkst, dass sie gleich sind. Betrachten Sie das Java-Programm als "shared library", das von der JVM verwendet wird. Betrachten Sie Docker als portablen Wrapper um eine ausführbare Datei. Da die JVM die ausführbare Datei ist, würde es keinen Sinn machen, docker um die gemeinsam genutzte Bibliothek zu legen. Sie würden sie um die ausführbare Java-Datei (JVM) und die gemeinsam genutzte Bibliothek (Ihre Hauptstart-JAR-Datei) legen. –

1

was jetzt in Docker Behälter getan wird, kann auch mit Jvm jemand wollte

Kurze Antwort in Java erfolgen: Nein. Sie könnten wickeln einen Docker Behälter um Ihre JVM, aber Sie können nicht wickeln ein JVM um einen Andock-Container, nicht trivial.

Docker tun im Grunde, was Java seit Ewigkeiten mit seiner virtuellen Maschine macht? h. es stellt eine ausführbare Umgebung zur Verfügung, die von dem zugrundeliegenden OS getrennt ist.

Docker-Container bieten Isolierung von anderen Containern, ohne eine Virtualisierungsschicht einzuführen. Daher sind sie anders und leistungsfähiger als VMs.

Verwandte Themen