美文网首页
Docker 非docker环境中编译安装

Docker 非docker环境中编译安装

作者: myonlyzzy | 来源:发表于2017-06-09 11:36 被阅读0次

    最近要修改docker的源码做一些开发,但是docker的官网给的编译方式是用docker提供的dockerfile文件编译一个docker 镜像然后在这个容器里面通过脚步编译docker。我们都知道1.11以后的docker实际上有docker dockerd  docker-containerd  runc 几个进程组成。如何我修改一次就要全部编译一遍多麻烦。所以我觉定自己go build 出docker的几个可执行文件。

    1. git clone github.com/moby/moby  现在docker 的代码从docker/docker 迁移到了 /moby/moby。当然你编译之前还需要安装go。这个golang 官网都有按照说明安装就好。

    2. 编译docker  就是docker client 。代码在 cmd/docker  下,我这里是1.13.x 分支。在你的gopath 路径下还有一个docker/docker 的目录你要保持 docker下的分支和moby 下的一致。不然在moby 下build 会出错。然后 go build  。会生成docker  bin文件。

    3.编译 dockerd  编译dockerd 的时候需要安装许多包。可以根据错误提示安装需要的包。例如我是fedora25 。 go build 会报 libdevmapper.h 缺少。然后 dnf install   device-mapper-devel.x86_6 。

    4. 编译containerd . git clone github.com/docker/containerd .    编译containerd 使用containerd 的make file 来编译生成。 编译完以后会生成 containerd-shim ,containerd。  具体参考 containerd 的README。

    5.编译生成runc 。runc是最终启动容器的工具,可以说容器的核心。实际上没有 dockerd 也是发送命令到containerd  containerd 再 启动 containd-shim containerd-shim 再调用runc 来启动容器 停止容器等容器运行生命周期的各种操作。其实没有前几个进程,可以直接发送数据给runc 启动容器。当然了要符合oci的标准。具体可以参考runc项目的readme runc 现在在 https://github.com/opencontainers/runc。docker 变曾经的libcontainer贡献出来改了个名字变成cncf下的runc 项目。 runc 编译 就go build 一下。具体看github的 readme 写的非常详细。

    现在docker 需要的5个bin文件全部都编译生成完成。 分别是docker   dockerd  containerd  containerd-shim  和runc 。编译这些可执行文件主要是为了方便我调试docker  代码。后面我会修改docker dockerd   containerd 等 。从一条docker run  看 数据如何在 这几个进程间流动。如何互相调用。

    相关文章

      网友评论

          本文标题:Docker 非docker环境中编译安装

          本文链接:https://www.haomeiwen.com/subject/fjmxqxtx.html