天天看點

如何成為一名優秀的Docker代碼貢獻者

本文講的是<b>如何成為一名優秀的Docker代碼貢獻者</b>,【編者的話】開源漸成主流,越來越多的開發者想參與開源社群。而時下最火熱的Docker也許就是開發者入手開源項目的最好選擇,它不僅是目前最流行的開源項目之一,而且在送出Issue方面的文檔和流程都是目前我見過的開源項目裡最好的。本文主要介紹了如何入手開源項目,一些小經驗和小工具,一起來學習。

你可以參與改進很多人都在使用的項目,以此來獲得認同感;

你可以與開源社群中的那些聰明絕頂的人通力合作;

你可以通過參與了解和改進這個項目來使自己成為一名更加出色的程式員。

但是,從一個新的基準代碼(codebase)入手絕對是一件恐怖的事情。目前,Docker已經有相當多的代碼了,哪怕是修複一個小問題,都需要閱讀大量的代碼,并了解這些部分是如何組合在一起的。

如何成為一名優秀的Docker代碼貢獻者

我們正在尋找對應docker指令的main函數,它是docker/docker/docker.go中的一個檔案。點選搜尋結果,我們會跳到其定義(如下所示)。花一點時間浏覽一下這個函數:

在很多的應用和程式庫中,都有1到2個關鍵接口,它表述了核心功能或者本質。讓我們嘗試到達這個關鍵部分。

點選‘NewDockerCli’的搜尋結果,我們會到達函數的定義。由于我們感興趣的隻是這個函數所傳回的結構體——「DockerCli」,是以讓我們點選傳回類型來跳轉到其定義。

閱讀『DockerCli.Cmd』的實作可以發現,它調用了『DockerCli.getMethod』方法來執行每條Docker指令所對應的函數。

這裡有很多内容。在方法的頂部,我們可以看到代碼會為Dockerfile和配置處理各種輸入方法。通常,在閱讀一個很長的方法時,倒過來讀是一種很不錯的政策。從底部開始,觀察函數在最後做了什麼。很多情況中,它們都是函數的本質,而之前的内容無非隻是用來補全核心行為的。

至此,我們已經徹底了解了一個單獨的Docker用戶端指令,或許你仍希望更進一步,找到守護程序接受請求的部分,并一路跟蹤到它和LXC以及核心互動的部分。這當然是一條合理的路徑,但是我們将其作為練習留給各位讀者。接下來,讓我們對用戶端的關鍵元件有一個更加全面的認識。

如何成為一名優秀的Docker代碼貢獻者

為了完全了解一個代碼片段,你需要同時知曉它是如何工作的以及是如何來使用的。通過閱讀代碼的定義部分讓我們了解前者,而檢視使用示例則是涵蓋了後者。

請在更多的函數和方法上嘗試它,并了解它們的内部聯系。如果這有幫助,那麼請就應用的不同子產品如何互動畫一張圖。

如果你覺得有必要,可以一路做好筆記,記錄你的經曆,并像本文一樣作為部落格釋出。Docker團隊非常樂意看到你研究他們代碼的經曆。

對一個巨大且陌生的基準代碼的恐懼,俨然已經成為了一個阻止人們參與到項目中的誤解。我們經常假設,對于程式員而言,工作的難點在于寫代碼,然而閱讀并了解他人的代碼卻往往是最關鍵的一步。認識到這一切,并堅定地迎接任務,輔以優秀的工具,會幫助你克服心理防線,以更好地投入到代碼中。

原文釋出時間為:2015-06-19

本文作者:codesun 

本文來自雲栖社群合作夥伴DockerOne,了解相關資訊可以關注DockerOne。

原文标題:如何成為一名優秀的Docker代碼貢獻者