區別:1、docker運行幾乎沒有額外的性能損失,而jvm會有額外的cpu、內存損耗;2、docker移植性輕便、靈活、使用與linux,而jvm比較笨重,和虛擬機耦合度較高;3、docker存儲的鏡像小,而jvm存儲的鏡像龐大。
本教程操作環境:linux7.3系統、docker-1.13.1版、Dell G3電腦。
jvm和docker的區別是什么
docker有比虛擬機更少的抽象層。docker不需要Hypervisor實現硬件資源虛擬化,運行在docker容器上的程序直接使用的是實際物理機的硬件資源。因此在cpu、內存利用率上docker將會在效率上有明顯的優勢。
docker利用的是宿主機的內核,而不需要Guest OS。因此創建一個容器時,不需要和虛擬機一樣重新加載一個操作系統內核。從而避免引尋、加載操作系統內核返回時耗時耗資源的過程,當新建一個虛擬機時,虛擬機軟件需要加載Guest OS,返回新建過程是分鐘級別的。而新建一個docker容器只需要幾秒鐘。
Docker和JVM相比:
-
Docker運行幾乎沒有額外性能損失,JVM操作系統額外的CPU、內存消耗
-
Docker移植性輕便、靈活、適應于Linux,而JVM笨重,和虛擬機耦合度高
-
Docker存儲的鏡像小,便于存儲和傳輸。JVM鏡像龐大。
docker這類“容器”技術是模擬了一整個操作系統,它是靜態存在的,可以支撐任何相同平臺的應用程序執行,并且容器本身是進程無關的
jvm是一個特定代碼的執行平臺,它是運行時才存在的,只能支撐特定代碼的執行,并且必須是在jvm進程內
容器通常是平臺相關的,Docker這樣針對Linux內核的容器不能直接被windows兼容;而jvm這類虛擬機是平臺無關的各個平臺幾乎都是一致的容器執行本機代碼,也就是所謂的“機器碼”;
jvm執行特定標準的偽代碼(即jvm字節碼)容器與主機是隔離的,沒有主機的映射,程序不能直接訪問主機資源;
jvm和主機不隔離,可以自己映射和使用主機資源容器是靜態存在的、自包含的,有文件系統,有可執行程序,不一定非要啟動一個進程;
jvm只有作為進程啟動才有意義,他是獨立的,沒有自己的文件系統,也不包含應用程序,只是從入口開始按照要求解釋來自文件或其他源提供的特定代碼
總體來說JVM這樣的虛擬機和Docker是有一些技術淵源的,他們都是虛擬化的主機環境
只是JVM是一種更加上層的、應用化的、特異性的虛擬執行環境。Docker是偏向操作系統層面的的,通用性的執行環境
推薦學習:《docker視頻教程》