容器并不是一個(gè)全新的技術(shù),但這并不妨礙Docker如風(fēng)暴一樣席卷整個(gè)世界。
如果你在IT圈里,你一定聽(tīng)說(shuō)過(guò)Docker。就算與其他熱門技術(shù),如:Puppet/Chef,Hadoop或者M(jìn)ongoDB放在一起,Docker仍然讓你耳目一新。
不過(guò)就算Docker現(xiàn)在怎樣的如日中天,這并不意味著它一定適合你。就如同我在這篇 Tech Pro Rearch 的分析文章中讀到的一樣,“對(duì)于是否要采用Docker作為企業(yè)的未來(lái)技術(shù)方向,你需要的是謹(jǐn)慎!”
在你決定嘗試Docker之前,先了解以下這10點(diǎn):
1. Docker是一種軟件打包和發(fā)布技術(shù)
現(xiàn)代軟件系統(tǒng)一般都由各種可運(yùn)行的二進(jìn)制文件,庫(kù)文件,配置文件和其他依賴組成。在一臺(tái)電腦上完成裝配已經(jīng)是非常困難和復(fù)雜的事情,要“發(fā)布”這些軟件的時(shí)候,事情會(huì)變的更加復(fù)雜。一旦你開(kāi)始發(fā)布過(guò)程,你就需要找到一種能夠讓這些組件正確打包的方式,還要考慮如何把打包好的軟件放到它們應(yīng)該去的地方。Docker就是這樣一種幫助你進(jìn)行軟件打包的方式,無(wú)論你的軟件有多少依賴,發(fā)布到哪里,其他開(kāi)發(fā)人員的機(jī)器或者是生產(chǎn)環(huán)境;Docker都給你提供一種簡(jiǎn)單易用而且標(biāo)準(zhǔn)化的方式。
2. Docker并不是一種全新的技術(shù)
Docker的出現(xiàn)不過(guò)幾年的時(shí)間,但是容器技術(shù)已經(jīng)存在幾十年了。容器技術(shù)在主機(jī)時(shí)代已經(jīng)被證明是非常有用的技術(shù),這讓Docker的成功看上去更像是時(shí)勢(shì)造英雄的結(jié)果,包括Linux的流行,虛擬化的大規(guī)模應(yīng)用和云計(jì)算的興起都給Docker技術(shù)的火熱創(chuàng)造了必要條件。
3. 基本上大家都支持Docker
無(wú)論你選擇哪家技術(shù)供應(yīng)商,基本上他們100%的支持Docker。從亞馬遜AWS到RedHat到Google,每一家能很好的支持Docker。
4. Docker 不僅僅可以跑在Linux上面
雖然Docker起源于Linux平臺(tái),但是微軟正在大力擁抱Docker技術(shù)。Docker依賴于很多在Windows平臺(tái)上并不存在的技術(shù),比如Linux容器技術(shù)(LXC),cgroup和命名空間(namespaces)技術(shù)。所以微軟正在開(kāi)足馬力在Windows Server上提供對(duì)應(yīng)的能力以便與Docker進(jìn)行集成。實(shí)際上,微軟在Windows中也使用自己的容器化技術(shù)很多年了,現(xiàn)在所要做的就是讓這些技術(shù)能夠更好的兼容Docker,因?yàn)镈ocker已經(jīng)成為事實(shí)上的標(biāo)準(zhǔn)。
5. Docker可以讓你像管理虛擬機(jī)一樣管理CPU,內(nèi)存,網(wǎng)絡(luò)和磁盤資源
Docker是圍繞Linux的cgroup來(lái)實(shí)現(xiàn)的,cgroup的作用就是控制容器可以使用的各種計(jì)算機(jī)資源,包括cpu,內(nèi)存,網(wǎng)絡(luò)和磁盤。在這一點(diǎn)上Docker提供了與虛擬機(jī)同樣的能力,讓你可以把計(jì)算機(jī)的一部分資源分配給一部分用戶或者進(jìn)程,這樣他們就不會(huì)占用所有的計(jì)算資源;同時(shí),Docker又不會(huì)像VMware所提供的虛擬化一樣帶來(lái)那么巨大的資源浪費(fèi)(虛擬機(jī)必須運(yùn)行整個(gè)操作系統(tǒng),而Docker只是對(duì)應(yīng)用進(jìn)行虛擬化)。
6. 啟動(dòng)Docker容器比啟動(dòng)虛擬機(jī)快的多的多(毫秒級(jí)vs分鐘級(jí))
在一臺(tái)服務(wù)器上運(yùn)行多個(gè)作業(yè)的傳統(tǒng)方式是啟動(dòng)多個(gè)虛擬機(jī),然后在不同的虛擬機(jī)上運(yùn)行不同的作業(yè)。因?yàn)樘摂M機(jī)必須啟動(dòng)整個(gè)操作系統(tǒng),它就會(huì)很慢,一般都需要數(shù)分鐘的時(shí)間。同時(shí)這些虛擬機(jī)還非常消耗資源,因?yàn)椴僮飨到y(tǒng)本身就要吃掉很多資源。容器可以解決同樣的問(wèn)題,但是啟動(dòng)容器和啟動(dòng)一個(gè)進(jìn)程是同一級(jí)別的,所以Docker讓你可以節(jié)省掉操作系統(tǒng)所帶來(lái)的資源浪費(fèi),以進(jìn)程級(jí)別的消耗來(lái)提供與虛擬機(jī)類似的隔離能力。
7. Docker還不會(huì)完全替代虛擬機(jī),至少短期內(nèi)不會(huì)
相對(duì)于虛擬機(jī),Docker并不是一種非黑即白的替代方案,這主要是因?yàn)镈ocker依賴于底層標(biāo)準(zhǔn)化的操作系統(tǒng),而虛擬機(jī)是當(dāng)前解決這個(gè)問(wèn)題最好的方式。但是,這也意味著Docker是依賴于某種操作系統(tǒng)的,所以你不可能在一臺(tái)容器化主機(jī)上同時(shí)運(yùn)行Windows和Linux應(yīng)用,你需要至少2臺(tái)分別運(yùn)行Windows和Linux的容器化主機(jī)才行。同時(shí),就Docker當(dāng)前的技術(shù)發(fā)展情況來(lái)看,容器的隔離能力還做得不到和虛擬機(jī)同樣的級(jí)別;因此對(duì)于有些多租戶的場(chǎng)景來(lái)說(shuō),Docker可能并不那么適用。
8. Docker的發(fā)展速度實(shí)在是太快了
在你登上Docker這趟列車之前,你要知道你上的是新干線而不是蒸汽機(jī)車,每小時(shí)400公里的速度可不是鬧著玩的??纯催@個(gè)僅僅存在了1年半的技術(shù),它的API已經(jīng)發(fā)布了15個(gè)版本,你就知道它的變化有多快了。就算Docker正在快速的成熟,并且已經(jīng)逐漸具備了企業(yè)級(jí)軟件的能力,但是它并不提供10年技術(shù)支持,而著可能是很多企業(yè)所需要的。
注:作者的原文寫于2015年,現(xiàn)在Docker的版本已經(jīng)是1.12。
9. Docker并不是沒(méi)有競(jìng)爭(zhēng)對(duì)手
雖然Docker很流行,它并不缺少競(jìng)爭(zhēng)對(duì)手。比如CoreOs最近也發(fā)布了一個(gè)名為Rocket的產(chǎn)品,Docker最好的Linux伴侶Ubuntu也在發(fā)展它自己的LXD容器技術(shù)。這些競(jìng)爭(zhēng)對(duì)手多少都在撕扯Docker封閉的生態(tài)系統(tǒng)。在Docker的世界里,所有的東西都要圍繞Docker registry來(lái)運(yùn)行,你要么適用Docker所提供的公共服務(wù),要不在自己的數(shù)據(jù)中
心中部署一套,這并不是免費(fèi)的。
10. Docker有風(fēng)險(xiǎn),入市需謹(jǐn)慎
和任何一種新興的技術(shù)一樣,你需要循序漸進(jìn)。從技術(shù)的角度來(lái)說(shuō),你需要了解很多該做的和不該做的,但最重要的一點(diǎn),這不僅僅是幾行代碼那么簡(jiǎn)單,你進(jìn)入的是一個(gè)生態(tài),而這個(gè)社區(qū)可能并不適合你。你應(yīng)該先多參加一些社區(qū)活動(dòng),如:Meetup、郵件列表、訂閱些微信公眾號(hào),慢慢對(duì)它進(jìn)行了解,然后再?zèng)Q定是否應(yīng)該投入更多的時(shí)間。
無(wú)論Docker怎樣,容器技術(shù)都會(huì)繼續(xù)盛行下去,因?yàn)槿萜髯尙F(xiàn)代軟件技術(shù)和計(jì)算機(jī)技術(shù)變的更加簡(jiǎn)單易用。而在容器這個(gè)領(lǐng)域里,Docker是毋庸置疑的領(lǐng)導(dǎo)者,你沒(méi)有辦法回避這個(gè)事實(shí)。但是,到底以怎樣的方式接受,接受多少,多快,你一定要根據(jù)自己企業(yè)的現(xiàn)狀來(lái)考慮。