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