前言:
最近想研究 docker 源碼,那么要研究源碼第一步就是學會通過源碼編譯。然后在網上查找了很多,都是比較老的版本。目前官最新的版本是 18.09。經過一番探索之后,終於成功編譯了
下面我把我的探索過程記錄下來
第一步:
已知docker是go語言開發的, 所以在最新版的 docker 查看對應的版本
如果沒有安裝 docker 的話,先按照文中的版本操作吧。我是根據 apt-get 安裝的 docker 來探索編譯 docker 的方法的
root@n3:~# docker version Client: Version: 18.09.3 API version: 1.39 Go version: go1.10.8 Git commit: 774a1f4 Built: Thu Feb 28 06:53:11 2019 OS/Arch: linux/amd64 Experimental: false Server: Engine: Version: 18.09.3 API version: 1.39 (minimum version 1.12) Go version: go1.10.8 Git commit: 774a1f4 Built: Wed Mar 27 09:56:24 2019 OS/Arch: linux/amd64 Experimental: false
第二步:
安裝 go 1.10.8 版本
配置 GOROOT 和 GOPATH (過程自行解決)
第三步:
從github上下載源碼 https://github.com/docker/engine/releases,找到任意版本下載到本地
解壓后重命名為 docker
將 docker 目錄移動到 $GOPATH/src/github.com/docker/ 目錄下
構建前要確認已經安裝了編譯庫:apt-get install gcc pkg-config btrfs-tools
開始構建:
進入到 $GOPATH/src/github.com/docker/docker 目錄下
執行命令 VERSION=testbuild DOCKER_GITCOMMIT=1 ./hack/make.sh binary 完成
ps: 可以選擇指定存儲引擎。只需要在命令前面加上這句,DOCKER_GRAPHDRIVER=overlay2
其中 VERSION 是構建后的 docker版本,比如上面的 18.09.3
構建完成后進入目錄:$GOPATH/src/github.com/docker/docker/bundles/binary-daemon
目錄下的 dcoker-dev 就是 docker-daemon,使用 ls -l 命令看到這里已經創建了軟連接 docker-dev -> dockerd
---
安裝 containerd
---
到這里就是啟動的問題:
為了了使用方便,我直接替換當前系統的docker啟動文件,替換前,先使用 systemctl stop docker 停止docker引擎。然后替換方式如下
step1:
查看 docker 服務文件位置, systemctl cat docker.service (前提是已經通過 apt-get install 安裝過了 docker)
在輸出的第一行中,提示有服務文件位置,我的是 /lib/systemd/system/docker.service
step2:
打開文件,找到行 ExecStart= /usr/bin/dockerd xxxx....
替換命令行中的 /usr/bin/dockerd 服務文件,這個文件是通過 apt-get install 安裝的 docker engine
替換成 $GOPATH/src/github.com/docker/docker/bundles/binary-daemon/dockerd
注意:$GOPATH替換成絕對路徑。如果不知道,使用 echo $GOPATH 就能看到了
step3:
替換后使用 systemctl daemon-reload 命令重載
step4:
執行命令, systemctl start docker 啟動引擎
驗證:
執行 docker version
root@n3:~# docker version Client: Version: 18.09.3 API version: 1.39 Go version: go1.10.8 Git commit: 774a1f4 Built: Thu Feb 28 06:53:11 2019 OS/Arch: linux/amd64 Experimental: false Server: Engine: Version: testbuild API version: 1.39 (minimum version 1.12) Go version: go1.10.8 Git commit: 1 Built: Wed Mar 27 10:52:22 2019 OS/Arch: linux/amd64 Experimental: false
可以看到引擎版本已經是 testbuild了
這里還要說明一下的,這個只是構建了 docker 引擎,docker client 的話需要另外構建。client 也就是我們通常使用的 docker 命令工具,比如 docker pull xxx , docker images xxx 等等
遇到問題:
1. ln -sf . ...錯誤
由於我的目錄是從 windows 掛載到 ubuntu上的。不能執行軟連接,所以將文件拷貝到 ubuntu 主機上再進行構建
如果還有不清楚的。歡迎留言: