ソースコードコンパイルdocker-cev18.09.2(シンプルで理解しやすい100%の成功)

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モジュールプロジェクトになると、コンパイルスクリプトを実行すると、依存関係関連のエラーと未定義のフィールドエラーがコードに発生します。

おすすめ

転載: blog.csdn.net/nangonghen/article/details/114602755