最新版 源碼編譯 docker


前言:

最近想研究 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 主機上再進行構建

 

如果還有不清楚的。歡迎留言:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM