最新版 源码编译 docker
前言:
最近想研究 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的更多相关文章
- Nginx 最新版源码编译安装 包含常用模块作用及所需依赖
第一部分 Nginx最新版源码编译安装 1. 使用的模块 模块1:http_rewrite_module 基于正则匹配来实现重定向.依赖PCRE库,见依赖1 模块2:http_gzip_module ...
- Docker源码编译
官方建议docker源码编译在docker容器内进行,因为官方提供的容器内已经继承了编译需要的环境,如果非要自己搭建编译环境也不是不可以,就是稍微有些繁琐.以下以1.8.2版本为例. 1.pull d ...
- Ubuntu 环境 TensorFlow (最新版1.4) 源码编译、安装
Ubuntu 环境 TensorFlow 源码编译安装 基于(Ubuntu 14.04LTS/Ubuntu 16.04LTS/) 一.编译环境 1) 安装 pip sudo apt-get insta ...
- Hadoop,HBase,Zookeeper源码编译并导入eclipse
基本理念:尽可能的参考官方英文文档 Hadoop: http://wiki.apache.org/hadoop/FrontPage HBase: http://hbase.apache.org/b ...
- 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 ...
- Tomcat8源码编译及导入Eclipse中研究
最近因为需求需要修改Tomcat中的某些功能,无奈只能研究那部分源码然后稍作修改. 目前Tomcat最新版是8.0,下载了源码包,编译并导入Eclipse中研究比较方便. 1. Tomcat8源码编译 ...
- 【运维技术】Nginx安装教程(yum安装,源码编译)
安装方式 yum直接更新源安装 源码直接编译之后安装 使用yum进行直接安装 Installing a Prebuilt CentOS/RHEL Package from an OS Reposito ...
- 源码编译安装git
debian上的git版本才2.1有点低了,为了安装最新版的2.11,我决定从源码编译安装一下. 预备工作: 1.安装编译工具.apt install -y build-essential 2.安装 ...
- Ubuntu 16.04 源码编译安装PHP7+swoole
备注: Ubuntu 16.04 Server 版安装过程图文详解 Ubuntu16镜像地址: 链接:https://pan.baidu.com/s/1XTVS6BdwPPmSsF-cYF6B7Q 密 ...
随机推荐
- 技术干货丨通过wrap malloc定位C/C++的内存泄漏问题
摘要:用C/C++开发的程序执行效率很高,但却经常受到内存泄漏的困扰.本文提供一种通过wrap malloc查找memory leak的思路. 用C/C++开发的程序执行效率很高,但却经常受到内存泄漏 ...
- MySQL入门(alter语法 与 外键)
MySQL入门(三) 字段的修改.添加.与删除 修改表字段使用alter table语句,谨记! create table tf1( id int primary key auto_increment ...
- 批量删除当前文件夹下面的.svn文件夹
for /r . %%a in (.) do @if exist "%%a\.svn" rd /s /q "%%a\.svn 使用方法: 新建text文档,复制上面的文本 ...
- shell专题(九):函数
9.1 系统函数 1.basename基本语法 basename [string / pathname] [suffix] (功能描述:basename命令会删掉所有的前缀包括最后一个(‘/’)字 ...
- 数据可视化基础专题(二):Pandas基础(一) excel导入与导出
1.Excel 1.1 Excel导入 read_excel() pandas.read_excel(io, sheet_name=0, header=0, names=None, index_col ...
- 输入Javac提示不是内部或外部命令怎么办
首先,我们在电脑上面找到此电脑, 然后右键点击,选择属性. 在属性中,我们找到高级系统设置,点击打开,如图示. 然后在系统设置中,我们可以找到启动和鼓掌恢复,然后点击环境变量,点击打开. ...
- 数据可视化之分析篇(七)Power BI数据分析应用:水平分析法
https://zhuanlan.zhihu.com/p/103264851 首先,以财务报表分析为例,介绍通用的分析方法论,整体架构如下图所示: (点击查看大图) 接下来我会围绕这五种不同的方法论, ...
- linux专题(六):Vim编辑器
http://dwz.date/UDf 什么是Vim编辑器 Vim是从 vi 发展出来的一个文本编辑器.代码补完.编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用. 简单的来说, vi 是 ...
- python 面向对象专题(七):异常处理
目录 python面向对象07/异常处理 1. 异常错误分类 2. 什么是异常? 3. 异常处理 4. 为什么要有异常处理 5. 异常处理的两种方式 1.if判断 2.try 6. 常见异常种类 1. ...
- How to start MySQL on Linux
启动MySQL数据库 service mysql start 查看MySQL进程 ps -ef |grep mysql 查看MySQL端口号 cd /etc/init.d/ netstat -atnp ...