深入淺出Docker(三):Docker開源之路
1. 背景
Docker從一開始的概念階段就致力于使用開源驅動的方式來發展,它的成功緣于國外成熟的開源文化氛圍,以及可借鑒的社區運營經驗。通過本文詳細 的介紹,讓大家可以全面了解一個項目亦或者一項技術是如何通過開源的方式發展起來的。為了更準確的描述Docker的社區狀況,請先看一份來自 Docker官方的數據:
圖中數據的看點有:
- 超過500個代碼貢獻者。代碼的貢獻者在社區發展過程中是非常重要的催化劑,它會不斷加快產品迭代的速度,讓項目更快的交付到最終用戶的手里。
- 20個全職開發。一般的開源項目一般都不會有如此多的全職開發人員,但是Docker卻有20個全職開發人員來驅動一個社區項目。這也從側面證明了國外公司對開源項目的支持力度,以至于一家初創公司都舍得投入20個全職開發來推動開源技術的發展。
- 超過8000個創建在GitHub上的Docker相關項目。通過這個規模可以看到圍繞Docker可以使用的項目已經非常豐富。
- Docker技術聚會。30個國家超過90個城市舉辦超過250個Docker技術聚會,這樣的技術聚會還在不斷增加,Docker技術愛好者可以在線申請承辦此類技術聚會。
- 50萬次的boot2docker下載。boot2docker為Docker官方推薦客戶端,50萬次也代表當前潛在的用戶群體。
Docker公司目前正式員工50多名,由開源老手Ben Golub(前GlusterFS CEO)主持運營。現在主要有以下幾個贏利點:
- 印有藍鯨的T恤和貼紙的品牌價值
- 通過Docker Hub服務提供SaaS的分發服務
- 提供Docker技術支持和培訓
通過了解Docker的社區現狀和公司的運營狀況,可以發現其在運營的方式上并沒有什么特別的地方。除了支付公司員工的正常開支外,它并沒有像一般 商業公司那樣在推廣上投入很多資金。Docker在推廣上主要是將開源社區和社交網絡作為基礎推廣平臺,結合全球范圍的Docker技術聚會,形成了良好 的良性的客戶互動和口口相傳的品牌效應。在Docker的開源歷程中,通過分析觀察用戶社區、源代碼管理、合作伙伴的生態圈這三種形式,梳理出一套實踐經 驗的案例,方便大家參考學習。
2. 用戶社區維護
Docker技術首先考慮的是在技術社區里通過各種渠道來找到它的用戶,而當前最流行的技術社交網絡不是推ter,而是GitHub。所以 Docker第一步是向GitHub上提交自己的代碼開始吸引自己的用戶的。我們總說萬事開頭難,那么Docker的第一個Commit應該是什么,它是 否需要包括測試、用戶文檔、用戶開發指南、設計理念等一系列的文檔和代碼呢?如果參照常規的開源項目,它們都考慮的都很周到,完善的代碼文檔結構會讓用戶 第一眼就知道這是一個成熟的項目,我們只要用就可以了。但Docker公司卻不按套路出牌,第一個Commit僅包括6個主文件:
沒有README,沒有開發環境指南,開始階段用戶無法有效的了解Docker項目。但是,這其實也是對的,因為在一個小眾的開源項目的初期,很難 吸引到社區用戶來為它貢獻代碼。在接下來的很長一段時間,Docker主要是由Docker之父Solomon Hykes開發維護。在沒有社區用戶參與的情況下,他每天不分晝夜地提交代碼,也許是為了生活,也許是為了愛好,Solomon Hykes在拼命的實現心中那個目標:讓LXC創建的容器更容易使用。用當下時髦的那句話講就是不忘初衷。
從 Solomon Hykes 貢獻代碼的趨勢圖,我們可以看到只有保證項目的活躍度(持續貢獻代碼)那么項目才有可能獲得用戶的認可和關注。試想,“三天打魚,兩天曬網”的開源項目會 給用戶怎么樣的感覺?作者都不專注,用戶怎么可能忠實?這種投入,并不是偶然性的,這是國外業界的開源文化,非常值得我們學習。
在代碼貢獻的同時,Docker.io的主站也在2013年的5月30日第一次提交到GitHub。這距離第一行代碼提交到GitHub已經有5個 月。總體來看,Docker從一開始僅僅是一個很酷的想法,到真正完成并可以對外發布版本,也是經歷了小半年之久。開源的意義并不像國內大多數廠商發布開 源項目一樣,一定要在內部應用的很成功才發布到技術社區。我們通過以上數據,可以很容易的看出來,它一定是一個長期的、持續的過程。你越專注的投入,你的 項目越有可能成功。
當然,如果僅僅Docker只在GitHub上提供代碼來吸引用戶,那也不會是最佳的實踐。在網站建立后的下一步,它開始在全球各大城市的技術聚會 上推廣介紹Docker。Docker技術在全球推廣的方法是通過線下的技術聚會,外加社交網絡媒體傳播才得到流行的。Docker官網通過發布“創建Docker技術聚會指南”, 引導Docker技術的愛好者自發申請承辦技術聚會。Docker官網主要通過類似推ter、Docker周報、用戶論壇等渠道,及時的把每個城市 即將開始的技術聚會時間和聯系人發布出來,就可以把Docker的技術推廣做下去。并且這種形式的最大好處是口碑相傳,其長尾效應的結果是Docker技 術開始在當地的技術圈得到關注。像這樣的技術聚會,一般都在30到200人之間,對于商業項目的推廣是無法參照這樣推廣的。但這種形式就像一顆種子散落在 城市中間,一旦有人介紹Docker技術到這個城市的技術圈,就會有更多的用戶去GitHub上關注Docker的項目進展。
3. 源代碼管理
Docker的源碼是按照模塊劃分的,每一個模塊都會單獨放在一個目錄里。并且每個目錄都會包含一個MAINTAINERS.md。當你提交一個 Pull Request的時候,子模塊的維護者就會站出來回答“LGTM (Looks Good To Me)” 表示已經看了你的代碼并接受你提交的代碼。
每一個想參與Docker開發的開發者,你需要進入一個特殊的目錄hack,這個目錄包括了所有你想知道的開發相關信息。它把開發者分為4類人,
- 代碼貢獻者,詳細指南看CONTRIBUTORS.md。
- 代碼維護者,詳細指南看MAINTAINERS.md。
- 程序打包者,詳細指南看PACKAGERS.md。
- 負責發布版本的維護者,詳細指南看RELEASE-CHECKLIST.md。
所有的指南文檔都非常詳細完整,可以做到看完此文檔就可以開始相應角色的任務。除了這些文檔之外,hack目錄還包括了發布,開發,測試等環節需要的輔助腳本,讓開發者可以得到很多開發上的便利。
Docker從一開始就是圍繞LXC開發的,但在版本穩定后,使用Go重寫了一套類LXC接口實現。也就是 libcontainer 項目。它的代碼管理方式與上面的Docker源代碼管理方式一樣,開發者可以很容易的導入到子項目libcontainer的開發。一致的管理方法可以提高流程的復用,這種管理方式希望能得到大家的借鑒參考。
4. 創建合作伙伴生態圈
首先,Docker從一開始使用Ubuntu版本作為開發環境,主要是Ubuntu上支持aufs(advanced multi layered unification filesystem)文件系統。所以,Docker對Ubuntu的支持是最好的。
還有就是大家非常熟悉的Google的GCE,在沒有Docker之前,就已經使用自己開發的類LXC容器。在有了Docker之后, Google開發了kubernetes來管理Docker。
商業版本Linux的領導者RedHat,也是Docker生態圈非常重要的合作伙伴。并且它支持的Fedora社區、CentOS社區會對推廣Docker技術起到關鍵性作用。
還有就是OpenStack的建立者Rackspace,在混合云解決方案上具有全球領導地位。Docker與它的合作,可以幫助Docker技術在混合云的解決方案中得到推廣。
最后就是開源PaaS項目DEIS,基于Docker和CoreOS技術構建的類如Heroku發布流程的PaaS應用。與它的合作,可以讓更多的企業看到一個使用Docker技術的范本。
5. 結論
Docker的開源之路可以說是開源項目的最佳實踐,它從屌絲瞬間變為高富帥的歷程并不是偶然。Docker的開源之路還在進行中,從它的模式中我 們可以學習到的東西并不僅僅局限于以上羅列的幾點,讀者可以在參與開源項目的過程中多體會,找到自己的“痛點”,然后參考Docker等開源項目的做法, 相信可以很快解決你的問題。
6. 作者簡介
肖德時, Red Hat Engineering Service/HSS 內部工具組Team Leader. Nodejs開源項目nodejs-cantas Lead Developer。擅長企業內部工具的設計以及實現。開源課程Rails Starter的發起人。rubygem: lazy_high_charts的Maintainer。推ter賬號:xds2000,郵箱:xiaods@gmail.com
7.下期預告
Docker技術基本信息已經介紹的差不多了,接下來的系列將進入實戰篇。下一篇將重點講解Docker的集成測試部署方法,并結合眾場景(數據庫集成、測試、審查、部署)給出參考解決方案,敬請期待!
來自:http://www.infoq.com/cn/articles/docker-open-source-road?utm_source=infoq&utm_medium=related_content_link&utm_campaign=relatedContent_articles_clk