docker-cli 源码编译调试

1 源码下载编译

  • 1.1 源码下载
    仓库地址:https://github.com/docker/cli.git
    关于下载速度慢的解决办法,我所用的一般有两个,
    • 把仓库导入到gitee上去,一般有名的仓库已经有了,直接搜索就行
    • 下载 dev-sidecar进行加速,https://github.com/docmirror/dev-sidecar.git, 注意目前有坑,即开启插件后,不用了需要手动关闭,直接关机的话会导致下次开机 需要修复一下网络
  • 1.2 源码编译
    下载完代码后,安装readme执行 docker buildx bake的话,可能会遇到几个问题
    • 编译机器需要安装docker,且版本要大于 19.03,而比较坑的是,目前直接用yum安装的版本 基本上都是低于这个版本的,所以一般需要手动安装,自己去搜索下 docker的二进制安装方法
    • docker: ‘buildx’ is not a docker command, 可能也会遇到这个问题,一般来说就是docker版本问题,如果版本达到了,还是不行的话,可以手动安装下 buildx,详情自行google
    • docker buildx bake 执行成功了,build目录下会生成 docker二进制,可以正常执行,但是用 dlv或者gdb的时候,却没有调试信息,比如用dlv 无法在goland上 go remote远程调试,这是因为,默认把调试信息去掉了,根据 go help build,我们可以得知可以设置编译参数 -ldflags "-w -s" 。其中 -w 为去掉调试信息(无法使用gdb调试), -s 为去掉符号表。所以只需要找到在哪里设置了就行,然后去掉。通过一番搜索发现是在scripts/build/.variables文件里设置的,去掉-w后重新编译就好了,现在可以愉快的进行调试了

2 源码分析

以docker images为例

实例化
执行
遍历命令
预定义了一组Commands,包含所有的docker命令 通过cmd.Name == next过滤命令
实现接口赋值实现绑定
执行
获取客户端实例,调用ImageList方法与服务器通信
GET接口获取数据
格式化输出
runDocker <- dockerCli
cmd.Execute
c.Traverse
c.findNext
cmd.execute <- flags
c.RunE <- runImages
dockerCli.Client.ImageList
dockerCli.Client.ImageList
cli.get <- /images/json
formatter.ImageWrite
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值