從原始碼編譯docker (moby)
下面是從原始碼編譯最新(2018-03-27)的 docker/cli 和 moby 的詳細過程
第1步 安裝 ubuntu 16.04
下載最新的 ubuntu-16.04.4-desktop-amd64.iso
安裝後
# cat /etc/os-release
NAME="Ubuntu"
VERSION="16.04.4 LTS (Xenial Xerus)"
# uname -a
Linux vbcomputer 4.13.0-36-generic #40~16.04.1-Ubuntu SMP Fri Feb 16 23:25:58 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
NOTE: 本文件所有命令都使用 root 賬戶操作
第2步 更改 apt 安裝源
# cat /etc/apt/sources.list
#deb包
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable
第3步 安裝 go 語言
https://studygolang.com/dl
下載
https://studygolang.com/dl/golang/go1.9.4.linux-amd64.tar.gz
NOTE: 必須是 go 1.9.4 , 不能用 go 1.10
tar xzvf go1.9.4.linux-amd64.tar.gz -C /usr/local/go
設定環境變數
/etc/bash.bashrc 最後增加
export GOROOT=/usr/local/go
export PATH=$GOROOT/bin:$PATH
/root/.bashrc 最後增加
export GOPATH=/gospace
export PATH=${GOPATH}/bin:${PATH}
第4步 安裝 docker
https://mirrors.aliyun.com/docker-ce/
下載
https://mirrors.aliyun.com/docker-ce/linux/ubuntu/dists/xenial/pool/stable/amd64/docker-ce_17.12.1~ce-0~ubuntu_amd64.deb
# dpkg -i docker-ce_17.12.1~ce-0~ubuntu_amd64.deb
# docker version
Client:
Version:17.12.1-ce
API version:1.35
Go version:go1.9.4
Git commit:7390fc6
Built:Tue Feb 27 22:17:40 2018
OS/Arch:linux/amd64
Server:
Engine:
Version:17.12.1-ce
API version:1.35 (minimum version 1.12)
Go version:go1.9.4
Git commit:7390fc6
Built:Tue Feb 27 22:16:13 2018
OS/Arch:linux/amd64
Experimental:false
第5步 更新 docker hub 源
mv /etc/docker/daemon.json /etc/docker/daemon.json_orig
將新的源寫入 /etc/docker/daemon.json
效果如下
# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
第6步 編譯 docker/cli
下載 https://github.com/docker/cli.git
# git clone https://github.com/docker/cli.git /gospace/src/github.com/docker/cli
NOTE: docker/cli 的程式碼, 必須 git clone 到 ${GOPATH}/src/github.com/docker/cli/ 路徑下面, 其它路徑都不行.
# cd /gospace/src/github.com/docker/cli
# make binary --> 執行編譯
編譯成功後, 生成 build/docker
在路徑 ${GOPATH}/src/github.com/docker/cli/build/docker
第7步 下載 https://github.com/moby/moby.git
# git clone https://github.com/moby/moby.git /gospace/src/github.com/docker/docker
NOTE: moby 的原始碼, 必須 git clone 到 ${GOPATH}/src/github.com/docker/docker 目錄, 並且目錄名叫做 docker, 而不是 moby
第8步 第一次修改 /gospace/src/github.com/docker/docker/Dockerfile
# cd /gospace/src/github.com/docker/docker
修改 Dockerfile
將 debian 源 改為 163的源
在
ARG APT_MIRROR=deb.debian.org
RUN sed -ri "s/(httpredir|deb).debian.org/$APT_MIRROR/g" /etc/apt/sources.list
行後增加如下這行
RUN rm /etc/apt/sources.list && echo 'deb http://mirrors.163.com/debian/ stretch main' >> /etc/apt/sources.list && echo 'deb http://mirrors.163.com/debian/ stretch-updates main' >> /etc/apt/sources.list && echo 'deb http://mirrors.163.com/debian-security/ stretch/updates main' >> /etc/apt/sources.list
第9步 第二次修改 /gospace/src/github.com/docker/docker/Dockerfile
將 FROM base AS frozen-images 下面的 RUN 命令刪除
也就是刪除
RUN /download-frozen-image-v2.sh /docker-frozen-images \
buildpack-deps:[email protected]:dd86dced7c9cd2a724e779730f0a53f93b7ef42228d4344b25ce9a42a1486251 \
busybox:[email protected]:bbc3a03235220b170ba48a157dd097dd1379299370e1ed99ce976df0355d24f0 \
busybox:[email protected]:0b55a30394294ab23b9afd58fab94e61a923f5834fba7ddbae7f8e0c11ba85e6 \
debian:[email protected]:287a20c5f73087ab406e6b364833e3fb7b3ae63ca0eb3486555dc27ed32c6e60 \
hello-world:[email protected]:be0cd392e45be79ffeffa6b05338b98ebb16c87b255f48e297ec7f98e123905c
並刪除
COPY --from=frozen-images /docker-frozen-images /docker-frozen-images
這句
/docker-frozen-images 做測試用, 如果只是編譯binary 可以暫時不管
第10步 第三次修改 /gospace/src/github.com/docker/docker/Dockerfile
將 && pip install -r test-requirements.txt 這句
改為 && pip install -r test-requirements.txt -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
這樣改以後, 一般來說, make build 會成功
如果這樣改了以後, make build 在這句不成功
則刪除
RUN cd /docker-py \
&& pip install docker-pycreds==0.2.1 \
&& pip install -r test-requirements.txt
這一整句
/docker-py 做測試用, 如果只是編譯binary 可以暫時不管
第11步 修改 /gospace/src/github.com/docker/docker/hack/dockerfile/install/dockercli.installer
將
url=https://download.docker.com/linux/static
改為
url=https://mirrors.aliyun.com/docker-ce/linux/static
第12步 先編譯 docker container
# cd /gospace/src/github.com/docker/docker
# make build
如果成功的話
可以看到
# docker images
docker-dev master a74b5338e172 About an hour ago 1.67GB
第13步 再在容器中編譯 moby
# cd /gospace/src/github.com/docker/docker
# make binary
編譯成功的話, 可以看到
root:/gospace/src/github.com/docker/docker/bundles
# tree .
.
├── binary-daemon
│ ├── docker-containerd
│ ├── docker-containerd-ctr
│ ├── docker-containerd-ctr.md5
│ ├── docker-containerd-ctr.sha256
│ ├── docker-containerd.md5
│ ├── docker-containerd.sha256
│ ├── docker-containerd-shim
│ ├── docker-containerd-shim.md5
│ ├── docker-containerd-shim.sha256
│ ├── dockerd -> dockerd-dev
│ ├── dockerd-dev
│ ├── dockerd-dev.md5
│ ├── dockerd-dev.sha256
│ ├── docker-init
│ ├── docker-init.md5
│ ├── docker-init.sha256
│ ├── docker-proxy
│ ├── docker-proxy.md5
│ ├── docker-proxy.sha256
│ ├── docker-runc
│ ├── docker-runc.md5
│ └── docker-runc.sha256
└── latest -> .
2 directories, 22 files
相關推薦
從原始碼編譯docker (moby)
下面是從原始碼編譯最新(2018-03-27)的 docker/cli 和 moby 的詳細過程第1步 安裝 ubuntu 16.04下載最新的 ubuntu-16.04.4-desktop-amd64.iso 安裝後# cat /etc/os-release NAM
ARM64從原始碼編譯docker(v1.9.1)
在X86_64機器fedora系統下,不要使用官方編譯的rpm包,交叉編譯bootstrap會出現異常,使用原始碼編譯的go. 1.編譯X86_64的go binary cd /root git clone https://github.co
CentOS 從原始碼編譯並安裝 Nginx
Linux 系統要求 Nginx 在 Linux 作業系統下執行的時候,要想獲取高併發能力,要求 Linux 核心必須在 2.6 以上,可通過以下命令檢視 Linux 核心版本。 $ uname -r 2.6.18-128.e15 安裝 Nginx 的必備軟體 通過以下命令安裝使用
Linux從原始碼編譯安裝程式詳解
1.原始碼編譯概述 1.1 使用原始碼安裝軟體的優點: 獲得最新的軟體版本,及時修復bug 根據使用者需要,靈活定製軟體功能 1.2 應用場合舉例 安裝較新版本的應用程式時 當前安裝的程式無法滿足需要時 需要為應用程式新增新的功能時
golang 從原始碼編譯記錄
下載golang 原始碼 筆者寫此部落格的時候最新是go 1.10.1 版本。 原始碼目錄 /root/source_bk/go_source/go 基本編譯流程解釋 go 語言編譯器自1.5版本開始自舉 ( 使用go編譯器編譯go編譯器 ) 。所
Python3.7.1從原始碼編譯安裝
#!/bin/bash #確保shell 切換到當前shell 指令碼資料夾 current_file_path= ( c
linux下從原始碼編譯比特幣客戶端
下載原始碼 這個是master分支的,建議在tag裡選最新的穩定版,目前是v0.14.2 直接下載zip,別clone了,clone很慢。 編譯程式碼 不妨先看看官方的編譯說明 ps: 第一手的官方的資源一般都是最好的,有問題了最好
在win10裡從原始碼編譯nodejs的安裝包和學習原始碼
大家其實都是從網站上下載直接安裝檔案的,為什麼還要從原始碼安裝呢?可能原因就兩個,一個想自己優化,新增一個特定的東西;另一個想學習nodejs的實現,知道為什麼這樣實現的。我這裡主要為學習nodejs的實現,所以要到下面的網站下載原始碼:https://nodejs.org/
從零開始學習區塊鏈技術(一)--從原始碼編譯比特幣
寫在開始之前,為什麼你一定要學習區塊鏈技術? 技術的變革和迭代一直在飛速發展中,作為有著15年程式開發經驗的我,常常在思考現在的我們到底改如何做,到底應該學習些什麼,才能跟上新的時代變革,保持自身的競爭力,並且能為這個世界帶來更好的改變呢? 答案是,學習
OpenCV安裝流程及從原始碼編譯方法 + 配置VS
本篇文章記錄了安裝OpenCV 3.4.2及配置VS2017的方法,以及利用CMake從原始碼編譯適用於老版本VS2013的OpenCV 3.4.2的編譯及配置流程。本文也可以作為其他OpenCV及VS版本安裝配置方法的參考。 1 安裝OpenCV 3.4.2
從原始碼編譯TensorFlow CPU版本
1 安裝Python3 的依賴 sudo apt-get install python3-numpy python3-dev python3-pip python3-wheel 2從原始碼安裝Bazel sudo apt-get install ope
Linux 從原始碼編譯安裝 OpenSSH
https://blog.csdn.net/bytxl/article/details/46639073 Linux 從原始碼編譯安裝 OpenSSH以及各問題解決 2015年06月25日 17:37:49 by
Ubuntu16.04 從原始碼編譯LLVM+Clang
最近在安裝一個Vim自動補全外掛——YouCompleteMe,這個外掛可以根據語義補全,因此需要Clang這個庫,不過LLVM的官網並沒有提供Ubuntu的預編譯二進位制版本,所以需要自己從原始
從原始碼編譯cef-chromium的正確步驟
之前編譯過cef-chromium的原始碼,但是找不到之前的原始碼工程了。幸好壓縮原始碼還存在電腦裡。 現在又要編譯一下,因為需要定製自己需要的功能,這裡就把編譯過程記錄一下,以免以後還會遇到,也分享給需要的讀者。 下載cef-chromium的原始碼需要到google網站
Linux 從原始碼編譯安裝 OpenSSH以及各問題解決
簡單的說 OpenSSH 是一組安全遠端的連線工具,主要包括了幾個部份:ssh、sshd、scp、sftp、ssh-keygen、ssh-agent、ssh-add。OpenSSH 安裝配置比較複雜,難點在配置,特別是在 VPS 中,配置不當就完全無法連結 VPS 了。
從原始碼編譯OSG
Windows 下: 2。使用CMake工具編譯OSG。 1)把CMakeLists.txt 拖放到CMake軟體的GUI介面上,可以選擇更改安裝路徑:"Where to build the binaries"。該路徑是OSG的初始編譯路徑。 2)點選 '
【指導】從原始碼編譯安裝Git-Ubuntu
1 下載原始碼包 2 編譯安裝Git 1)安裝編譯原始碼包的工具: $sudo apt-get installlibcurl4-gnutls-dev libexpat1-dev gettext libz-dev libssl-dev 2)展開原始碼包,進入: $t
使用交叉混合編譯從原始碼編譯龍芯上的llvm/clang-3.4
目標: 使用交叉混合編譯(hybrid cross-compiling)從原始碼編譯龍芯上的llvm/clang-3.4。之所以是混合交叉編譯而不是交叉編譯,是因為編譯的過程中,大部分程式碼是由效能較高的主體(Host)平臺編譯,而少部分程式碼是由效能較低的目
ubuntu下無root許可權下用anaconda2從原始碼編譯並安裝caffe2 採坑日記!
相信做目標檢測的同學都知道facebook已經開源了一個整合很多先進目標檢測演算法的庫,但是官網教程主要針對採用ubuntu系統python來編譯安裝caffe2,由於採用深度學習伺服器沒有sudo許可權,我花費了一天半安裝GPU版的caffe2,最多的錯誤就是
從原始碼搭建etherum,solidity編譯環境
使用ubuntu1804(由ubuntu-18.04.1-server-amd64.iso安裝)環境 1, 安裝go mkdir -p /home/001_code/001_golang/ cd /home/001_code/001_golang/ wget https: