![](https://hfnxjk.com/statics/images/logo.png)
容器為應(yīng)用程序提供了隔離的運(yùn)行空間:每個(gè)容器內(nèi)都包含一個(gè)獨(dú)享的完整用戶(hù)環(huán)境空間,并且一個(gè)容器內(nèi)的變動(dòng)不會(huì)影響其他容器的運(yùn)行環(huán)境。為了能達(dá)到這種效果,容器技術(shù)使用了一系列的系統(tǒng)級(jí)別的機(jī)制諸如利用Linux namespaces來(lái)進(jìn)行空間隔離,通過(guò)文件系統(tǒng)的掛載點(diǎn)來(lái)決定容器可以訪(fǎng)問(wèn)哪些文件,通過(guò)cgroups來(lái)確定每個(gè)容器可以利用多少資源。此外容器之間共享同一個(gè)系統(tǒng)內(nèi)核,這樣當(dāng)同一個(gè)庫(kù)被多個(gè)容器使用時(shí),內(nèi)存的使用效率會(huì)得到提升。
對(duì)于系統(tǒng)虛擬化技術(shù)來(lái)說(shuō),虛擬層為用戶(hù)提供了一個(gè)完整的虛擬機(jī):包括內(nèi)核在內(nèi)的一個(gè)完整的系統(tǒng)鏡像。CPU虛擬化技術(shù)可以為每個(gè)用戶(hù)提供一個(gè)獨(dú)享且和其他用戶(hù)隔離的系統(tǒng)環(huán)境,虛擬層可以為每個(gè)用戶(hù)分配虛擬化后的CPU、內(nèi)存和IO設(shè)備資源。
(題圖來(lái)自:securenetworksitc.com)
哪家強(qiáng)?通常來(lái)說(shuō),這取決于你的需求。如果你只是希望將應(yīng)用運(yùn)行的實(shí)例進(jìn)行隔離,那么對(duì)于管理應(yīng)用運(yùn)行環(huán)境、啟動(dòng)應(yīng)用實(shí)例以及控制資源開(kāi)銷(xiāo)方面容器將是一個(gè)極為高效的工具。像Docker這一類(lèi)的容器,其設(shè)計(jì)原則就是為了解決這種應(yīng)用環(huán)境的修改以及應(yīng)用部署的問(wèn)題,并且這十分符合DevOps理念(你可能希望知道更多關(guān)于DevOps理念的內(nèi)容)。
如果你從服務(wù)器虛擬化的角度來(lái)尋找最好的環(huán)境隔離方案,那么系統(tǒng)級(jí)的虛擬化是更好的方案:和容器相比,鄰居租戶(hù)(Noisy neighbours )對(duì)系統(tǒng)的影響在虛擬化的方案下將不是一個(gè)問(wèn)題。盡管現(xiàn)在很多容器都在專(zhuān)注于提高其隔離能力,但是虛擬機(jī)的隔離還是要優(yōu)于容器。從物理服務(wù)器過(guò)渡到虛擬服務(wù)器是一個(gè)很自然的過(guò)程,并且現(xiàn)在針對(duì)虛擬服務(wù)器的管理的生態(tài)系統(tǒng)也很完善。
在z系統(tǒng)中,Linux具有很好的伸縮性(運(yùn)行容器),但是z是一個(gè)極度高效虛擬化(運(yùn)行虛擬服務(wù)器)的平臺(tái),它繼承了整個(gè)系統(tǒng)架構(gòu)。盡管沒(méi)有精確的測(cè)量,將虛擬化和容器技術(shù)相結(jié)合,在z系統(tǒng)中會(huì)比其他平臺(tái)要容易。
還有第三條路:兩者兼而有之。
有多種方式可以將系統(tǒng)虛擬化及容器技術(shù)相結(jié)合:
1.一個(gè)容器中運(yùn)行一個(gè)虛擬機(jī)Docker在部署容器方面十分靈活。其中一個(gè)選擇(execution driver)是利用KVM鏡像。這樣就可以在最好的隔離性情況下發(fā)揮DevOps所擅長(zhǎng)的使用Docker各種方式。但是這也付出了需要在啟動(dòng)容器時(shí)啟動(dòng)整個(gè)操作系統(tǒng)實(shí)例的代價(jià)。這也就意味著較長(zhǎng)的啟動(dòng)時(shí)間以及低效的內(nèi)存使用,只能通過(guò)內(nèi)核共享內(nèi)存(KSM)來(lái)提升內(nèi)存利用率。這種方法效果和效率都不理想,但是這是一個(gè)好的開(kāi)始。
2.一個(gè)虛擬機(jī)中運(yùn)行一個(gè)容器
與之相反的,你一可以在虛擬機(jī)中啟動(dòng)一個(gè)容器。這里的虛擬機(jī)并不是由Docker控制,而是通過(guò)現(xiàn)有的虛擬化管理設(shè)施來(lái)控制。一旦系統(tǒng)實(shí)例啟動(dòng),就可以通過(guò)Docker來(lái)運(yùn)行容器而武器其他特殊的設(shè)置。同時(shí),由于不同容器運(yùn)行在不同的虛擬機(jī)上,容器之間也能有很好的隔離。而內(nèi)存的使用率需要通過(guò)虛擬層的內(nèi)存共享來(lái)提升。
對(duì)于多租戶(hù)的情況,可以用另一種形式在虛擬機(jī)中運(yùn)行Docker。這種情況下,我們假設(shè)在不同租戶(hù)的容器之間需要強(qiáng)隔離,而對(duì)于同一用戶(hù)的不同容器,簡(jiǎn)單的Linux容器隔離已經(jīng)足夠。這樣我們就可以在減少虛擬機(jī)個(gè)數(shù)的情況下保證租戶(hù)之間的隔離,同時(shí)可以利用Docker帶來(lái)的各種便利。
總結(jié)來(lái)說(shuō):需要根據(jù)實(shí)際需求進(jìn)行選擇。
本文永久更新鏈接地址:http://www.linuxidc.com/Linux/2015-04/116521.htm