前言:

最近想研究 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. day14 参数

    目录 一.参数介绍 二.形参与实参的具体使用 2.1位置参数 2.2关键字参数 2.3关键字实参和位置实参混合使用时 2.4默认参数 2.5位置形参和默认形参混用 2.6 可变长度的参数(*与**用法 ...

  2. Python之爬虫(二十) Scrapy爬取所有知乎用户信息(上)

    爬取的思路 首先我们应该找到一个账号,这个账号被关注的人和关注的人都相对比较多的,就是下图中金字塔顶端的人,然后通过爬取这个账号的信息后,再爬取他关注的人和被关注的人的账号信息,然后爬取被关注人的账号 ...

  3. bzoj1787[Ahoi2008]Meet 紧急集合&bzoj1832[AHOI2008]聚会

    bzoj1787[Ahoi2008]Meet 紧急集合 bzoj1832[AHOI2008]聚会 题意: 给个树,每次给三个点,求与这三个点距离最小的点. 题解: 倍增求出两两之间的LCA后,比较容易 ...

  4. 详解UDP协议

    运输层位于网络层之上,网络层提供了主机之间的逻辑通信:而运输层为运行在不同主机上的应用进程之间提供了逻辑通信.从应用程序角度看,通过逻辑通信,运行不同进程的主机好像直接相连一样.应用进程使用运输层提供 ...

  5. 2020年20个Flutter最漂亮的UI库和项目

    Best-Flutter-UI-Templates 地址:https://github.com/mitesh77/Best-Flutter-UI-Templates The History of Ev ...

  6. Python 3.x 安装PyQt5

    一. 安装PyQt5 官方要求Python版本:Python >=3.5 打开命令行 输入 pip install PyQt5 PyQt5安装成功 ​ 安装完成功PyQt5后发现没有design ...

  7. java HashMap、HashTable、ConcurrentHashMap区别

    HashTable 底层数组+链表实现,无论key还是value都不能为null,线程安全,实现线程安全的方式是在修改数据时锁住整个HashTable,效率低,ConcurrentHashMap做了相 ...

  8. SPRING 阅读--JdkDynamicAopProxy

    一.简介 JdkDynamicAopProxy 代理类是spring 默认的JDK动态的代理类实现.它实现了Java 动态代理接口InvocationHandler接口和Spring定义的AopPro ...

  9. 判断js中数组是否包含某值

    可以用数组的includes函数判断数组中是否存在某个值.

  10. Django学习路16_获取学生所在的班级名

    在 urls.py 中先导入getgrades from django.conf.urls import url from app5 import views urlpatterns = [ url( ...