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