這片博文屬於Github操作經驗及技巧的記錄,通過向github提交docker源碼的研究紀錄一點github操作的技巧和經驗,這對以後對個人github上代碼的管理和提交也很有幫助,適用於一些github初學者,做一些簡單的代碼管理。(通過這段時間博文的不斷更新,本小博主發現越來越喜歡更新博文了,雖然這樣會拖慢學習進度,但實際上從長遠看來,對於個人的學習倉庫的建立還是很有幫助的,而從短時間來看,將博文和研究學習結合在一起,非常有助於整理思路和積累技巧,當我在研究過程中需要使用工具,或者有一點自己的整體框架上的思考,博文的紀錄會給我一種非常安心的感覺,就像這些學習到的知識確確實實的被我佔有了一樣,好了,廢話不多說,先完成這篇博文的編寫吧)
我先從整體上整理一下我這篇博文需要紀錄的操作過程:
1.安裝好所需要的軟件及工具
2.爲提交代碼配置git工具
3.提交代碼所需的一些常用git命令操作
4.與docker相關的操作,刪除容器,啓動容器,修改源碼,運行測試用例(單元測試,集成測試等)
一.安裝所需的軟件及工具
(1)註冊一個github賬號。這裏自行註冊
(2)安裝git命令,sudo apt-get install git
(3) 安裝make命令,sudo apt-get install make
(4)安裝或升級Docker,Docker的安裝自行去Docker官網上去一步步安裝,我的安裝過程如下:
二. 爲提交代碼配置git工具
(1)爲Docker源碼在github上創建分支(fork)並將源碼下載(clone)到本地
創建分支:首先打開瀏覽器登錄github帳號,然後進入docker/docker倉庫進入如下頁面,點擊一下Fork按鈕:
之後在你的github賬戶下就有一個docker的分支目錄YourAccount/docker ,即docker源碼,隨後複製該fork分支的clone Url如下
再通過如下命令行順序將docker源碼copy到本地來:
cd ~
mkdir repos
cd repos
git clone +(你之前複製的分支Url)
cd docker-fork
恭喜你成功進入docker_fork源碼目錄了~
(2)設置你的git簽名信息用於遠程提交代碼
當你想要修改你的分支中的源碼的時候,你希望能和其他人在docker/docker這個倉庫中所作的修改和變動同步,爲了使得同步更簡單,你也會添加一個遠程命令upstream指向docker/docker ,由於Docker不接受任何匿名的代碼提交,所以我們需要配置名稱和郵箱等個人信息。
cd docker-fork
git config --local user.name "FirstName LastName "
git config --local user.email "[email protected]"
git remote add upstream https://github.com/docker/docker.git //設置本地倉庫跟蹤源碼主線的改動
檢查設置完畢的信息:
(3)創建分支並將這個分支提交
cd docker-fork
git checkout -b dry-run-test //創建一個目錄並進入到這個目錄
git branch //驗證你是否在這個分支裏面
*dry-run-test //*表示正在該目錄分支下
master
touch TEST.md //在該分支創建一個文件,然後在這個文件通過vim工具隨便寫點內容,然後保存退出
git status //檢查分支狀態如下圖
On branch dry-run-test
Untracked files:
(use "git add <file>..." to include in what will be committed)
TEST.md
nothing added to commit but untracked files present (use "git add" to track)
git add TEST.md //階段性的添加,還沒有真正提交
git commit -s -m "your message about your changes" // 填寫提交代碼改動的相關備註
最後一步提交代碼:
操作完成後即可在你的github賬戶中的docker-fork目錄下查找dry-run-test目錄及該目錄下的TEST.md文件,即提交成功。
三.啓動開發環境的容器並嘗試修改源碼
(1)先刪除原有的容器和鏡像
docker rm $(docker ps -a -q)//刪除
docker images//驗證
(2)運行一個開發環境下的容器
cd ~/repos/docker-fork
git checkout dry-run-test //確保我在dry-run-test分支下
make BIND_DIR=.shell //使用make命令構建一個開發環境鏡像並將它運行在一個容器當中
docker run --rm -i --privileged -e BUILDFLAGS -e KEEPBUNDLE -e DOCKER_BUILD_GOGC -e DOCKER_BUILD_PKGS -e DOCKER_CLIENTONLY -e DOCKER_DEBUG -e DOCKER_EXPERIMENTAL -e DOCKER_GITCOMMIT -e DOCKER_GRAPHDRIVER=devicemapper -e DOCKER_INCREMENTAL_BINARY -e DOCKER_REMAP_ROOT -e DOCKER_STORAGE_OPTS -e DOCKER_USERLANDPROXY -e TESTDIRS -e TESTFLAGS -e TIMEOUT -v "home/ubuntu/repos/docker/bundles:/go/src/github.com/docker/docker/bundles" -t "docker-dev:dry-run-test" bash
//這個命令就是在dry-run-test目錄下構建一個鏡像並運行該容器,並且該容器內部安裝有docker
該命令執行後,我們會進入該容器環境目錄如下
root@f31fa223770f:/go/src/github.com/docker/docker#
通過ls命令我們依然可以看到docker源碼目錄,然後編譯docker命令二進制文件,並將該二進制文件cp到usr/bin/目錄下。
將上述容器環境的目錄下執行:
hack/make.sh binary
cp bundles/1.12.0-dev/binary-client/docker* /usr/bin/
cp bundles/1.12.0-dev/binary-daemon/docker* /usr/bin/
現在就可以直接使用docker命令了
docker daemon -D& //-D表示debug模式,&表示後臺運行
hack/make.sh binary install-binary run // 這個命令會使得run這個命令自動執行build ,install,run三個命令
docker run hello-world 成功運行即可
(3)嘗試修改docker源碼
到這裏你已經成功在docker-fork/dry-run-test目錄下構建了一個開發環境的容器,並且該容器裏面運行着docker,含有docker源碼,並可以執行docker的二進制命令文件。
當我們在docker-fork目錄下所做的docker源碼的修改,想要它與開發環境容器中的docker源碼同步並運行測試,需要經歷以下幾步:
首先我們要確定我們在docker-fork目錄環境下
make shell //這是將我本地的docker源碼倉庫(也就是docker-fork)掛載到開發環境docker容器中
打開
cli/command/container/attach.go文件
做如下修改:
flags.BoolVar(&opts.noStdin, "no-stdin", false, "Do not attach STDIN")
|修改爲下面的內容
flags.BoolVar(&opts.noStdin, "no-stdin", false, "Do not attach STDIN (standard in)")
保存退出後執行
進入我們的開發環境的容器重新編譯docker二進制文件:
hack/make.sh binary
cp bundles/1.12.0-dev/binary-client/docker* /usr/bin/
cp bundles/1.12.0-dev/binary-daemon/docker* /usr/bin/
然後執行docker attach --help就會出現如下信息
至此我們已經可以成功的創建github環境的配置及代碼提交操作包括docker源碼的修改測試等全部流程,此後,我們再慢慢閱讀docker源碼,嘗試根據自己的需求去做特定的修改,然後提交至github,爲docker開源社區做出我們的貢獻~