本文章來(lái)源為《深入淺出Docker》(異步圖書(shū))测垛,為讀書(shū)筆記坟奥。 讀文本章大概需要10分鐘蜈抓,主要的內(nèi)容是介紹docker的發(fā)展歷史鸯绿,不感興趣的伙伴可以跳過(guò)跋破。
關(guān)于容器技術(shù)的圖書(shū)和探討總是不可避免地涉及Docker。但是當(dāng)有人提到“Docker”時(shí)瓶蝴,可能是指如下3種概念之一毒返。
- Docker公司。
- Docker的容器運(yùn)行時(shí)和編排引擎舷手。
- Docker開(kāi)源項(xiàng)目(Moby)拧簸。
如果讀者希望在容器的世界中有所作為,那么需要對(duì)以上3個(gè)內(nèi)容都有所了解男窟。
2.1 Docker——簡(jiǎn)介
Docker
是一種運(yùn)行于Linux
和Windows
上的軟件盆赤,用于創(chuàng)建、管理和編排容器歉眷。Docker是在GitHub上開(kāi)發(fā)的Moby開(kāi)源項(xiàng)目的一部分牺六。Docker公司,位于舊金山汗捡,是整個(gè)Moby開(kāi)源項(xiàng)目的維護(hù)者淑际。Docker公司還提供包含支持服務(wù)的商業(yè)版本的Docker。
以上是一個(gè)簡(jiǎn)要介紹扇住。下面針對(duì)每個(gè)概念進(jìn)行詳細(xì)介紹庸追。此外還包含對(duì)容器生態(tài)的探討,以及對(duì)開(kāi)放容器計(jì)劃(Open Container Initiative, OCI
)的介紹台囱。
2.2 Docker公司
Docker公司位于舊金山,由法裔美籍開(kāi)發(fā)者和企業(yè)家Solumon Hykes創(chuàng)立读整,其標(biāo)志如圖2.1所示簿训。
有意思的是,Docker公司起初是一家名為dotCloud的平臺(tái)即服務(wù)(Platform-as-a-Service, PaaS
)提供商米间。底層技術(shù)上强品,dotCloud平臺(tái)利用了Linux容器技術(shù)。為了方便創(chuàng)建和管理這些容器屈糊,dotCloud開(kāi)發(fā)了一套內(nèi)部工具的榛,之后被命名為“Docker”。Docker就是這樣誕生的逻锐!
2013年夫晌,dotCloud的PaaS業(yè)務(wù)并不景氣雕薪,公司需要尋求新的突破。于是他們聘請(qǐng)了Ben Golub作為新的CEO晓淀,將公司重命名為“Docker”所袁,放棄dotCloud PaaS平臺(tái),懷揣著“將Docker和容器技術(shù)推向全世界”的使命凶掰,開(kāi)啟了一段新的征程燥爷。
如今Docker公司被普遍認(rèn)為是一家創(chuàng)新型科技公司,據(jù)說(shuō)其市場(chǎng)價(jià)值約為10億美元懦窘。在本書(shū)撰寫(xiě)時(shí)前翎,Docker公司已經(jīng)通過(guò)多輪融資,吸納了來(lái)自硅谷的幾家風(fēng)投公司的累計(jì)超過(guò)2.4億美元的投資畅涂。幾乎所有的融資都發(fā)生在公司更名為“Docker”之后
2.3 Docker運(yùn)行時(shí)與編排引擎
多數(shù)技術(shù)人員在談到Docker時(shí)港华,主要是指Docker引擎
。
Docker引擎是用于運(yùn)行和編排容器的基礎(chǔ)設(shè)施工具毅戈。有VMware管理經(jīng)驗(yàn)的讀者可以將其類比為ESXi苹丸。ESXi是運(yùn)行虛擬機(jī)的核心管理程序,而Docker引擎是運(yùn)行容器的核心容器運(yùn)行時(shí)苇经。
其他Docker公司或第三方的產(chǎn)品都是圍繞Docker引擎進(jìn)行開(kāi)發(fā)和集成的赘理。如圖2.2所示,Docker引擎位于中心扇单,其他產(chǎn)品基于Docker引擎的核心功能進(jìn)行集成商模。
Docker引擎可以從Docker網(wǎng)站下載,也可以基于GitHub上的源碼進(jìn)行構(gòu)建蜘澜。無(wú)論是開(kāi)源版本還是商業(yè)版本施流,都有Linux和Windows版本。
在本書(shū)撰寫(xiě)時(shí)鄙信,Docker引擎主要有兩個(gè)版本:企業(yè)版(EE)和社區(qū)版(CE)瞪醋。
每個(gè)季度,企業(yè)版和社區(qū)版都會(huì)發(fā)布一個(gè)穩(wěn)定版本装诡。社區(qū)版本會(huì)提供4個(gè)月的支持银受,而企業(yè)版本會(huì)提供12個(gè)月的支持。社區(qū)版還會(huì)通過(guò)Edge方式發(fā)布月度版鸦采。
從2017年第一季度開(kāi)始宾巍,Docker版本號(hào)遵循YY.MM-xx格式,類似于Ubuntu等項(xiàng)目渔伯。例如顶霞,2018年6月第一次發(fā)布的社區(qū)版本為18.06.0-ce。
2.4 Docker開(kāi)源項(xiàng)目(Moby)
“Docker”一詞也會(huì)用于指代開(kāi)源Docker項(xiàng)目锣吼。其中包含一系列可以從Docker官網(wǎng)下載和安裝的工具选浑,比如Docker服務(wù)端和Docker客戶端蓝厌。不過(guò),該項(xiàng)目在2017年于Austin舉辦的DockerCon上正式命名為Moby項(xiàng)目鲜侥。由于這次改名褂始,GitHub上的docker/docker庫(kù)也被轉(zhuǎn)移到了moby/moby
,并且擁有了項(xiàng)目自己的Logo描函,如圖2.3所示崎苗。
Moby項(xiàng)目的目標(biāo)是基于開(kāi)源的方式,發(fā)展成為Docker上游舀寓,并將Docker拆分為更多的模塊化組件胆数。Moby項(xiàng)目托管于GitHub的Moby代碼庫(kù),包括子項(xiàng)目和工具列表互墓。核心的Docker引擎項(xiàng)目位于GitHub的moby/moby必尼,但是引擎中的代碼正持續(xù)被拆分和模塊化。
作為一個(gè)開(kāi)源項(xiàng)目篡撵,其源碼是公開(kāi)可得的判莉,在遵循Apache協(xié)議2.0的情況下,任何人都可以自由地下載育谬、貢獻(xiàn)券盅、調(diào)整和使用。
如果查看項(xiàng)目的提交歷史膛檀,可以發(fā)現(xiàn)其中包含來(lái)自如下公司的基礎(chǔ)技術(shù):紅帽锰镀、微軟、IBM咖刃、思科泳炉,以及HPE。此外嚎杨,還可以看到一些并非來(lái)自大公司的貢獻(xiàn)者花鹅。
多數(shù)項(xiàng)目及其工具都是基于Golang編寫(xiě)的,這是谷歌推出的一種新的系統(tǒng)級(jí)編程語(yǔ)言枫浙,又叫Go語(yǔ)言刨肃。使用Go語(yǔ)言的讀者,將更容易為該項(xiàng)目貢獻(xiàn)代碼自脯。
Mody/Docker作為開(kāi)源項(xiàng)目的好處在于其所有的設(shè)計(jì)和開(kāi)發(fā)都是開(kāi)放的,并摒棄了私有代碼閉源開(kāi)發(fā)模式下的陳舊方法斤富。因此發(fā)布過(guò)程也是公開(kāi)進(jìn)行的膏潮,不會(huì)再出現(xiàn)某個(gè)秘密的版本提前幾個(gè)月就宣布要召開(kāi)發(fā)布會(huì)和慶功會(huì)的荒唐情況。Moby/Docker不是這樣運(yùn)作的满力,項(xiàng)目中多數(shù)內(nèi)容都是開(kāi)放并歡迎任何人查看和作出貢獻(xiàn)的焕参。
Moby項(xiàng)目以及更廣泛的Docker運(yùn)動(dòng)一時(shí)間掀起了一波熱潮轻纪。GitHub上已經(jīng)有數(shù)以千計(jì)的提交請(qǐng)求(pull request),以及數(shù)以萬(wàn)計(jì)的基于容器化技術(shù)的項(xiàng)目了叠纷,更不用說(shuō)Docker Hub上數(shù)十億的鏡像下載刻帚。Moby項(xiàng)目已經(jīng)給軟件產(chǎn)業(yè)帶來(lái)了翻天覆地的變化。
這并非妄想涩嚣,Docker已經(jīng)得到了廣泛的應(yīng)用崇众!
2.5 容器生態(tài)
Docker公司的一個(gè)核心哲學(xué)通常被稱為“含電池,但可拆卸”(Batteries included but removable)航厚。
意思是許多Docker內(nèi)置的組件都可以替換為第三方的組件顷歌,網(wǎng)絡(luò)技術(shù)棧就是一個(gè)很好的例子。Docker核心產(chǎn)品內(nèi)置有網(wǎng)絡(luò)解決方案幔睬。但是網(wǎng)絡(luò)技術(shù)棧是可插拔的眯漩,這意味著Docker內(nèi)置的網(wǎng)絡(luò)方案可以被替換為第三方的方案。許多人都會(huì)這樣使用麻顶。 早期的時(shí)候赦抖,經(jīng)常出現(xiàn)第三方插件比 Docker 提供的內(nèi)置組件更好的情況。然而這會(huì)對(duì)Docker公司的商業(yè)模式造成沖擊辅肾。畢竟队萤,Docker公司需要依靠盈利來(lái)維持基業(yè)長(zhǎng)青。因此宛瞄,“內(nèi)置的電池”變得越來(lái)越好用了浮禾。這也導(dǎo)致了生態(tài)內(nèi)部的緊張關(guān)系和競(jìng)爭(zhēng)的加劇。
簡(jiǎn)單來(lái)說(shuō)份汗,Docker內(nèi)置的“電池”仍然是可插拔的盈电,然而越來(lái)越不需要將它們移除了。
盡管如此杯活,容器生態(tài)在一種良性的合作與競(jìng)爭(zhēng)的平衡中還是得以繁榮發(fā)展匆帚。在談及容器生態(tài)時(shí),人們經(jīng)常使用到諸如“co-opetition”與“frenemy這樣的字眼旁钧。這是一個(gè)好現(xiàn)象吸重!因?yàn)榱夹缘母?jìng)爭(zhēng)是創(chuàng)新之母。
2.6 開(kāi)放容器計(jì)劃
如果不談及開(kāi)放容器計(jì)劃(The Open Container Initiative, OCI
)的話歪今,對(duì)Docker和容器生態(tài)的探討總是不完整的嚎幸。圖2.4所示為OCI的Logo。
OCI是一個(gè)旨在對(duì)容器基礎(chǔ)架構(gòu)中的基礎(chǔ)組件
(如鏡像格式與容器運(yùn)行時(shí)寄猩,如果對(duì)這些概念不熟悉的話嫉晶,不要擔(dān)心,本書(shū)后續(xù)會(huì)介紹到它們)進(jìn)行標(biāo)準(zhǔn)化的管理委員會(huì)。
同樣替废,如果不談歷史的話箍铭,對(duì)OCI的探討也是不完整的。和所有的歷史記錄一樣椎镣,其版本取決于誰(shuí)來(lái)講述它诈火。所以,以下是我眼中的容器歷史状答。
我講述的這段簡(jiǎn)短的歷史是冷守,一個(gè)名為CoreOS的公司不喜歡Docker的某些行事方式。因此它就創(chuàng)建了一個(gè)新的開(kāi)源標(biāo)準(zhǔn)剪况,稱作“appc”教沾,該標(biāo)準(zhǔn)涉及諸如鏡像格式和容器運(yùn)行時(shí)等方面。此外它還開(kāi)發(fā)了一個(gè)名為rkt(發(fā)音“rocket”)的實(shí)現(xiàn)译断。
兩個(gè)處于競(jìng)爭(zhēng)狀態(tài)的標(biāo)準(zhǔn)將容器生態(tài)置于一種尷尬的境地授翻。
這使容器生態(tài)陷入了分裂的危險(xiǎn)中,同時(shí)也令用戶和消費(fèi)者陷入兩難孙咪。雖然競(jìng)爭(zhēng)是一件好事堪唐,但是標(biāo)準(zhǔn)的競(jìng)爭(zhēng)通常不是。因?yàn)樗鼤?huì)導(dǎo)致困擾翎蹈,降低用戶接受度淮菠,對(duì)誰(shuí)都無(wú)益。
考慮到這一點(diǎn)荤堪,所有相關(guān)方都盡力用成熟的方式處理此事合陵,共同成立了OCI——一個(gè)旨在管理容器標(biāo)準(zhǔn)的輕量級(jí)的、敏捷型的委員會(huì)澄阳。
在本書(shū)寫(xiě)作時(shí)拥知,OCI已經(jīng)發(fā)布了兩份規(guī)范(標(biāo)準(zhǔn)):鏡像規(guī)范和運(yùn)行時(shí)規(guī)范。
提到這兩項(xiàng)標(biāo)準(zhǔn)時(shí)碎赢,經(jīng)常用到的比喻就是鐵軌低剔。它們就像對(duì)鐵軌的尺寸和相關(guān)屬性達(dá)成一致,讓所有人都能自由地建造更好的火車(chē)肮塞、更好的車(chē)廂襟齿、更好的信號(hào)系統(tǒng)、更好的車(chē)站等枕赵。只要各方都遵循標(biāo)準(zhǔn)就是安全的猜欺。沒(méi)人會(huì)希望在鐵軌尺寸問(wèn)題上存在兩個(gè)相互競(jìng)爭(zhēng)的標(biāo)準(zhǔn)!
公平地說(shuō)拷窜,這兩個(gè)OCI規(guī)范對(duì)Docker的架構(gòu)和核心產(chǎn)品設(shè)計(jì)產(chǎn)生了顯著影響开皿。Docker 1.11版本中钓试,Docker引擎架構(gòu)已經(jīng)遵循OCI運(yùn)行時(shí)規(guī)范了。
到目前為止副瀑,OCI已經(jīng)取得了不錯(cuò)的成效,將容器生態(tài)團(tuán)結(jié)起來(lái)恋谭。然而糠睡,標(biāo)準(zhǔn)總是會(huì)減慢創(chuàng)新的步伐!尤其是對(duì)于超快速發(fā)展的新技術(shù)來(lái)說(shuō)更是如此疚颊。這在容器社區(qū)引起了熱烈的討論狈孔。以我之見(jiàn),這是好事材义!容器技術(shù)正在重塑世界均抽,走在技術(shù)前列的人們有熱情、有想法其掂,這很正常油挥。期待關(guān)于標(biāo)準(zhǔn)和創(chuàng)新有更加熱烈的討論!
2.7 本章小結(jié)
本章介紹了Docker公司款熬,這是一家位于舊金山的立志于變更軟件行業(yè)的科技創(chuàng)業(yè)公司深寥。可以說(shuō)他們是現(xiàn)今容器革命的先行者和推動(dòng)者贤牛。但是現(xiàn)在已經(jīng)形成了一個(gè)由作者和競(jìng)爭(zhēng)者組成的大型生態(tài)惋鹅。
Docker項(xiàng)目是開(kāi)源的,其上游源碼位于GitHub的moby/moby
庫(kù)殉簸。
開(kāi)放容器計(jì)劃(OCI)在容器運(yùn)行時(shí)格式和容器鏡像格式的標(biāo)準(zhǔn)化方面發(fā)揮了重要作用闰集。
摘錄來(lái)自 深入淺出Docker(異步圖書(shū)) Nigel Poulton(奈吉爾·波爾頓)