centos 7静态编译docker-ce

  

目的

  

1)去dockerfile,处理网络请求问题,缩短编译耗时
2)方便内部统一版本维护
3)方便接入内部流水线作业
4)编译静态版本,避免系统库动态依赖问题

  

一、准备工作编译环境

  

1)系统环境

  
 <代码> root@localhost ~ #猫/etc/redhat-release
  Linux CentOS释放7.6.1810(核心)
  root@localhost ~ # uname -
  Linux主机。localdomain 3.10.0-957.el7。x86_64 # 1 SMP清华2018年11月8日23:39:32 UTC x86_64 x86_64 x86_64 GNU/Linux
  码头工人版本:码头工人- ce - 18.09  
  

2)码头工人相关

  
  

docker-ce变化
dokcer从17.06项目由莫比变更为docker-ce,码头工人客户端与服务端项目分离开
码头工人客户端代码块在cli目录
码头工人服务端代码块在引擎中

  

containerd runc代理初始化未变化
相关项目文件见:
版本不同略有变化,最新版本(18.09),相关关联的提交身份证也在安装程序文件中
docker-ce/组件/发动机/攻击/dockerfile/安装/
containerd。安装程序gometalinter。安装代理。安装程序tini。安装程序vndr.installer
dockercli。安装程序安装。sh runc。安装程序tomlv。安装
golang版本见:docker-ce/组件/发动机/Dockerfile。e2e

     

相关项目代码库:

  
  

https://github.com/opencontainers/runc.git docker-runc
https://github.com/krallin/tini.git docker-init
https://github.com/containerd/containerd.git docker-containerd | | docker-containerd-shim | | docker-containerd-ctr
https://github.com/docker/docker-ce.git码头工人| | dockerd https://github.com/docker/libnetwork.git docker-proxy

     

3)找到对应golang版本

  
 <代码>猫docker-ce/组件/发动机/Dockerfile.e2e
  docker-ce/组件/发动机/Dockerfile。e2e:从golang: 1.10.6-alpine3.7建设者
  从码头工人与golang对应dockerfile找到原始对应关系
  https://github.com/docker-library/golang/tree/366fe83ed839938cd04b2d546a06e2aee25a39a2
  
  这边选择直接下载不用编译的版去本
  https://dl.google.com/go/go1.10.6.linux-amd64.tar.gz  
  

4)配置基础编译环境

  
  

根据containerd的码头工人镜像编译方式可知红帽系列的gcc版本过低且不支持enable-default-pie选项,需要安装编译gcc 6.3.x版本;
编译runc时报/usr/bin/ld:找不到-lseccomp,默认的红帽系列无libseccomp-static支持

     

)将原来的libseccomp软件包删掉

  
  2.3.2

rpm -ivh https://cbs.centos.org/kojifiles/packages/libseccomp/2.3.2/3.el7/x86_64/libseccomp 2.3.2 - 3. - el7.x86_64.rpm https://cbs.centos.org/kojifiles/packages/libseccomp/2.3.2/3.el7/x86_64/libseccomp猛击- - 3. - el7.x86_64.rpm https://cbs.centos.org/kojifiles/packages/libseccomp/2.3.2/3.el7/x86_64/libseccomp 2.3.2 -静态- 3. - el7.x86_64.rpm
(root@localhost src) # rpm qa | grep libseccomp
libseccomp 2.3.2 - - 3. - el7.x86_64
libseccomp 2.3.2 -静态- 3. - el7.x86_64
libseccomp 2.3.2 - 3. el7——重击。x86_64

  

b)编译使用gcc 6.3.0环境

  

百胜集团安装“发展Tools"
yum安装redhat-lsb rpm-build rpm-sign检查dejagnu期望zlib-devel
[root@localhost github.com] # git克隆克隆到https://github.com/BobSteagall/gcc-builder.git
“gcc-builder”……
远程:列举对象:215年完成。
远程:215(δ0),再利用0(δ0),pack-reused 215
接收对象:100%(215/215),简约| 0字节/秒,35.75完成。
解决增量:100%(149/149),做。

  

[root@localhost github.com] # cd gcc-builder/

  

[root@localhost gcc-builder] # git checkout gcc6
分支gcc6设置跟踪远程分支gcc6起源。
转向了一种新分支“gcc6”

  

[root@localhost gcc-builder] # vi gcc-build-vars。出口GCC_VERSION=6.3.0 sh

  

root@localhost gcc-builder] # vi configure-gcc。sh
elif [“GCC_PLATFORM"美元;==癓inux"然后]

GCC_SRC_DIR美元/configure - v \
——with-pkgversion=癎CC_PKG_NAME"美元;\
——enable-default-pie \——增加enable-default-pie
——enable-languages=c, c++ \

  

[root@localhost gcc-builder) #。/build-gcc。上海|三通build.log

  

[root@localhost gcc-builder) #。/stage-gcc.sh

  

[root@localhost gcc-builder) #。/pack-gcc.sh

  

[root@localhost gcc-builder] # cd dist/usr/当地
[root@localhost当地]# cp - r/bin/gcc/usr/local/
[root@localhost当地]#乔恩- r根:根/usr/local/gcc/6.3.0/
[root@localhost当地]#乔恩根:根/usr/local/bin/ gcc630

centos 7静态编译docker-ce