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