Docker 非docker環境中編譯安裝

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

最近要修改docker的源碼做一些開發,但是docker的官網給的編譯方式是用docker提供的dockerfile檔案編譯一個docker 鏡像然後在這個容器裡面通過腳步編譯docker。我們都知道1.11以後的docker實際上有docker dockerd  docker-containerd  runc 幾個進程組成。如何我修改一次就要全部編譯一遍多麻煩。所以我覺定自己go build 出docker的幾個可執行檔。

1. git clone github.com/moby/moby  現在docker 的代碼從docker/docker 遷移到了 /moby/moby。當然你編譯之前還需要安裝go。這個golang 官網都有按照說明安裝就好。

2. 編譯docker  就是docker client 。代碼在 cmd/docker  下,我這裡是1.13.x 分支。在你的gopath 路徑下還有一個docker/docker 的目錄你要保持 docker下的分支和moby 下的一致。不然在moby 下build 會出錯。然後 go build  。會產生docker  bin檔案。

3.編譯 dockerd  編譯dockerd 的時候需要安裝許多包。可以根據錯誤提示安裝需要的包。例如我是fedora25 。 go build 會報 libdevmapper.h 缺少。然後 dnf install   device-mapper-devel.x86_6 。

4. 編譯containerd . git clone github.com/docker/containerd .    編譯containerd 使用containerd 的make file 來編譯產生。 編譯完以後會產生 containerd-shim ,containerd。  具體參考 containerd 的README。

5.編譯產生runc 。runc是最終啟動容器的工具,可以說容器的核心。實際上沒有 dockerd 也是發送命令到containerd  containerd 再 啟動 containd-shim containerd-shim 再調用runc 來啟動容器 停止容器等容器運行生命週期的各種操作。其實沒有前幾個進程,可以直接發送資料給runc 啟動容器。當然了要符合oci的標準。具體可以參考runc項目的readme runc 現在在 https://github.com/opencontainers/runc。docker 變曾經的libcontainer貢獻出來改了個名字變成cncf下的runc 項目。 runc 編譯 就go build 一下。具體看github的 readme 寫的非常詳細。

現在docker 需要的5個bin檔案全部都編譯產生完成。 分別是docker   dockerd  containerd  containerd-shim  和runc 。編譯這些可執行檔主要是為了方便我調試docker  代碼。後面我會修改docker dockerd   containerd 等 。從一條docker run  看 資料如何在 這幾個進程間流動。如何互相調用。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.