docker源码编译安装步骤解析

来源:互联网 发布:慧莫森软件科技 编辑:程序博客网 时间:2024/06/13 22:36

原料:linux 系统,本人在Ubuntu16.04上运行,网上有一些关于docker编译流程的文章但是由于docker发展太快,网上的信息很快就过时了,本人参考以往的一些文章,加上亲自查看相关的源码基本了解了docker17.06源码的编译流程,供大家参考。

step 0:

安装docker,终端执行

sudo apt—get install docker.io

因为docker的源码需要在容器中进行编译,因此必须要有docker安装在host上。


step 1:

git clone https://github.com/docker/docker.git


下载最新的源码,本人下载的源码是17.06


step 2:

在源码的根目录执行make build,这一步会调用Makefile中的build分支代码:

build: bundles init-go-pkg-cache        docker build ${BUILD_APT_MIRROR} ${DOCKER_BUILD_ARGS} -t "$(DOCKER_IMAGE)" -f "$(DOCKERFILE)" 

这一步会使用docker创建一个临时的容器,并在容器中基于DOCKERFILE创建image,这个image包含了docker源码编译所需的依赖文件。这一步会下载很多依赖的文件需要访问很多国外的网站,由于国内的网络问题经常会因访问不到而失败。本人所在的公司可以访问国外的大部分网站,在两次编译源码时第一次一次成功,第二次经过不同时间的多次尝试才成功,不知道国内的网站是否能够靠多次尝试成功。

step 3:

执行make binary,这会调用Makefile中的binary分支代码:

binary: build ## build the linux binaries        $(DOCKER_RUN_DOCKER) hack/make.sh binary

这一步是在上一步创建的image中创建容器并在容器中运行hack/make.sh

在hack/make.sh 中会调用/hack/make/binary,

在hack/make/binary中会调用/hack/make/binary-client 和binary-daemon,这两个脚本会分别调用同目录下的.binary文件,这个.binary是一个隐藏文件。在.binary文件中会执行go build 语句实现源码的最终的编译:

go build \        -o "$DEST/$BINARY_FULLNAME" \        "${BUILDFLAGS[@]}" \        -ldflags "                $LDFLAGS                $LDFLAGS_STATIC_DOCKER        " \        $GO_PACKAGE

我们可以追踪GO_PACKAGE,发现它就是/docker/cmd/docker/docker.go和/docker/cmd/dockerd/docker.go两个文件,也就是docker源码的两个入口文件。要继续搞清楚源码都做了些什么就要从这两个文件入手一步步查看。

这里推荐一下较早的孙宏亮的docker源码解析,这本书是基于docker1.2.0来写的,跟17.06源码有较大的差异,但是还是有一定的参考价值,可以大概了解docker的基本框架。

0 0