docker源码编译(containerd+runc源码编译)

源码下载

自从docker-ce 20.10开始,docker官方公司维护的docker-ce的仓库就已经弃用了。

原本docker-ce的仓库地址为:https://github.com/docker/docker-ce

随机docker被拆分为两部分,一部分是cli,用来处理client的部分,也就是解析命令,另一部分是docker engine部分,也就是daemon部分。这两部分对应的仓库分别位于docker clidocker engine

下载后分别处理docker cli和docker engine。

docker cli

首先一定要切换分支,否则旧的版本会无法识别新的指令。

cd cli
git chekout 20.10
sudo su
make -f docker.Makefile binary

这一部分的输出如图所示:
在这里插入图片描述
切换分支后整个过程不会碰到任何bug。

命令执行完成,就能在 ./build/ 目录下找到 docker 二进制文件,然后执行使用该文件执行 ./docker version 就可以看到正常情况下docker的输出。

docker engine

首先同样要注意切换分支!!!

cd moby
git chekout 20.10
sudo su
make binary

这部分会因为服务器不在中国的原因出现一系列的问题

bugs

go get timeout

首先会出现go get timeout的问题,这部分在网络上能搜索到很多相同的解决方案,需要注意的是添加的命令不能直接在自己的终端中加入,需要在shell本身的文件中加入,

比如我这里显示go get github上面的一个网站出问题,用grep -r -i查到了这个网站所在的shell文件,在这里插入图片描述
然后将网络上搜到的命令放到这个shell文件中,在这里插入图片描述

然后这个问题就解决了,就到了下一个问题。

debian超时

因为需要安装debian系统,所以首先需要换源,在Dockerfile.simple这个文件中,修改如下

# 修改前
ARG APT_MIRROR=deb.debian.org

# 修改后
ARG APT_MIRROR=ftp.cn.debian.org

然后debian系统安装完成,会通过apt下载很多包,需要更改apt包的源。

Dockfile文件中:

#国内debian源

ADD sources.list /etc/apt/

sources.list在dockerfile同目录下:

deb http://mirrors.ustc.edu.cn/debian/ stretch main non-free contrib
deb http://mirrors.ustc.edu.cn/debian/ stretch-updates main non-free contrib
deb http://mirrors.ustc.edu.cn/debian/ stretch-backports main non-free contrib
deb-src http://mirrors.ustc.edu.cn/debian/ stretch main non-free contrib
deb-src http://mirrors.ustc.edu.cn/debian/ stretch-updates main non-free contrib
deb-src http://mirrors.ustc.edu.cn/debian/ stretch-backports main non-free contrib
deb http://mirrors.ustc.edu.cn/debian-security/ stretch/updates main non-free contrib
deb-src http://mirrors.ustc.edu.cn/debian-security/ stretch/updates main non-free contrib

这样就可以解决了。

git clone TLS

这里需要多次尝试,即使使用了命令也需要多次执行,多试几次就成功了。

终端,这里不再是shell文件中,执行命令

git config --global http.https://github.com.proxy http://127.0.0.1:2340
git config --global https.https://github.com.proxy https://127.0.0.1:2340

我这里是用了代理,对应的端口是2340。

然后就成功了!!!!

就可以在 bundles/binary-daemon 目录下就能找到 dockerd这个可执行文件

接着我们需要执行 systemctl stop docker 和 systemctl stop docker.socket 停止原来的 docker 服务。

然后运行./dockerd就可以执行了!!!在这里插入图片描述

containerd源码编译

源码网站:https://github.com/containerd/containerd
下载源码后,进入containerd,直接执行下面的命令即可:

make(这里无需使用sudo权限)
sudo make install

编译过程中不会遇到什么错误,可能会遇到go版本的问题,升级一下即可。
想要使用自己编译后的contaienrd,需要关闭系统自带的containerd服务

sudo systemctl stop containerd
sudo containerd(这里就是使用自己编译出来的二进制文件)

runc源码编译

和containerd编译过程差不多,也是下载源码后make + sudo make install命令,同样不会遇到什么错误。请添加图片描述
可以看到生成的runc位于 /usr/local/sbin/runc文件夹处,然后默认就用自己编译后runc了。如果想要使用系统自带的runc,直接删除该文件夹然后重启docker即可。

docker+containerd+runc

想要整个过程都使用自己编译的,首先需要编译runc,然后在containerd文件夹下面打开sudo containerd,观看输出变成如下,然后进入docker,打开dockerd可执行程序即可。然后sudo docker即采用的是自己编译的。请添加图片描述

后期bug

frontend grpc server closed unexpectedly

这个问题是因为runc变成了自己由源码编译的runc程序,这个时候直接删除上面的文件夹即可

Dependency failed for docker application container engine

这个是因为containerd没有打开,所有docker服务无法成功start

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LYSnowy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值