應(yīng)用程序通常是指將一系列包和配置文件的部署成一個(gè)實(shí)時(shí)可運(yùn)行的環(huán)境丝里。
應(yīng)用程序通常是指一系列運(yùn)行在操作系統(tǒng)中的服務(wù)施蜜,例如一個(gè)數(shù)據(jù)庫(kù)服務(wù)器或一個(gè)http服務(wù)器卒蘸,但是他們也可以部署在提供該服務(wù)的其他任意環(huán)境中,例如一個(gè)虛擬機(jī)或者一個(gè)物理機(jī)
運(yùn)用應(yīng)用程序的主要缺點(diǎn)是該應(yīng)用程序本身花墩,實(shí)時(shí)運(yùn)行環(huán)境悬秉,以及base os的一些更新都有可能損壞該應(yīng)用澄步。例如,一個(gè)os的跟新可能包括數(shù)個(gè)依賴的更新和泌,包括一些由多個(gè)編程語言共同的基礎(chǔ)庫(kù)村缸。而一些不兼容的更新則會(huì)直接影響到該運(yùn)行的應(yīng)用程序。
再者武氓,如果還有另外一個(gè)程序和其共享相同的操作系統(tǒng)和一些相同的庫(kù)梯皿,其中一個(gè)應(yīng)用程序一些庫(kù)的更新則會(huì)影響其他程序。
所以县恕,如果一個(gè)公司開發(fā)一個(gè)標(biāo)準(zhǔn)的應(yīng)用程序东羹,在運(yùn)行環(huán)境的任何維護(hù)都需要一系列測(cè)試去保證任何OS相關(guān)的更新不會(huì)影響的應(yīng)用。
基于應(yīng)用程序的復(fù)雜度忠烛, 回歸測(cè)試就會(huì)變得復(fù)雜和龐大属提。有時(shí)甚至,任何正常的更新都需要停止整個(gè)服務(wù)美尸。正常冤议,這意味著有著高可用feature的環(huán)境可以降低downtime的影響,增加了部署過程的復(fù)雜度师坎。
這個(gè)維護(hù)會(huì)變得非常復(fù)雜恕酸,任何部署和更新都會(huì)變得復(fù)雜。
相應(yīng)的胯陋,一個(gè)系統(tǒng)管理員可以使用容器蕊温,在單個(gè)操作系統(tǒng)上一些隔離的部分。容器提供了許多和虛擬機(jī)相同的優(yōu)點(diǎn)遏乔,例如安全义矛,存儲(chǔ),網(wǎng)絡(luò)隔離按灶。這些便利需要更少的硬件資源和更快去啟動(dòng)和停止症革。他們也隔離庫(kù)和實(shí)時(shí)運(yùn)行環(huán)境(例如CPU和存儲(chǔ))去減少任宿主機(jī)操作系統(tǒng)的更新所帶來的影響
容器化所帶來的不僅僅是提高了效率,彈性和可服用性鸯旁,同時(shí)也帶來了應(yīng)用和平臺(tái)的可移植性。目前量蕊,已有許多容器供應(yīng)商铺罢, 例如Rocket, Drawbridge and LXC。目前最主要的供應(yīng)商是Docker.
容器最主要的優(yōu)點(diǎn)如下:
1. 低硬件的覆蓋率
2. 用OS內(nèi)部的功能去創(chuàng)建一個(gè)隔離的環(huán)境(基于命令空間和cgroups技術(shù))残炮。與虛擬機(jī)管理程序相比韭赘,這個(gè)方法減少了CPU的數(shù)量和內(nèi)存。在一個(gè)VM里面運(yùn)行程序是從運(yùn)行環(huán)境中創(chuàng)造隔離的一種方法势就。但是這個(gè)服務(wù)也比較重量級(jí)泉瞻。
隔離環(huán)境使宿主os和其他應(yīng)用的變化都不同影響容器脉漏。因?yàn)槿萜餍枰膸?kù)為容器所獨(dú)屬,應(yīng)用可以無中斷的運(yùn)行袖牙。例如侧巨,每個(gè)應(yīng)用都可以獨(dú)占容器的庫(kù)。一個(gè)容器的更新不會(huì)影響到其他容器鞭达。
3.快速部署
部署容器是非乘境溃快的,因?yàn)闆]有必要去安裝整個(gè)底層的操作系統(tǒng)畴蹭。通常坦仍,去支持隔離,需要在宿主機(jī)或者虛擬機(jī)上安裝一個(gè)新的操作系統(tǒng)叨襟,任何一個(gè)更新都需要重啟整個(gè)OS繁扎。而使用容器技術(shù),則僅僅需要重啟容器而糊闽,不會(huì)影響到任何在宿主機(jī)的服務(wù)梳玫。
4.多環(huán)境部署
在傳統(tǒng)使用單一主機(jī)部署場(chǎng)景中,任何環(huán)境的差異都會(huì)潛在的影響到應(yīng)用墓怀。而使用容器汽纠,
差別和不兼容都會(huì)減少,因?yàn)槲覀冊(cè)谑褂猛粋€(gè)容器的鏡像傀履。
5.服用性
相同的容器可以被多個(gè)應(yīng)用復(fù)用而不需要重新部署一個(gè)完整的OS虱朵。一個(gè)數(shù)據(jù)庫(kù)的容器可以位一個(gè)應(yīng)用程序創(chuàng)建一系列表格,也可以快速銷毀和重建钓账,而不需要去運(yùn)行一堆任務(wù)碴犬。另外,同一個(gè)數(shù)據(jù)庫(kù)容器可以被生產(chǎn)環(huán)境去部署應(yīng)用梆暮。 通常服协,一個(gè)應(yīng)用程序包含所有的依賴服務(wù)(數(shù)據(jù)庫(kù),消息隊(duì)列啦粹,文件系統(tǒng))被封裝在一個(gè)容器內(nèi)偿荷。然而,容器的特性和敏捷需要會(huì)讓這個(gè)方法很有挑戰(zhàn)性唠椭。在這些例子重跳纳,一個(gè)多容器的部署也很可行。另外贪嫂,需知一些應(yīng)用的一些動(dòng)作可能不適合作容器化寺庄。例如,程序訪問底層硬件信息,內(nèi)存斗塘,文件系統(tǒng)和設(shè)備等由于容器本身的限制可能導(dǎo)致的失敗赢织。
最后,容器促進(jìn)的是小服務(wù)的開發(fā)馍盟,因?yàn)樗麄兲峁┹p量級(jí)可信賴的環(huán)境去創(chuàng)建和運(yùn)行可被部署到生產(chǎn)或者開發(fā)環(huán)境重而非復(fù)雜的多套環(huán)境的生產(chǎn)環(huán)境和開發(fā)環(huán)境于置。
而容器的硬件資源的隔離則由一個(gè)重量級(jí)的服務(wù)來支撐。