官方建议docker源码编译在docker容器内进行,因为官方提供的容器内已经继承了编译需要的环境,如果非要自己搭建编译环境也不是不可以,就是稍微有些繁琐。以下以1.8.2版本为例。

1.pull docker-dev:1.8.2的镜像

docker pull docker-dev:版本

具体版本可以查看官网。

ps:该镜像较大,可以考虑从国内镜像下载。

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源码编译的更多相关文章

  1. 最新版 源码编译 docker

    前言: 最近想研究 docker 源码,那么要研究源码第一步就是学会通过源码编译.然后在网上查找了很多,都是比较老的版本.目前官最新的版本是 18.09.经过一番探索之后,终于成功编译了 下面我把我的 ...

  2. 【运维技术】Nginx安装教程(yum安装,源码编译)

    安装方式 yum直接更新源安装 源码直接编译之后安装 使用yum进行直接安装 Installing a Prebuilt CentOS/RHEL Package from an OS Reposito ...

  3. 如何顺利完成Kubernetes源码编译?

    为什么要编译源码 ? Kubernetes是一个非常棒的容器集群管理平台.通常情况下,我们并不需要修改K8S代码即可直接使用.但如果,我们在环境中发现了某个问题/缺陷,或按照特定业务需求需要修改K8S ...

  4. 一文了解如何源码编译Rainbond基础组件

    Rainbond 主要由以下三个项目组成,参考官网详细 技术架构 业务端 Rainbond-UI 和 Rainbond-Console 合起来构成了业务层.业务层是前后端分离模式.UI是业务层的前端代 ...

  5. 在Linux下源码编译安装GreatSQL/MySQL

    欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 本 ...

  6. Android 5.0源码编译问题

    如果是自己通过repo和git直接从google官网上download的源码,请忽略这个问题,但是由于google在国内被限制登录,通过这一种方法不是每个人都能download下来源码,通常的做法就是 ...

  7. Android stdio Apktool源码编译

    Android Apktool源码编译 标签(空格分隔): Android Apktool 源码编译 需求 习惯NetBeans调试smali需要用Apktool反编译apk,需要用-d的参数才能生成 ...

  8. SSH/SSL 源码编译安装简易操作说明

    环境:CentOS 6.7 安全加固需求,由于某盟扫描系统主机有SSL系列漏洞,客户要求必须修复: 解决方案:将SSH/SSL升级到最新版本,删除SSL旧版本(实测不删除旧版本某盟扫描无法通过). 当 ...

  9. Hadoop源码编译过程

    一.           为什么要编译Hadoop源码 Hadoop是使用Java语言开发的,但是有一些需求和操作并不适合使用java,所以就引入了本地库(Native Libraries)的概念,通 ...

随机推荐

  1. Web服务器性能监控分析与优化

    Web服务器性能监控分析与优化 http://www.docin.com/p-759040698.html

  2. 图解 & 深入浅出 JavaWeb:Servlet 再说几句

    Writer      :BYSocket(泥沙砖瓦浆木匠) 微         博:BYSocket 豆         瓣:BYSocket FaceBook:BYSocket Twitter   ...

  3. windows 程序设计自学:添加图标资源

    #include <windows.h> #include "resource.h" LRESULT CALLBACK MyWndProc( HWND hwnd, // ...

  4. NPM 与 left-pad 事件:我们是不是早已忘记该如何好好地编程?

    转自:http://www.techug.com/npm-left-pad-have-we-forgotten-how-to-program 开发者朋友们,我们该谈一谈这个问题了.你们应该知道本周的  ...

  5. javascript 设计模式之观察者模式

    观察者模式又叫发布——订阅模式,顾名思义pub——sub就是被动触发的,:不要给我......,我会给你.......就是一个发布订阅的解释,实质就是对程序中的某个对象状态进行监听观察,并且在该对象发 ...

  6. LintCode-- Remove Linked List Elements

    Remove all elements from a linked list of integers that have valueval. 样例 Given 1->2->3->3- ...

  7. java基本加密算法

    简单的java加密算法有: BASE64 严格地说,属于编码格式,而非加密算法 MD5(Message Digest algorithm 5,信息摘要算法) SHA(Secure Hash Algor ...

  8. [CS231n-CNN] Training Neural Networks Part 1 : parameter updates, ensembles, dropout

    课程主页:http://cs231n.stanford.edu/ ___________________________________________________________________ ...

  9. HandlerMethodArgumentResolver数据绑定无效

    因项目中action参数过多,并且是一些通用的查询参数,所以准备进行对参数统一封装为Map对象,然后由action中传入service中进行处理,查询spring的资料发现可以通过实现HandlerM ...

  10. js数组冒泡排序,快速排序的原理以及实现

    冒泡排序: 随便从数组中拿一位数和后一位比较,如果是想从小到大排序,那么就把小的那一位放到前面,大的放在后面,简单来说就是交换它们的位置,如此反复的交换位置就可以得到排序的效果. var arr = ...