目录
- 源码下载
- docker cli
- docker engine
- bugs
- go get timeout
- debian超时
- git clone TLS
- containerd源码编译
- runc源码编译
- docker+containerd+runc
- 后期bug
- frontend grpc server closed unexpectedly
- Dependency failed for docker application container engine
源码下载
自从docker-ce 20.10开始,docker官方公司维护的docker-ce的仓库就已经弃用了。
原本docker-ce的仓库地址为:https://github.com/docker/docker-ce
随机docker被拆分为两部分,一部分是cli,用来处理client的部分,也就是解析命令,另一部分是docker engine部分,也就是daemon部分。这两部分对应的仓库分别位于docker cli和docker 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