moby源码修改和编译步骤

官方说明:官方教程

一、源码编译

首先最好保证主机上docker环境是干净的,即没有镜像、容器。

然后,去moby项目页上clone项目,在项目目录下进行Dockerfile 构建

make BIND_DIR=. shell

这一步过程时间比较长,而且会出现错误,错误一般是网络问题,比如 github 克隆不了等。

编译成功之后,主机会多出一个镜像,并且会进入一个带有开发环境的容器,命令提示如下:

Successfully built 3d872560918e
Successfully tagged docker-dev:dry-run-test
docker run --rm -i --privileged -e BUILDFLAGS -e KEEPBUNDLE -e DOCKER_BUILD_GOGC -e DOCKER_BUILD_PKGS -e DOCKER_CLIENTONLY -e DOCKER_DEBUG -e DOCKER_EXPERIMENTAL -e DOCKER_GITCOMMIT -e DOCKER_GRAPHDRIVER=devicemapper -e DOCKER_REMAP_ROOT -e DOCKER_STORAGE_OPTS -e DOCKER_USERLANDPROXY -e TESTDIRS -e TESTFLAGS -e TIMEOUT -v "home/ubuntu/repos/docker/bundles:/go/src/github.com/docker/docker/bundles" -t "docker-dev:dry-run-test" bash
#

进入容器之后,可以开始进行编译:

/go/src/github.com/docker/docker# hack/make.sh binary

Removing bundles/

---> Making bundle: binary (in bundles/binary)
Building: bundles/binary-daemon/dockerd-17.06.0-dev
Created binary: bundles/binary-daemon/dockerd-17.06.0-dev
Copying nested executables into bundles/binary-daemon

之后执行 make install ,然后所有关于容器的二进制可运行文件就会被复制到 /usr/local/bin目录下。然后执行 dockerd -D,即可以在docker开发容器里运行和使用docker。

 执行docker -D之后,我们可以按 ctrl+z放到后台并且暂停,随后使用bg 1使之在后台执行

二、源码修改之后如何编译

 一个简单例子:

1、修改 cmd/dockerd/docker.go文件

# 修改前
Short:         "A self-sufficient runtime for containers.",


# 修改后
Short:         "A self-sufficient and really fun runtime for containers.",

2、进入正在运行的docker开发环境的容器里面

3、重新编译代码:hack/make.sh binary

4、停止容器里正在运行的docker

由于之前是后台进行的,所以我们需要把它先放到前台里。使用 jobs 查看正在后台运行的命令,然后使用 fg [id] 将其调至前台继续运行,最后 ctrl+c 结束。

 5、在docker开发环境的容器里,将二进制运行文件拷贝至 /usr/bin

# hack/make.sh binary install-binary

6、使用 dockerd --help 查看发现已修改成功。

三、源码重新编译之后的问题

在将重新编译的docker二进制文件放到本机的/usr/bin/位置后,再进行 make BIND_DIR=. shell会报错

Error response from daemon: Error processing tar file(exit status 1): unexped EOF 

 然后进行docker build也会报错。

只能将原来的二进制文件重新放回 /usr/bin/里

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值