前言:

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

下面我把我的探索过程记录下来

第一步:

已知docker是go语言开发的, 所以在最新版的 docker 查看对应的版本

如果没有安装 docker 的话,先按照文中的版本操作吧。我是根据 apt-get 安装的 docker 来探索编译 docker 的方法的

root@n3:~# docker version
Client:
Version: 18.09.3
API version: 1.39
Go version: go1.10.8
Git commit: 774a1f4
Built: Thu Feb 28 06:53:11 2019
OS/Arch: linux/amd64
Experimental: false Server:
Engine:
Version: 18.09.3
API version: 1.39 (minimum version 1.12)
Go version: go1.10.8
Git commit: 774a1f4
Built: Wed Mar 27 09:56:24 2019
OS/Arch: linux/amd64
Experimental: false 

第二步:

安装 go 1.10.8 版本

配置 GOROOT 和 GOPATH (过程自行解决)

第三步:

从github上下载源码 https://github.com/docker/engine/releases,找到任意版本下载到本地

解压后重命名为 docker

将 docker 目录移动到 $GOPATH/src/github.com/docker/ 目录下

构建前要确认已经安装了编译库:apt-get install gcc pkg-config btrfs-tools

开始构建:

进入到 $GOPATH/src/github.com/docker/docker 目录下

执行命令 VERSION=testbuild DOCKER_GITCOMMIT=1 ./hack/make.sh binary 完成

ps: 可以选择指定存储引擎。只需要在命令前面加上这句,DOCKER_GRAPHDRIVER=overlay2

其中 VERSION 是构建后的 docker版本,比如上面的 18.09.3

构建完成后进入目录:$GOPATH/src/github.com/docker/docker/bundles/binary-daemon

目录下的 dcoker-dev 就是 docker-daemon,使用 ls -l 命令看到这里已经创建了软连接 docker-dev -> dockerd

---

安装 containerd

---

到这里就是启动的问题:

为了了使用方便,我直接替换当前系统的docker启动文件,替换前,先使用 systemctl stop docker 停止docker引擎。然后替换方式如下

step1:

查看 docker 服务文件位置, systemctl cat docker.service (前提是已经通过 apt-get install 安装过了 docker)

在输出的第一行中,提示有服务文件位置,我的是 /lib/systemd/system/docker.service

step2:

打开文件,找到行 ExecStart= /usr/bin/dockerd xxxx....

替换命令行中的 /usr/bin/dockerd 服务文件,这个文件是通过 apt-get install 安装的 docker engine

替换成 $GOPATH/src/github.com/docker/docker/bundles/binary-daemon/dockerd

注意:$GOPATH替换成绝对路径。如果不知道,使用 echo $GOPATH 就能看到了

step3:

替换后使用 systemctl daemon-reload  命令重载

step4:

执行命令, systemctl start docker 启动引擎

验证:

执行 docker version

root@n3:~# docker version
Client:
Version: 18.09.3
API version: 1.39
Go version: go1.10.8
Git commit: 774a1f4
Built: Thu Feb 28 06:53:11 2019
OS/Arch: linux/amd64
Experimental: false Server:
Engine:
Version: testbuild
API version: 1.39 (minimum version 1.12)
Go version: go1.10.8
Git commit: 1
Built: Wed Mar 27 10:52:22 2019
OS/Arch: linux/amd64
Experimental: false

 可以看到引擎版本已经是 testbuild了

这里还要说明一下的,这个只是构建了 docker 引擎,docker client 的话需要另外构建。client 也就是我们通常使用的 docker 命令工具,比如 docker pull xxx , docker images xxx 等等

遇到问题:

1.  ln -sf . ...错误

由于我的目录是从 windows 挂载到 ubuntu上的。不能执行软连接,所以将文件拷贝到 ubuntu 主机上再进行构建

如果还有不清楚的。欢迎留言:

最新版 源码编译 docker的更多相关文章

  1. Nginx 最新版源码编译安装 包含常用模块作用及所需依赖

    第一部分 Nginx最新版源码编译安装 1. 使用的模块 模块1:http_rewrite_module 基于正则匹配来实现重定向.依赖PCRE库,见依赖1 模块2:http_gzip_module ...

  2. Docker源码编译

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

  3. Ubuntu 环境 TensorFlow (最新版1.4) 源码编译、安装

    Ubuntu 环境 TensorFlow 源码编译安装 基于(Ubuntu 14.04LTS/Ubuntu 16.04LTS/) 一.编译环境 1) 安装 pip sudo apt-get insta ...

  4. Hadoop,HBase,Zookeeper源码编译并导入eclipse

    基本理念:尽可能的参考官方英文文档 Hadoop:  http://wiki.apache.org/hadoop/FrontPage HBase:  http://hbase.apache.org/b ...

  5. Ubuntu 16.04 源码编译安装PHP7

    一.下载PHP7的最新版源码 php7.0.9  下载地址 http://php.net/get/php-7.0.9.tar.gz/from/a/mirror 二.解压 tar -zxf /tmp/p ...

  6. Tomcat8源码编译及导入Eclipse中研究

    最近因为需求需要修改Tomcat中的某些功能,无奈只能研究那部分源码然后稍作修改. 目前Tomcat最新版是8.0,下载了源码包,编译并导入Eclipse中研究比较方便. 1. Tomcat8源码编译 ...

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

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

  8. 源码编译安装git

    debian上的git版本才2.1有点低了,为了安装最新版的2.11,我决定从源码编译安装一下. 预备工作: 1.安装编译工具.apt install -y  build-essential 2.安装 ...

  9. Ubuntu 16.04 源码编译安装PHP7+swoole

    备注: Ubuntu 16.04 Server 版安装过程图文详解 Ubuntu16镜像地址: 链接:https://pan.baidu.com/s/1XTVS6BdwPPmSsF-cYF6B7Q 密 ...

随机推荐

  1. jsp页面中同时遍历多个list集合

    在Jsp页面中,我们也许有这样的需求:从后端获取到多个List,但又想将这些List的值同时打印出来 比如, 有用户列表userList,user类有用户ID.用户名.用户性别等基本信息 有用户关系列 ...

  2. matlab 打包exe

    mcc -m gui_abc.m https://blog.csdn.net/hujiameihuxu/article/details/53525373 deploytool app compiler

  3. JS中this指向的更改

    JS中this指向的更改 JavaScript 中 this 的指向问题 前面已经总结过,但在实际开中, 很多场景都需要改变 this 的指向. 现在我们讨论更改 this 指向的问题. call更改 ...

  4. golang | Go语言入门教程——结构体初始化与继承

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是golang专题第10篇文章,我们继续来看golang当中的面向对象部分. 在上一篇文章当中我们一起学习了怎么创建一个结构体,以及怎么 ...

  5. Dubbo测试环境服务调用隔离这么玩对么

    背景阐述 前几天,有位同学问我一个关于 Dubbo 的问题.他的诉求是这样子的: 诉求一 第一个诉求是本地开发的时候想自己调用自己的服务,比如自己在改 A 服务,然后出问题了,本地再启动一个 B 服务 ...

  6. P3406 海底高铁 (洛谷)

    题目背景 大东亚海底隧道连接着厦门.新北.博艾.那霸.鹿儿岛等城市,横穿东海,耗资1000亿博艾元,历时15年,于公元2058年建成.凭借该隧道,从厦门可以乘坐火车直达台湾.博艾和日本,全程只需要4个 ...

  7. three.js 制作属于自己的动态二维码

    今天郭先生说一下用canvas解析图片流,然后制作一个动态二维码的小案例,话不多说先上图,在线案例点击博客原文.这是郭先生的微信二维码哦! 1. 解析图片流 canvas = document.cre ...

  8. DEBUG ArrayList

    1,ArrayList面试必问 说说ArrayList和LinkedList的区别? ArrayList基于数组实现,LinkedList基于链表实现,不同的数据结构决定了ArrayList查询效率比 ...

  9. [jvm] -- 类文件结构篇

    类文件结构 结构图  魔数 头四个字节,作用是确定这个文件是否为一个能被虚拟机接收的 Class 文件. Class 文件版本 第五和第六是次版本号,第七和第八是主版本号. 高版本的 Java 虚拟机 ...

  10. LeetCode 86 | 链表基础,一次遍历处理链表中所有符合条件的元素

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode专题第53篇文章,我们一起来看LeetCode第86题,Partition List(链表归并). 本题的官方难度是M ...