簡體   English   中英

Docker 容器與 Java 虛擬機

[英]Docker container vs Java Virtual Machine

如果有人願意,現在在 docker 容器中所做的事情在很大程度上也可以在 java 中使用 jvm 來完成,這是真的嗎?

除了能夠用您自己的語言編寫應用程序並具有很大的定制靈活性之外,docker 是否基本上可以做 Java 多年來對其虛擬機所做的事情? 即它提供了與底層操作系統分離的可執行環境。

通常Docker容器不能在“Java內”完成,因為Docker用於封裝應用程序,而“Java內”是JVM啟動后加載的代碼。

JVM 在解析將搜索main方法的類時已經在運行。 因此無法在進程級別進行封裝,因為進程(JVM)已經在運行。

Java 具有封裝技術,可以在各種 Java 元素之間提供保護(例如,請參見 Tomcat 中的類加載器層次結構); 但是那些只是將“應用程序插件”彼此隔離開來,運行它們的主要進程是 Tomcat,它實際上是一個加載到已經運行的 JVM 中的程序。

這並不意味着您不能將兩者結合起來實現某個目標,只是意味着這兩種產品之間提供的隔離類型不可互換。

現在在 docker 容器中完成的工作也可以在 java 中使用有人想要的 jvm 完成

簡短回答:不可以。您可以將 docker 容器包裝在 JVM 周圍,但不能將 JVM 包裝在 docker 容器周圍,這很重要。

docker 基本上做 Java 多年來一直在用它的虛擬機做的事情? 即它提供了與底層操作系統分離的可執行環境。

Docker 容器在不引入虛擬化層的情況下提供與其他容器的隔離。 因此,它們與 VM 不同且性能更高。

Docker 可以執行 Java JVM 無法完成的一些事情,但是,使用 Java 編程並在 JVM 上運行將提供在 Docker 容器中運行的幾個優點。 我從事一個大型 Java 項目,這個項目已有 20 年歷史。 這些年來,我們一直在發展和修復我們的應用程序,沒有任何工具或兼容性問題。 此外,作為獎勵,該應用程序是獨立於平台的。 它的幾個組件可以在 Windows 和 Linux 中運行。 因為最初沒有努力構建多平台應用程序,所以有一個組件不能在 Linux 上運行。 但是讓它在那個平台上工作相對容易。 使用 C 或 C++ 和相關工具鏈做同樣的事情會困難得多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM