• docker源码编译


    源码下载

    自从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
    
    • 1
    • 2
    • 3
    • 4

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

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

    docker engine

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

    cd moby
    git chekout 20.10
    sudo su
    make binary
    
    • 1
    • 2
    • 3
    • 4

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

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

    Dockfile文件中:

    #国内debian源

    ADD sources.list /etc/apt/
    
    • 1

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    这样就可以解决了。

    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
    
    • 1
    • 2

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

    然后就成功了!!!!

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

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

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

  • 相关阅读:
    Java程序处理不同数据库时间类型
    java参数传值
    Mybatis之SqlSessionFactoryBuilder
    SpringMVC 数据映射VC
    MySQL锁机制详解-表锁与行锁
    【不三不四的脑洞】“被相亲对象拉黑“所引发的关于链表合并算法的思考
    一文玩转RabbitMQ
    Mac 上可以使用 ping 端口
    C语言基础篇 —— 4.3 共用体union详解
    嵌入式面经-数据结构-十大排序
  • 原文地址:https://blog.csdn.net/ugnbucbjj/article/details/126124201