1. Visão Geral:
1.1 Meio Ambiente
As informações da versão são as seguintes:
a. Sistema operacional: centos 7.6, amd64
b, versão docker do servidor: v18.06.0
c, versão git do servidor: 1.8.3.1
d, versão docker compilada alvo: v18.09.2
2 Preparação
2.1 Instale o docker no host
O ambiente de compilação é um contêiner, portanto, você precisa instalar o mecanismo de contêiner no host e executar um contêiner nas etapas subsequentes para compilar o software de destino 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 Construir a imagem do ambiente de construção
Leve o Dockerfile no diretório docker-ce / components / engine para o Alibaba Cloud Mirror Service para construir, e a imagem resultante é:
registry.cn-shenzhen.aliyuncs.com/gzlj/docker-build:v18.09.2
3 Processo de compilação:
3.1 Baixe o código-fonte do 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
3.2 Inicie o contêiner do ambiente de compilação e execute o script de compilação
Atualmente localizado no diretório / opt / docker-ce / components / engine do host, inicie o contêiner do ambiente de compilação, monte o diretório de origem no contêiner, execute o script hack / make.sh no docker-ce e aguarde alguns minutos. A compilação é concluída e, finalmente, vários arquivos binários aparecem no diretório bundles / binary-daemon / no diretório do código-fonte.
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 Resumo:
O projeto docker-ce não usa módulos go para gerenciar dependências. Depois de entrar no ambiente de compilação, não há necessidade de executar nenhuma instrução relacionada a dependências (como go get, etc.). Se o projeto docker-ce for forçado a se tornar um projeto de módulo go, a execução do script de compilação causará erros relacionados à dependência e erros de campo indefinido no código.