编译docker的必要条件

  这阵子在公司搞docker container这些技术,docker编译网上查了一下木有靠谱的。只好自己动手丰衣足食了。

  声明:你编译docker不需要git pull它的源码,必备条件只有一个,就是你有一台能pull镜像的docker主机就行了。

本人环境是VMware下CentOS Linux release 7.1.1503 (Core) [x86_64]

以下为编译过程的具体记录

1.pull docker-dev:1.8.2的镜像

[root@myserv docker]# docker pull docker-dev:1.8.2
Pulling repository docker-dev
ab03141ac2e9: Pulling dependent layers
d3a1f33e8a5a: Download complete
c22013c84729: Download complete
d74508fb6632: Download complete
91e54dfb1179: Download complete
758970a22420: Download complete
62fd5b9e4d35: Download complete
944fcdea21b1: Download complete
ab975b7812f0: Download complete
0f860819eb9c: Download complete
adcf22790962: Download complete
c79325ee5872: Download complete
115d2806e84a: Download complete
1705282a2f45: Download complete
5d8bf41b5802: Download complete
3388f79cde5c: Download complete
979009c412cd: Download complete
11eaa2b57f9e: Download complete
b3ff0a3e16f1: Download complete
a7cc3d81aeed: Download complete
94b8248ce242: Download complete
006aa3cb8d92: Download complete
5ce85bb004d1: Download complete
28907ad32b10: Download complete
919096bcd935: Download complete
2a138d63ee40: Download complete
2b2733893e80: Download complete
ab03141ac2e9: Download complete
906727032fc8: Download complete
c296523a5eea: Download complete
f38d4f3bc631: Download complete
b5564cf04aab: Download complete
cd3a9bdbad49: Download complete
a223a267d4b0: Download complete
0912427504fa: Download complete
9d153769f49b: Download complete
4ec1b8c4c270: Download complete
7ca719ee5f14: Download complete
3b994c4a49de: Download complete
062d730e6007: Download complete
ac1892714a82: Download complete
ac43d240b0a2: Download complete
dbab3fbdd774: Download complete
79d657b6d894: Download complete
725fa96f33ab: Download complete
ad50f4526814: Download complete
ee0aa2630de6: Download complete
a9314782dbbf: Download complete
23f7502170cd: Download complete
8bfc29dd7728: Download complete
Status: Downloaded newer image for docker-dev:1.8.2

2.创建一个目录存放docker编译后生成的文件夹

[root@myserv home]# mkdir -p /home/dockerbuild/bundles
[root@myserv home]# cd /home/dockerbuild/

3.运行刚刚pull好的docker-dev镜像,然后在容器里进行docker的编译工作

[root@myserv home]# docker run --rm -it --privileged \
-e BUILDFLAGS -e DOCKER_CLIENTONLY -e DOCKER_EXECDRIVER -e DOCKER_EXPERIMENTAL \
-e DOCKER_GRAPHDRIVER -e DOCKER_STORAGE_OPTS -e DOCKER_USERLANDPROXY -e TESTDIRS -e TESTFLAGS -e TIMEOUT \
-v /home/dockerbuild/bundles:/go/src/github.com/docker/docker/bundles docker-dev:1.8.2 bash root@87193e358c88:/go/src/github.com/docker/docker# hack/make.sh binary ---> Making bundle: binary (in bundles/1.8.2/binary)
Building: bundles/1.8.2/binary/docker-1.8.2
Created binary: bundles/1.8.2/binary/docker-1.8.2

4.查看编译输出并验证编译结果

root@87193e358c88:/go/src/github.com/docker/docker# ls -l bundles/1.8.2/binary/
total 21104
lrwxrwxrwx 1 root root 12 Sep 15 10:20 docker -> docker-1.8.2
-rwxr-xr-x 1 root root 21599668 Sep 15 10:20 docker-1.8.2
-rw-r--r-- 1 root root 47 Sep 15 10:20 docker-1.8.2.md5
-rw-r--r-- 1 root root 79 Sep 15 10:20 docker-1.8.2.sha256

  上述可以看到在容器内,bundles目录已经有了编译好的docker程序文件了。退出容器后,在本机/home/dockerbuild/bundles/1.8.2/binary目录下会得到一个编译完毕的docker。

[root@myserv dockerbuild]# cd bundles/
[root@myserv bundles]# ls
1.8.2 latest
[root@myserv bundles]# cd 1.8.2/
[root@myserv 1.8.2]# ls
binary
[root@myserv binary]# ls -l
total 21104
lrwxrwxrwx 1 root root 12 Sep 15 18:20 docker -> docker-1.8.2
-rwxr-xr-x 1 root root 21599668 Sep 15 18:20 docker-1.8.2
-rw-r--r-- 1 root root 47 Sep 15 18:20 docker-1.8.2.md5
-rw-r--r-- 1 root root 79 Sep 15 18:20 docker-1.8.2.sha256
[root@myserv binary]# ./docker version
Client:
Version: 1.8.2
API version: 1.20
Go version: go1.4.2
Git commit: 0a8c2e3
Built: Tue Sep 15 10:20:40 UTC 2015
OS/Arch: linux/amd64
Error response from daemon: client and server don't have same version (client API version: 1.20, server API version: 1.19)

题外话

  官方之所以选择在容器内编译docker的方式是因为容器内部已经集成好编译docker所需的环境及组件了,我也懒得在centos里将依赖一个个装了。

Update 1

  容器内的源码目录:/go/src/github.com/docker/docker
  其对应的GOPATH设置如下:

root@bd341b3fe6b9:/go/src/github.com/docker/docker# go env

GOARCH="amd64"
GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/go:/go/src/github.com/docker/docker/vendor"
GORACE=""
GOROOT="/usr/local/go"
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
CC="gcc"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0"
CXX="g++"
CGO_ENABLED="1"

本文到此结束,谢谢。

docker 1.8.2 源代码编译的更多相关文章

  1. 源代码编译安装Python3.5.2

    由于没有找到Python3.5的rpm安装包,因此进行源代码编译安装 1.下载Python3.5.2 [root@seastar ~]# cd /usr/local/src [root@seastar ...

  2. Android 6.0 源代码编译实践

    http://www.judymax.com/archives/1087 Android 6.0 源代码编译实践 https://mirrors.tuna.tsinghua.edu.cn/help/A ...

  3. Nginx+Php-fpm+MySQL+Redis源代码编译安装指南

    说明:本教程主要包括以下三个部分: 1. 源代码编译安装Nginx 2. 源代码编译安装php以及mysql.redis扩展模块 3. 配置虚拟主机 文中所涉及安装包程序均提供下载链接,欢迎使用 运行 ...

  4. 3DSlicer源代码编译过程vs2008+windows xp [转]

    一 下载QT源代码编译 1.  简述   在 Windows2000/xp/vista 下,安装 VS2008, QT 4.7.2 :并在 VS2008上建立 QT 的集成开发环境,利用 VS2008 ...

  5. 官方发布的新版本Qt已经不支持XP了,要自己从源代码编译

    官方发布的新版本Qt已经不支持XP了,要自己从源代码编译,编译选项里有个-target项,用来提供XP支持的,编译时加上-target xp就可以了 http://www.qtcn.org/bbs/r ...

  6. Ubuntu通过源代码编译安装Octave 4.0

    本教程/笔记,意在指导在Ubuntu及其它Linux系统上怎样通过源代码安装Octave. Octave简单介绍 Octave是GNU旗下取代matlab的数学工具软件,语法与matlab高度兼容.而 ...

  7. Storm-0.9.2-incubating源代码编译打包

    近期遇到一些同学询问Storm-0.9.2-incubating源代码编译打包的问题,现将编译步骤说明例如以下: 1.凝视掉project各pom文件里关于maven插件(maven-gpg-plug ...

  8. 源代码编译安装 PHP5.5.0,解决curl_exec訪问HTTPS返回502错误的问题

    近期碰到一个奇怪的问题. PHP使用 curl_exec 訪问 HTTPS 网页时, 返回502错误, 訪问HTTP网页时没有问题,  用   echo   phpinfo() ;  查看. 支持op ...

  9. [CLR via C#]1.1 将源代码编译成托管代码

    原文:[CLR via C#]1.1 将源代码编译成托管代码 1. 公共语言运行时(Common Language Runtime,CLR)是一种可由多种编程语言使用的"运行时". ...

随机推荐

  1. switch 的一些事

    switch后面的括号的表达式,其值得 “类型" 应为整数类型(包括字符类型). case后面跟一个常量或者常量表达式,

  2. CSS导航的魔力——源自温谦老师《CSS彻底研究设计》

    web标准出台以后,非常注重的一个标准就是希望内容与样式分离.希望HTML就干HTML该干的事.但是有的时候我们为了美观必须多多少少改动HTML 代码.下面介绍几个导航栏.               ...

  3. 书TO BE READED

    Books Created Wednesday 10 August 2011 1.<你的降落伞是什么颜色> 在求职书里面,我觉得这本书是最接近于圣经的. 第一版出现大概还是上世纪70年代末 ...

  4. C# 装箱和拆箱的简单理解

    一.装箱拆箱的意义 主要用途是可以向ArrayList中添加值类型的元素 二.理解 装箱的含义:理解为可以将子类对象隐式的转化为父类对象(保留自己特有的成员,和子类重写的成员) 装箱:例子为典型的装箱 ...

  5. toolControls添加工具项

    最近参考Arcengine的Samples做的功能,虽然简单,但是示例代码的确体现出了很好的封装性,值得学习,效果图如下: 闲话休絮,直入正题: 一.首先建立工具类,实现IMenuDef接口 clas ...

  6. Java 对象内存占用

    java基本类型及对象占用的内存大小 请参考下面文章 原始类型及对象占用的内存大小 http://www.javamex.com/tutorials/memory/object_memory_usag ...

  7. 【Python】调用WPS V9 API,实现PPT转PDF

    WPS 的API,即COM,主要分为V8与V9两个版本,网上容易查到的例子,都是V8的. 现在官网上可以下载的,2013抢鲜版,就是V9的API. Python 调用COM 需要安装 Python f ...

  8. PostgreSQL基础整理(三)

    1.触发器 有更新操作时记录一条日志 DROP FUNCTION IF EXIST log_test(); CREATE OR REPLACE FUNCTION log_test() RETURNS ...

  9. Java IO1:IO和File

    IO 大多数的应用程序都要与外部设备进行数据交换,最常见的外部设备包含磁盘和网络.IO就是指应用程序对这些设备的数据输入与输出,Java语言定义了许多类专门负责各种方式的输入.输出,这些类都被放在ja ...

  10. java提高篇(十九)-----数组之二

    前面一节主要介绍了数组的基本概念,对什么是数组稍微深入了一点点,在这篇博文中主要介绍数组的其他方面. 三.性能?请优先考虑数组 在java中有很多方式来存储一系列数据,而且在操作上面比数组方便的多?但 ...