编译环境
- go 1.8.3
- make
- gcc
- Protoc 3.x
1 | wget -c https://github.com/google/protobuf/releases/download/v3.1.0/protoc-3.1.0-linux-x86_64.zip |
版本
COMPONENT | COMMIT ID | VERSION |
---|---|---|
dockerd | 89658bed64c2a8fe05a978e5b87dbec409d57a0f | v17.05.0-ce |
containerd | 9048e5e50717ea4497b757314bad98ea3763c145 | v0.2.8 |
runc | 9c2d8d184e5da67c95d601382adf14862e4f2228 | |
libnetwork | 7b2b1feb1de4817d522cc372af149ff48d25028e |
编译全家桶
1 | git clone https://github.com/moby/moby.git $GOPATH/src/github.com/docker/docker |
moby项目提供了全家桶编译,需要在docker环境下以容器方式编译。这里需要注意两点:
代理。需要连到外网。如有需要请设置代理。
docker代理
Dockerfile中代理。修改项目中根目录下的Dockerfile文件,添加代理的环境变量。
1
ENV http_proxy="http://yourproxy" https_proxy="http://yourproxy"
golang下载地址。Dockerfile中使用的是
https://golang.org/dl/go${GO_VERSION}.linux-amd64.tar.gz
,属于墙外地址,如不能翻墙,可以替换为golangtc的地址1
RUN curl -fsSL "https://www.golangtc.com/static/go/${GO_VERSION}/go${GO_VERSION}.linux-amd64.tar.gz"
编译全家桶:
1 | make binary DOCKER_BUILD_APT_MIRROR=mirrors.aliyun.com |
这里使用了aliyun镜像来加速编译。
生成在bundles/binary-daemon/
1 | docker-containerd |
RPM
同样需要在以下文件中设置代理
1 | Dockerfile |
以及在hack/make/build-rpm
中的cat > "$DEST/$version/Dockerfile.build" <<-EOF
位置上添加代理设置。
然后执行:
1 | make rpm DOCKER_BUILD_PKGS=centos-7 |
编译结果在:
1 | bundles/17.05.0-ce/build-rpm/centos-7/RPMS/x86_64/ |
安装
cp $GOPATH/src/github.com/docker/docker/contrib/udev/80-docker.rules /etc/udev/rules.d/80-docker.rules
- 复制二进制到
/usr/local/bin
下 groupadd docker
- 运行
dockerd
启动。
分组件编译
下面介绍各个组件的分别构建方式。
docker组件间的版本要求很苛刻。在项目中一般都有写明需要其他组件的commit id。
比如,在moby中的
hack/dockerfile/binaries-commits
和containerd中的RUNC.md
。
cli
1 | git clone https://github.com/docker/cli.git $GOPATH/src/github.com/docker/cli |
containerd
1 | git clone https://github.com/containerd/containerd.git $GOPATH/src/github.com/containerd/containerd |
dockerd编译需要btrfs头文件和库。这里禁用了btr。
生成二进制:
- containerd
- containerd-shim
- containerd-stress
- ctr
runc
runc的版本必须跟containerd中要求的一致。见https://github.com/containerd/containerd/blob/master/RUNC.md,其中要求:
RUNC_COMMIT = 9c2d8d184e5da67c95d601382adf14862e4f2228
1 | 安装libseccomp |
如果不希望启动
seccomp
,则
1
2 make BUILDTAGS=''