Docker源码分析--环境搭建
Docker的最新版本使用很多第三方的库,作为一个Golang的新手,不想过早的陷入各种库的细节当中,所以我选择了一个比较早期的版本1.20版本来研究,这也是《Docker源码分析》这本书中使用的版本,方便一边读书一边实践。
源码可以从给这里下载
开发环境:
OS : Ubuntu 18.04
IDE : Goland
docker源码中路径的引用为“github.com/docker/docker/api”,所以我们需要把压缩包解压之后,放在GOPATH的正确路径下。
docker的main函数的入口在github.com/docker/docker/docker这个目录下面,切到这个目录下编译会直接报错:
主要是报两个错误:
第一个是由于import的路径导致的,实际上docker把自身依赖的一些第三方的包放在了docker/docker/vendor目录下,代码中的导入路径为“github.com/docker/docker/vendor/src/code.google.com/p/go/src/pkg/archive/tar”这种形式,可能是新版本的Go或者是goLand IDE已经识别出来了vendor这个目录,所以要求直接通过“src/code.google.com/p/go/src/pkg/archive/tar”这种方式来导入,由于自己没有在IDE中找到对应的设置以及对于Golang的module还不太熟悉,打算暂时先绕过这个错误,采用了一个比较笨的方法:全局搜索github.com/docker/docker/vendor/替换为空就可以了。
第二个是libcontainer依赖未安装导致的,直接go get下载即可。
解决这两个错误之后就可以顺利编译成功了,这里新建一个goLand的调试配置,打算实际调试一下docker info这个客户端命令,配置如下:
在 docker/docker/api/client/commands.go 文件的CmdInfo函数下断点,启动调试,即可看到程序被正常断下来了,Ubuntu上我安装过docker,所以docker info最终也是有响应数据的。