1. 程式人生 > >從原始碼編譯docker (moby)

從原始碼編譯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: