iThome 相關報導請參考: 「Container技術三部曲(一)迎接下一個雲端火紅技術Docker」 「Container技術三部曲(二)不只快,還要更快──臺灣Docker應用案例的啟發」 「Container三部曲(三)IT架構的新奈米革命:Container OS」
Container是以應用程式為中心的虛擬化
不同於常見的傳統虛擬化技術如vSphere或Hyper-V是以作業系統為中心,Container(或可稱為軟體貨櫃)技術則是一種以應用程式為中心的虛擬化技術。兩者都是為了要更方便地將一套應用程式所需的執行環境打包起來,來能簡化複雜的IT架構方便管理、移動或部署各種應用程式,而不需要讓開發人員自行管理執行這個應用程式所需的繁多目錄和大量檔案。
傳統虛擬化技術從作業系統層下手,目標是建立一個可以用來執行整套作業系統的沙箱獨立執行環境,習慣以虛擬機器(Virtual Machine)來稱呼。虛擬機器用軟體模擬出vCPU、vRAM等實體伺服器的功能,讓作業系統看起來是身處於實體機器中,所以,可以在這個虛擬機器中安裝各種作業系統,接著安裝應用程式所需的執行環境,如網站伺服器、資料庫程式、中介軟體等。傳統的虛擬化技術能將軟體和硬體的相依關係切開,讓軟體盡可能地不用綁定於特定廠牌或規格的硬體。
傳統虛擬機器的優點是安全性高,對作業系統而言,看起來就像是在一臺正常的實體機器中,就算多個虛擬機器在同一臺實體伺服器中執行,虛擬機器間也不會知道彼此的存在。這也就出現了Host OS和Guest OS的架構,負責執行虛擬化平臺的是Host OS,而在虛擬化平臺內建立的虛擬機器內則是執行Guest OS。
但是將作業系統打包進虛擬機器中的後果是,任何虛擬機器都得先裝妥一套作業系統後才能開始執行應用程式,不僅導致虛擬機器的建立速度,受限於作業系統的開機速度,得等上數十秒到數分鐘才能新增一個虛擬機器。虛擬機器的映象檔所需容量也不小,即使要執行的程式碼只有10KB,也得安裝一整套上百MB的作業系統軟體才行。執行作業系統本身也得消耗不少的運算資源,倘若一臺實體伺服器內要執行100個虛擬機器,就等同於要執行一百套Guest OS,即使虛擬化技術有許多改良來解決運算資源的利用率,但Guest OS仍瓜分了不少應用程式能用的實際運算資源。
在OS層內建立虛擬環境
電腦科學家們早在現代虛擬化技術成熟前,十幾年前就開始嘗試發展另一種虛擬化技術Container,不是在OS外來建立虛擬環境,而是在OS內的核心系統層來打造虛擬機器,透過共用Host OS的作法,取代多個Guest OS的功用。Container也因此被稱為OS層虛擬化技術。
Container直接將一個應用程式所需的相關程式碼、函式庫、環境配置檔都打包起來,並建立了嚴格的資源控管機制來分配Host OS上的系統資源,避免因這個Container占用資源或當機時,而影響了Host OS或其他Container的執行。
因為Container是利用系統核心控管機制來分配Host OS資源,也就不需要另外安裝Guest OS個別管理。也就是說,當一臺實體伺服器內建立了100個Container時,這100個Container共用同一個Host OS的核心,再利用OS內建機制來分配每一個Container可用的資源。因為Container不需要執行OS,因此,一臺實體伺服器可以執行的Container數量,遠遠高於傳統虛擬化技術的虛擬機器,甚至可以有數倍的差異。一臺有能力執行100個測試環境VM的實體伺服器,往往能執行2、3百個用Container提供的測試環境。這批Container的映象檔案所需儲存空間,也因不用安裝整套OS而比用VM映象檔來得少。不論處理器資源或儲存空間的利用上,Container技術都遠優於伺服器虛擬化技術。
以上,摘錄自「Docker風潮席捲IT世界」