源码编译docker-ce v18.09.2(简单易懂100%成功)

1 概述:

1.1 环境

版本信息如下:
a、操作系统: centos 7.6,amd64
b、服务器docker版本: v18.06.0
c、服务器git版本: 1.8.3.1
d、目标编译的docker版本: v18.09.2


2 前置准备

2.1 宿主机安装docker

编译环境是一个容器,因此需要在宿主机安装容器引擎,在后续的步骤中运行出一个容器来编译目标软件docker-ce v18.09.2。

yum install yum-utils -y
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum list docker-ce --showduplicates
yum install -y docker-ce-18.06.0.ce-3.el7 

mkdir -p /etc/docker
cat > /etc/docker/daemon.json << EOF
{
      "registry-mirrors": ["https://bxsfpjcb.mirror.aliyuncs.com", "https://registry.docker-cn.com"],
      "max-concurrent-downloads": 10,
      "log-driver": "json-file",
      "log-level": "warn",
      "log-opts": {
          "max-size": "100m",
          "max-file": "3"
      },
       "live-restore": true,
      "exec-opts": ["native.cgroupdriver=systemd"],
      "graph": "/var/lib/docker"
}

EOF
systemctl daemon-reload
systemctl enable docker
systemctl restart docker

2.2 构建编译环境镜像

将docker-ce/components/engine目录下的Dockerfile拿到阿里云镜像服务进行构建,得出的镜像为:

registry.cn-shenzhen.aliyuncs.com/gzlj/docker-build:v18.09.2

3 编译过程:

3.1 下载docker-ce源码

mkdir -p /opt
cd /opt
git clone -b v18.09.2 https://gitee.com/zjuhunter/docker-ce.git
cd docker-ce/components/engine

源码编译docker-ce v18.09.2(简单易懂100%成功)_第1张图片

3.2 启动编译环境容器并执行编译脚本

当前位于宿主机的/opt/docker-ce/components/engine目录中,启动编译环境的容器,挂载源码目录进容器,执行docker-ce中的hack/make.sh脚本,稍等数分钟即可完成编译,最终在源码目录下的bundles/binary-daemon/目录中出现一堆二进制文件。

docker run \
--rm \
-it \
--privileged \
-v $PWD:/go/src/github.com/docker/docker \
registry.cn-shenzhen.aliyuncs.com/gzlj/docker-build:v18.09.2 \
bash

# 现在已进入容器内部,执行编译脚本
export DOCKER_GITCOMMIT=v18.09.2
hack/make.sh binary

源码编译docker-ce v18.09.2(简单易懂100%成功)_第2张图片
源码编译docker-ce v18.09.2(简单易懂100%成功)_第3张图片

4 总结:

docker-ce项目并不是使用go module的方式进行管理依赖,进入编译环境后,不需要执行任何与依赖相关的指令(例如go get等)。如果强制将docker-ce项目变成go module项目,执行编译脚本会出现依赖相关的错误和代码中出现未定义字段错误。

你可能感兴趣的:(golang,docker,docker,linux,go)