作為一種部署應用程序的全新方式,容器技術在短時間內獲得了廣泛關注,但是這種技術同樣存在某些限制,并且和虛擬機存在本質上的不同。
虛擬化技術已經改變了現代計算方式,它能夠提升系統資源使用效率、消除應用程序和底層硬件之間的依賴關系,同時加強負載的可以移植性和安全性,但是hypervisor和虛擬機只是部署虛擬負載的方式之一。作為一種能夠替代傳統虛擬化技術的解決方案,容器虛擬化技術憑借其高效性和可靠性得到了快速發展,它能夠提供新的特性,并且幫助數據中心專家解決新的顧慮。
容器和虛擬機之間的主要區別在于虛擬化層的位置和操作系統資源的使用方式。
虛擬機依賴于hypervisor,其通常被安裝在“裸金屬”系統硬件之上,這導致hypervisor在某些方面被認為是一種操作系統。一旦hypervisor安裝完成, 就可以從系統可用計算資源當中分配虛擬機實例了,每臺虛擬機都能夠獲得唯一的操作系統和負載(應用程序)。
通常,第一臺虛擬機都將會被用來運行系統管理程序,比如Microsoft System Center。而之后的虛擬機可能包含其他企業負載,比如數據庫、ERP、CRM、郵件服務器、媒體服務器、web服務器或者其他業務應用。虛擬機之間是完全隔離的——沒有任何一臺虛擬機知道(或者依賴)相同系統當中的另外一臺虛擬機的存在——惡意軟件、應用程序崩潰和其他問題只能影響一臺虛擬機。虛擬機從一個虛擬系統被移動到另外一個當中,而不用考慮系統硬件和操作系統等因素。
而容器環境的工作方式則有所不同。對于容器環境來說,需要首先安裝主機操作系統,之后將容器層(比如LXC或libcontainer)安裝在主機操作系統(通常是Linux變種)之上。在安裝完容器層之后,就可以從系統可用計算資源當中分配容器實例了,并且企業應用可以被部署在容器當中。但是,每個容器化應用都會共享相同的操作系統(單個主機操作系統)。
相比于虛擬機,容器擁有更高的資源使用效率,因為它并不需要為每個應用分配單獨的操作系統——實例規模更小、創建和遷移速度也更快。這意味相比于虛擬機,單個操作系統能夠承載更多的容器。云提供商十分熱衷于容器技術,因為在相同的硬件設備當中,可以部署數量更多的容器實例。然而,單個操作系統有可能引起影響所有相關實例的單點事故。比如,惡意軟件或者主機操作系統崩潰可能禁用或者影響所有容器。此外,容器易于遷移,但是只能被遷移到具有兼容操作系統內核的其他服務器當中,這樣會無形中減少遷移選擇。
從實際應用的角度來說,容器和虛擬機可以在同一個數據中心當中共存,因此這兩種技術被認為是互補的——為現代應用程序架構師和數據中心管理員添加了可用工具集,通過不同的方式為應用負載提供支持。