1。概要:
1.1環境
バージョン情報は次のとおりです。a
。オペレーティングシステム:centos 7.6、amd64
b、サーバードッカーバージョン:v18.06.0
c、サーバーgitバージョン:1.8.3.1
d、ターゲットコンパイル済みドッカーバージョン:v18.09.2
2準備
2.1ホストにdockerをインストールします
コンパイル環境はコンテナーであるため、コンテナーエンジンをホストにインストールし、後続の手順でコンテナーを実行して、ターゲットソフトウェアdocker-cev18.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をAlibabaCloud Mirror Serviceに移動してビルドすると、結果のイメージは次のようになります。
registry.cn-shenzhen.aliyuncs.com/gzlj/docker-build:v18.09.2
3コンパイルプロセス:
3.1docker-ceソースコードをダウンロードする
mkdir -p /opt
cd /opt
git clone -b v18.09.2 https://gitee.com/zjuhunter/docker-ce.git
cd docker-ce/components/engine
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
4要約:
docker-ceプロジェクトは、依存関係を管理するためにgoモジュールを使用しません。コンパイル環境に入った後は、依存関係に関連する命令(go getなど)を実行する必要はありません。docker-ceプロジェクトが強制的にgoモジュールプロジェクトになると、コンパイルスクリプトを実行すると、依存関係関連のエラーと未定義のフィールドエラーがコードに発生します。