隨著2014年的結(jié)束,CoreOS面向Docker發(fā)布了一款 Rocket,挑戰(zhàn)Docker被當(dāng)做“固有缺陷”的進(jìn)程模型。盡管CoreOS的創(chuàng)始人Alex Polvi曾經(jīng)軟化過他的立場(chǎng),他始終堅(jiān)持自己的基本觀點(diǎn): Docker不再是構(gòu)建系統(tǒng)的理想組件。
容器的迅速崛起是最近才出現(xiàn)的,因此很容易看出Polvi積極發(fā)表聲明的原因。隨著容器戰(zhàn)爭(zhēng)的開始,更大的擔(dān)憂是,供應(yīng)商之間反復(fù)爭(zhēng)吵是否會(huì)最終嚇跑企業(yè)采用容器技術(shù),至少直到塵埃落定。
平臺(tái)和組件
有一點(diǎn)CoreOS的Polvi和Docker的創(chuàng)始人Sonomon都贊同:Rocket和Docker沒有競(jìng)爭(zhēng)性——不見得。Hykes告訴我,Rocket實(shí)際上是個(gè)Libcontainer的競(jìng)爭(zhēng)對(duì)手,并不是包羅萬象的Docker的競(jìng)爭(zhēng)對(duì)手。Libcontainer是一個(gè)為容器指定配置選項(xiàng)的庫,對(duì)Docker至關(guān)重要,也是個(gè)努力幫助定義容器未來的社區(qū)。
InfoWorld的Serdar Yegulalp這樣寫道:“換句話說,Libcontainer真了不起”。
但是,Polvi明顯覺得,Docker忽略了自己的核心,期望擁有更多功能——成為一個(gè)平臺(tái)。Polvi告訴我:
Docker一開始的時(shí)候是作為一個(gè)組件來構(gòu)建平臺(tái),一個(gè)構(gòu)建塊,可以將它分層置入系統(tǒng)來利用容器…這是支撐Docker的原始價(jià)值,是一個(gè)幫助構(gòu)建東西的簡(jiǎn)單工具,我認(rèn)為這是目前它如此成功的原因。
從某種意義上說,就有點(diǎn)像我們想要回到過去的好時(shí)光。但是Polvi堅(jiān)持自己并非反對(duì)Docker,而更多的是希望Docker保持一個(gè)用于構(gòu)建其他系統(tǒng)的開放組件:
Docker(現(xiàn)在)本身是一個(gè)平臺(tái),而不是構(gòu)建塊。這樣不好嗎?不,它僅僅不再是構(gòu)建系統(tǒng)的理想組件。我們的系統(tǒng)就包含這個(gè)(構(gòu)建塊),我們想使用容器來構(gòu)建一個(gè)操作系統(tǒng)。
我們認(rèn)為,組件仍然有存在的必要,來供其它系統(tǒng)進(jìn)行集成。我們認(rèn)為Docker原始的價(jià)值觀是好的,所以我們必須確保這種價(jià)值觀的存在,那就是為什么我們構(gòu)建了Rocket。
在某種程度上,問題是在它構(gòu)建業(yè)務(wù)的過程中,Docker可能有意或無意中使它難以構(gòu)建其他業(yè)務(wù),Polvi繼續(xù):
Docker平臺(tái)和Rocket是截然不同的東西。Docker平臺(tái)是一個(gè)產(chǎn)品,Rocket是一個(gè)組件。企業(yè)會(huì)選擇Docker平臺(tái)來替代Cloud Foundry這類東西,像Cloud Foundry這樣的公司會(huì)使用Rocket這樣的東西來構(gòu)建Cloud Foundry。
貴公司需要Docker還是Rocket(或者其它容器技術(shù)),也許最后會(huì)歸結(jié)到你想構(gòu)建怎樣的東西。但是公司能否通過使用Docker平臺(tái),然后和Polvi的可組合組件Libcontainer進(jìn)行搭配?
絕對(duì)可以,這就是它變得混亂的地方。
Rocket有存在的必要嗎?
開源世界歷史有著悠久的免費(fèi)歷史,沒人知道需要收費(fèi)。有時(shí)他們會(huì)支付,但更多的時(shí)候,他們不會(huì)支付。
Docker取代了Linux內(nèi)核存在很久的容器技術(shù)LXC。但是正如Pivotal的Andrew Clay Shafer所指出的:“Docker解決了LXC的可用性問題,使得那種技術(shù)得以運(yùn)用。”
以類似的方式,CoreOS也對(duì)Docker進(jìn)行了重大改進(jìn)。Pivotal的Cloud Foundry執(zhí)行官James Watters強(qiáng)調(diào):Rocket是把新東西帶進(jìn)市場(chǎng)非常重要的一步,并維持“中心多平臺(tái)容器”的觀點(diǎn)。Rocket還承諾改善Docker的安全等等。
并非每個(gè)人都同意這樣的觀點(diǎn)。
雖然Hykes承認(rèn)“Rocket提供了一些好想法,我們將會(huì)吸收他們”,他堅(jiān)持認(rèn)為Rocket缺少CoreOS尋求的主要改進(jìn),包括改善安全性和可組合性。
也許是,也許不是。Rocket的激烈反應(yīng)表明它服務(wù)了深層次的行業(yè)需要。盡管Docker為追求整體提高易用性而擴(kuò)展功能,很多人需要更多的離散Libcontainer,以便他們能夠輕易地將現(xiàn)有項(xiàng)目和環(huán)境塞進(jìn)去。Libcontainer或許就是答案,但是開發(fā)人員似乎欣賞Rocket返璞歸真的方法。
清理混亂
再次來看看留給企業(yè)的問題:他們需要Docker還是Rocket?越來越多的答案可能是兩者皆有。
還有的擔(dān)心就是,競(jìng)爭(zhēng)的技術(shù)最終會(huì)迷惑客戶,而不是幫助他們。Polvi告訴我,實(shí)際上這里有著很強(qiáng)的共識(shí),包括競(jìng)爭(zhēng)對(duì)手之間,需要共同講述關(guān)于容器的價(jià)值:
在我們這個(gè)新興空間里,每個(gè)人都想客戶成功使用容器。我覺得我們需要做一些事情來保證容器已準(zhǔn)備好商用,比如安全、可組合性以及開發(fā)標(biāo)準(zhǔn)。
競(jìng)爭(zhēng)就是這樣工作的,更恰當(dāng)?shù)卣f,開源就是這樣工作的。Polvi立即辯解:“一般來說,開源很適合創(chuàng)建組件,而不是產(chǎn)品”。企業(yè)尋求開源容器技術(shù),然后,記住這一點(diǎn),期待開源可以提供更好的構(gòu)建塊,而非成型的企業(yè)產(chǎn)品。
這也意味著,Polvi繼續(xù)告訴我,CoreOS的主要競(jìng)爭(zhēng)對(duì)手不是Docker,而是“內(nèi)部團(tuán)隊(duì)自己拼湊一切”。雖然大公司有團(tuán)隊(duì)構(gòu)建系統(tǒng)來運(yùn)行基礎(chǔ)設(shè)施,CoreOS相信,他們可以為那些需要擁有大公司同一級(jí)別成熟度而不愿自己構(gòu)建的公司提供解決方案。
換句話說,Rocket是一個(gè)開源組件,可以幫助企業(yè)構(gòu)建系統(tǒng)。根據(jù)Polvi的說法,Docker尋求成為一個(gè)平臺(tái)。它們是兩種非常不同的方法,都是需要的。在一個(gè)特定的項(xiàng)目中,究竟哪個(gè)適合你,很大程度上取決于你想構(gòu)建一個(gè)怎樣的東西。