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