這是DockerCon2015第一天的實(shí)況記錄,可以看出Docker的戰(zhàn)略意圖與未來Docker技術(shù)方面的走向。
這是在舊金山萬豪酒店舉辦的DockerCon2015第一天的會(huì)議實(shí)況,這個(gè)會(huì)議會(huì)持續(xù)兩天;這是我(作者)第一次參加DockerCon,我希望能滿載而歸。
會(huì)議是以一段動(dòng)畫視頻開始的,這段視頻講的不是產(chǎn)品而是一個(gè)關(guān)于發(fā)展的故事,講述了Solomon Hykes如何產(chǎn)生容器想法以及Docker如何誕生的;這個(gè)視頻非常的幽默詼諧。當(dāng)視頻結(jié)束,Docker的CEO Ben Golub走上了舞臺(tái)。
Golub首先講了下自己的創(chuàng)業(yè)經(jīng)歷,以及他著名的“two fold test”,Golub覺得Docker應(yīng)該會(huì)是個(gè)具有世界影響力的產(chǎn)品。Golub說,Docker已經(jīng)是很多公司構(gòu)建、發(fā)布與運(yùn)行分布式應(yīng)用程序的基 礎(chǔ)構(gòu)架,并且Docker是容器化進(jìn)程對(duì)工業(yè)界與開發(fā)方式進(jìn)行影響與變革的主力軍。他將成功完全歸功于Docker社區(qū)以及Docker生態(tài)圈。然 后,Golub還謙虛的贊譽(yù)了那些創(chuàng)造了namespace、LXC工具、Cgroups以及所有Docker依賴的低層技術(shù)開發(fā)商,稱Docker正是 站在了這些技術(shù)與公司的“巨人肩膀”之上才有如今的成功。Golub接著對(duì)所有為Docker貢獻(xiàn)代碼的contributor,以及Docker社區(qū)與 Docker項(xiàng)目的貢獻(xiàn)者提出表揚(yáng)并表示感謝,當(dāng)然還包括Docker公司的正式雇員;最后,當(dāng)然也是最重要的,答謝了所有Docker的用戶。
接下來,Golub描述了過去一年Docker開發(fā)項(xiàng)目取得的成績(jī):
貢獻(xiàn)者增長(zhǎng)了183%;
GitHub上關(guān)于Docker的項(xiàng)目增長(zhǎng)了515%;
Docker提供的工作機(jī)會(huì)增長(zhǎng)了1720%;
使用Docker構(gòu)建的應(yīng)用程序增長(zhǎng)了934%(Boot2Docker下載量增加了1456%);
容器的下載量增加了18082%(這個(gè)是根據(jù)DockerHub上鏡像下載量來統(tǒng)計(jì)的)。
這個(gè)話題引出了Golub的關(guān)于Docker核心特性的話題——是什么使Docker從一個(gè)有意思的項(xiàng)目,變成一種解決方案,然后變成一個(gè)平臺(tái),最后發(fā)展成一種變革;Golub總結(jié)了Docker未來的5步發(fā)展計(jì)劃:
構(gòu)建一個(gè)輕量級(jí)的容器;
制定容器之間的通信標(biāo)準(zhǔn),同時(shí)降低容器使用的門檻;
為容器創(chuàng)建生態(tài)圈;
使多容器共同運(yùn)行;
創(chuàng)建管理工具,管理容器運(yùn)行。
這是Golub在2014年DockerCon上提出的Docker發(fā)展的5個(gè)步驟,然后總結(jié)了這些步驟的履行情況。他指出,第1~3個(gè)都完成了,現(xiàn)在開始著手處理第4、5個(gè)。另外,Golub指出關(guān)于第3點(diǎn)還能做更多,同時(shí)暗示,Solomon Hykes (Docker的CTO)會(huì)在大會(huì)中講第4、5的細(xì)節(jié)。
最后,Dolub聲稱,雖然這次DockerCon主題是圍繞Docker在生產(chǎn)環(huán)境下的特性;但是,Docker需要去擴(kuò)大普及范圍,所有人都要 能用,能在任何地方運(yùn)行,同時(shí)要能支持?jǐn)U展與插拔,同時(shí)還需要為企業(yè)將Docker部署在生產(chǎn)環(huán)境提供真實(shí)的解決方案與指引(roadmap)。
Dolub在結(jié)束演講前稱Docker可以“撬動(dòng)地球”,然后將舞臺(tái)交給了Solomon Hykes——Docker的創(chuàng)始人與CTO。
Hykes在演講的開始感謝了Docker的貢獻(xiàn)者與社區(qū),然后他向參會(huì)者描述了Docker要實(shí)現(xiàn)的“藍(lán)圖”,以及為什么要這么做。他指 出,Docker的目標(biāo)是為萬眾創(chuàng)新提供底層工具。Hykes相信,Docker可以為全世界所有有創(chuàng)新想法但是缺乏工具去實(shí)現(xiàn)這些想法的人搭建一個(gè)橋梁 ——一個(gè)將新技術(shù)與熱愛創(chuàng)新的人們連接起來的橋梁。Hykes相信,編程(軟件編程)是世界萬眾創(chuàng)新的最大搖籃,同時(shí)他進(jìn)一步闡述了他要使互聯(lián)網(wǎng)變得“可 編程”(programmable)的論斷,同時(shí)也是他的最終理想。但是,擋住其去路的是軟件之間形形色色的“隔閡”(walled gardens);當(dāng)然,構(gòu)建Docker就是為了消除這些隔閡。最后,他說,Docker會(huì)花5年的時(shí)間來實(shí)現(xiàn)互聯(lián)網(wǎng)的可編程性,這也是未來 Docker的使命。
Hykes提出了未來Docker在技術(shù)上的4個(gè)目標(biāo):
重新發(fā)明程序員的編程工具集;
打造更好的軟件構(gòu)件(plumbing);
提出制定開放的標(biāo)準(zhǔn);
為企業(yè)提供統(tǒng)一的、一致的解決現(xiàn)實(shí)問題的解決方案。
Hykes覺得實(shí)現(xiàn)第一個(gè)目標(biāo)很重要,因?yàn)楝F(xiàn)在開發(fā)分布式應(yīng)用程序太困難了。為什么呢?因?yàn)楣ぞ叩膮T乏。而造成分布式應(yīng)用程序開發(fā)工具匱乏的原因是 大部分開發(fā)工具都是在分布式應(yīng)用程序出現(xiàn)或者流行之前發(fā)明的;因此提升開發(fā)人員的體驗(yàn)十分重要,他認(rèn)為重新開發(fā)一套分布式應(yīng)用開發(fā)工具的原則是“增量迭 代”(incremental revolution),這個(gè)原則有三個(gè)要素:
發(fā)現(xiàn)問題的根源;
用最簡(jiǎn)單的方法解決它;
然后重復(fù)這個(gè)過程。
Hykes認(rèn)為incremental revolution的方法論是必需要留意每一次小的改變,最終將會(huì)演變成一次大的變革。在過去兩年中,Docker的開發(fā)過程就是 incremental revolution的真實(shí)寫照。比如說容器引擎的開發(fā)就是個(gè)例子。鏡像、Docker Compose、Docker Machine與Docker Swarm都是從解決一個(gè)小問題入手的,然后迭代成一個(gè)大的項(xiàng)目、大的解決方案。
好吧——什么是下一個(gè)要解決的問題呢?
接下來Hykes宣布了Docker還處于實(shí)驗(yàn)階段的release,以及開發(fā)者與公司用戶如何去測(cè)試這個(gè)最新版本的方法。
Hykes所說的“下一個(gè)問題”是網(wǎng)絡(luò)。他認(rèn)為,基礎(chǔ)構(gòu)架(機(jī)器)與網(wǎng)絡(luò)都是應(yīng)用程序的一部分,必須符合應(yīng)用程序的需求來構(gòu)建。Docker與 Socketplane共同努力的結(jié)果是還處于實(shí)驗(yàn)階段的新功能——Docker Network——使Docker支持原生的multi-host networking。micro-segmentation被集成到Docker Network中,它使用戶可以將虛擬網(wǎng)絡(luò)也納入到網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu)中。這些技術(shù)是符合工業(yè)標(biāo)準(zhǔn)的。Docker Network使用DNS來做服務(wù)發(fā)現(xiàn)。為了演示Docker Network的擴(kuò)展性與可插拔性,Hykes提供了11個(gè)社區(qū)的網(wǎng)絡(luò)與發(fā)現(xiàn)服務(wù)插件。
Hykes將舞臺(tái)交給了Ben Firshman來演示Docker Network的Demo版。Ben Firshman將Docker Machine部署在VMware Fusion上,這樣他就能在他的筆記本電腦上使用Docker Compose來測(cè)試運(yùn)行他之前做好的容器與應(yīng)用程序了。本地測(cè)試運(yùn)行完他的例子程序,Ben Firshman接著使用Docker Swarm與Docker Network將它們部署到生產(chǎn)環(huán)境中。他使用Docker Machine創(chuàng)建Swarm集群,同時(shí)演示了Docker Compose中“應(yīng)用程序定義”(application definition)是什么樣子。接著,F(xiàn)irshman運(yùn)行“docker-compose scale”來增加web服務(wù)器的數(shù)量來達(dá)到擴(kuò)容的目的(從現(xiàn)場(chǎng)的demo來看,效果并沒有那么好)。Alvin Richards一個(gè)Docker軟件工程師,接替Firshman來運(yùn)行這個(gè)Demo程序,但是不幸的是,現(xiàn)場(chǎng)演示出現(xiàn)了兩個(gè)錯(cuò)誤,demo演示失敗了,甚至Richard備用的視頻演示也沒有能夠演示成功;所以,最后他只能將demo正常運(yùn)行時(shí)的結(jié)果闡述給觀眾聽了。
接下來,Hykes重返舞臺(tái),重新闡述了Docker Network項(xiàng)目的進(jìn)展。接著,開始另一個(gè)話題,重新打造程序員的工具集的下一個(gè)問題是解決工具集的可擴(kuò)展新,即,如何讓程序員將自己的工具加入到工具集中?
這引出了下一個(gè)要發(fā)布的產(chǎn)品——Docker Plugins(同樣也是出于實(shí)驗(yàn)階段的產(chǎn)品)。通過這個(gè)工具,用戶可以將“插件”插入到Docker中固有的“擴(kuò)展點(diǎn)”(extension points)上,來改變?nèi)萜鬟\(yùn)行時(shí)的行為;擴(kuò)展點(diǎn)廣泛的存在于Docker的“網(wǎng)絡(luò)”、“數(shù)據(jù)卷”、“調(diào)度器”與“發(fā)現(xiàn)服務(wù)”等構(gòu)件中。Hykes也表 示會(huì)為Docker設(shè)置更多的“擴(kuò)展點(diǎn)”。使用“插件”并不需要為Docker打補(bǔ)丁,Docker也不需要重新啟動(dòng)以加載所有“插件”。“插件”的使用 也很靈活,你可以一次性加載多個(gè),也可以為不同應(yīng)用加載不同的插件。
接下來,Hykes花了很少的時(shí)間對(duì)Docker生態(tài)圈表示了感謝。接著將舞臺(tái)交給了Deepak Singh——來自AWS與Amazon ECS。Singh講述了Amazon支持Docker的歷史,比如加入支持Docker的AMI與Beanstalk。所有這些都最終形成了EC2容器服務(wù)(ECS)。最后,Singh宣布年底Amazon ECS會(huì)支持原生運(yùn)行Docker Swarm與Docker Compose。
Singh的演講最終回到了重新發(fā)明更好的編程工具集問題上來,并以此結(jié)束。Hykes重新上臺(tái),將話題過度到他之前提出的第二個(gè)目標(biāo)——“打造更好的軟件構(gòu)件”(building better plumbing)。他重申了打造更好基礎(chǔ)軟件構(gòu)件的重要性,同時(shí)提出軟件構(gòu)件的開發(fā)原則:
盡量重用已經(jīng)存在的軟件構(gòu)件;
新的軟件構(gòu)件必須易于使用與改進(jìn);
遵守UNIX原則(工具必須小而簡(jiǎn)單);
定義標(biāo)準(zhǔn)的接口,使得小的構(gòu)件可以組裝成大的系統(tǒng)。
Hykes強(qiáng)調(diào)了那些在Docker中重用的軟件構(gòu)件(Linux、namespaces、cgroups、SELinux、AppArmor、 layered file systems、tar、SSH、OpenSSL等等)。Hykes再次感謝了這些工具的開發(fā)者,以及它們對(duì)Docker的重要性。Hykes進(jìn)一步指 出,Docker50%的代碼是基于構(gòu)件原理開發(fā)的(也就是可以被別的項(xiàng)目重用)。Hykes進(jìn)一步引出,Docker中的軟件構(gòu)件會(huì)逐步從項(xiàng)目中分離出 去,回到開源社區(qū),供開源社區(qū)使用并改進(jìn)它們。同時(shí),他宣布“Docker構(gòu)件項(xiàng)目”已經(jīng)有了成果。
Hykes宣布了Notary項(xiàng)目——一個(gè)可信的發(fā)布系統(tǒng),通過它用戶可以發(fā)布任何內(nèi)容。Notary是“Docker構(gòu)件項(xiàng)目”下的產(chǎn) 物,“Docker構(gòu)件項(xiàng)目”的宗旨是將所有Docker的軟件構(gòu)件都用于開源項(xiàng)目中。Notary無關(guān)于平臺(tái),它可以基于任意協(xié)議的傳輸信息,使用業(yè)內(nèi) 領(lǐng)先加密技術(shù)的內(nèi)容發(fā)布平臺(tái)。Hykes將舞臺(tái)交給Diogo Monica 來演示Notary。
不像之前的演示,Notary的演示非常順利,完事后,Diogo將舞臺(tái)交給Hykes。Hykes發(fā)布了另一個(gè)“Docker構(gòu)件項(xiàng)目”下產(chǎn)生的項(xiàng)目,關(guān)于OS容器的項(xiàng)目——runC。runC是個(gè)通用的OS容器運(yùn)行時(shí)(http://runc.io)。 runC支持所有的Linux安全策略(SELinux、AppArmor、cgroups、namespaces、seccomp、cap-drop 等);支持用戶級(jí)namespace與live migration(通過CRIU)。微軟正在開發(fā)以支持runC。ARM對(duì)runC的支持也在進(jìn)行中。Intel正在開發(fā)DPDK與Secure Enclave來支持runC。runC定義了一個(gè)標(biāo)準(zhǔn)的、可以移植的、可運(yùn)行的程序格式;可以通過命令行或者編程的方式啟動(dòng)。而Hykes對(duì)runC的標(biāo)語是“只是個(gè)運(yùn)行時(shí),別的啥也不是”。
接著,Hykes轉(zhuǎn)向了他提出的第三個(gè)目標(biāo)(提出制定開放的標(biāo)準(zhǔn))。Hykes指出,Docker最具價(jià)值的不是它的技術(shù),而是使人們對(duì)事物達(dá)成了一致的看法——這里說的是容器運(yùn)行時(shí)(container runtime)。Hykes開始闡述Docker對(duì)容器標(biāo)準(zhǔn)化所負(fù)有的責(zé)任,以及Docker如何踐行的。那么這個(gè)標(biāo)準(zhǔn)是什么呢?它可能包括:
容器格式標(biāo)準(zhǔn);(A formal specification)
獨(dú)立的容器治理方式(Independent governance);
中立的引用實(shí)現(xiàn)(A neutral reference implementation);
廣泛的支持(Support from a broad coalition);
開放的文化(An open door to fresh ideas)。
Hykes接著發(fā)布了OCF(Open Container Format)一個(gè)普適的容器運(yùn)行格式,與ELF兼容,但是只是針對(duì)容器提出。runC會(huì)一直支持OCF格式。為了保證“獨(dú)立的容器治理”,docker 與Linux Foundation合作研發(fā)Open Container Project,提供對(duì)OCF的支持。為了保證“中立的引用實(shí)現(xiàn)”,Docker使runC能夠支持所有容器技術(shù)。為了保證Docker“廣泛的支 持”,Hykes宣讀了一份支持Docker的廠商列表:AWS、Apcera、Cisco、CoreOS、EMC、Fujitsu、Goldman Sachs、Google、HP、Huawei、IBM、Intel、Joyent、Linux Foundation、Microsoft、Pivotal、Rancher、Red Hat和 VMware。為了讓Docker有“開放的文化”,所有appc的維護(hù)者都以委員的身份加入“Open Container Project ”。Hykes接著隔空呼喊了CoreOS,以及感謝它對(duì)容器社區(qū)做出的貢獻(xiàn)。
Hykes重新回顧了下他的4個(gè)偉大目標(biāo),同時(shí)講述了他的第4個(gè)目標(biāo)(為企業(yè)解決實(shí)際問題)的大概內(nèi)容,并介紹了明天的議程,同時(shí)表示第4個(gè)問題在明天的議程中會(huì)詳細(xì)闡述;并重申:Docker所有的努力都是為人們實(shí)現(xiàn)理想與萬眾創(chuàng)新而服務(wù)的。
最后,Hykes宣布今天的議程結(jié)束。