• 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就可以执行了!!!在这里插入图片描述

  • 相关阅读:
    day24每日一考
    Redis中间件21,神仙打架,事务 vs 管道,何时使用何种?
    C++继承出现class不明确的解决办法
    大数据培训技术logstsh架构介绍
    【微信小程序】input输入框(87/100)
    计算机组成原理4小时速成:存储器,内存ROM,RAM,Cache,高速缓存cache,外存,缓存命中率,效率
    Spring - IoC 容器之 Bean 的生命周期
    一、认识OSS
    【GMP】当我写下go func的时候,到底发生了什么?
    python基于BAC0库进行bacnet IP的读写
  • 原文地址:https://blog.csdn.net/ugnbucbjj/article/details/126124201