『現學現忘』Docker相關概念 — 8、虛擬化技術和容器技術的關係

繁華似錦Fighting發表於2022-03-09

1、雲端計算中虛擬化技術和容器技術到的關係

通過一個關於房間和住人的小問題,我們來初步的理解一下虛擬化技術和容器技術的關係。

首先有一個大前提就是一個房間只允許一家人來住。這個房間很大,500平米,有床、有廚房、有衛生間。你一家一共就3口人,就你一家人住,別人家只好再找房子,好浪費,資源利用率好低啊。(房子就相當於計算機的硬體基礎)

首先是虛擬化上場了,把這個大房子從隔成20間小房子。注意不是那種真砌牆的方式來分隔,而是比如拉上布簾的方式。(不是把硬體真正的分割,而是按需求,虛擬分割。)注意,每個小“房間”是一個獨立的空間,都有床、有廚房、有衛生間。這樣就可以住20戶人家了。這樣資源利用率真就提高了,但還是有問題,廚房、衛生間並不是這20家人都會同時使用的啊。(廚房、衛生間相當於Guest OSHost OS作業系統)

此時,該容器上場了!還是剛才500平的那個大房間。容器也是分隔,由於並不是每家人都要同時使用廚房、衛生間。所以可以把剛才的房間隔成50間,每家只有床是獨立的。廚房和衛生間則採用公共的,按使用情況進行分配即可。這樣就能住50家人了,資源利用率真就大大提高了。(只留下Host OS作業系統,去掉了佔用過多無效資源的Guest OS作業系統)

所以說,容器是一種輕量級的虛擬化技術,在同等配置的伺服器上,容器技術能夠輕鬆更多的應用。對於每一個容器,他們其實是使用同一個宿主機的核心和系統庫檔案(相當於剛才說的公開衛生間和廚房)。

2、虛擬機器和容器對比

這裡我們直接通過虛擬機器和容器技術的剖析圖來分析,就更容易看出容器虛擬化是如何在效率上完勝虛擬機器的。

下面兩張圖很清楚的說明了虛擬機器和容器差別:

image

由於沒有了虛擬作業系統和虛擬機器監視器這兩個層次,大幅減少了應用程式執行帶來的額外消耗。

更準確的來說,所有在容器中的應用程式,其實完全執行在了宿主作業系統中,與其他真實執行在其中的應用程式,在指令執行層面是完全沒有任何區別的。

下表總結了使用Docker容器技術與傳統虛擬機器技術的特性比較。

image

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分鐘或幾秒鐘就可以啟用,遠比需要數分鐘甚至數十分鐘才能開啟的傳統虛擬機器來的快。

參考:

相關文章