1、雲計算中虛擬化技術和容器技術到的關系
通過一個關於房間和住人的小問題,我們來初步的理解一下虛擬化技術和容器技術的關系。
首先有一個大前提就是一個房間只允許一家人來住。這個房間很大,500平米,有床、有廚房、有衛生間。你一家一共就3口人,就你一家人住,別人家只好再找房子,好浪費,資源利用率好低啊。(房子就相當於計算機的硬件基礎)
首先是虛擬化上場了,把這個大房子從隔成20間小房子。注意不是那種真砌牆的方式來分隔,而是比如拉上布簾的方式。(不是把硬件真正的分割,而是按需求,虛擬分割。)注意,每個小“房間”是一個獨立的空間,都有床、有廚房、有衛生間。這樣就可以住20戶人家了。這樣資源利用率真就提高了,但還是有問題,廚房、衛生間並不是這20家人都會同時使用的啊。(廚房、衛生間相當於Guest OS
和Host OS
操作系統)
此時,該容器上場了!還是剛才500平的那個大房間。容器也是分隔,由於並不是每家人都要同時使用廚房、衛生間。所以可以把剛才的房間隔成50間,每家只有床是獨立的。廚房和衛生間則采用公共的,按使用情況進行分配即可。這樣就能住50家人了,資源利用率真就大大提高了。(只留下Host OS
操作系統,去掉了占用過多無效資源的Guest OS
操作系統)
所以說,容器是一種輕量級的虛擬化技術,在同等配置的服務器上,容器技術能夠輕松更多的應用。對於每一個容器,他們其實是使用同一個宿主機的內核和系統庫文件(相當於剛才說的公開衛生間和廚房)。
2、虛擬機和容器對比
這里我們直接通過虛擬機和容器技術的剖析圖來分析,就更容易看出容器虛擬化是如何在效率上完勝虛擬機的。
下面兩張圖很清楚的說明了虛擬機和容器差別:
由於沒有了虛擬操作系統和虛擬機監視器這兩個層次,大幅減少了應用程序運行帶來的額外消耗。
更准確的來說,所有在容器中的應用程序,其實完全運行在了宿主操作系統中,與其他真實運行在其中的應用程序,在指令運行層面是完全沒有任何區別的。
下表總結了使用Docker容器技術與傳統虛擬機技術的特性比較。
3、虛擬化技術和容器技術區別
傳統虛擬化技術從操作系統層下手,目標是建立一個可以用來執行整套操作系統的沙盒獨立執行環境,習慣以虛擬機(Virtual Machine
)來稱呼。
Container
技術則是直接將一個應用程序所需的相關程序代碼、函式庫、環境配置文件都打包起來建立沙盒執行環境,Container
技術產生的環境就稱為Container
。
(1)兩者具體區別
- 虛擬機需要安裝操作系統(安裝
Guest OS
)才能執行應用程序,而Container
內不需要安裝操作系統就能執行應用程序 Container
技術不是在OS
外在建立虛擬環境,而是在OS
內的核心系統層來打造虛擬執行環境,透過共享Host OS
的作法,取代一個一個Guest OS
的功用。Container
也因此被稱為是OS
層的虛擬化技術。
(2)Container是輕量級虛擬化技術
Container
技術采取共享Host OS
的作法,而不需在每一個Container
內執行Guest OS
,因此建立Container
不需要等待操作系統開機時間,不用1分鍾或幾秒鍾就可以啟用,遠比需要數分鍾甚至數十分鍾才能開啟的傳統虛擬機來的快。
參考: