前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >docker源码分析(6)---dockerclient

docker源码分析(6)---dockerclient

作者头像
月牙寂道长
修改2018-04-03 11:32:50
8140
修改2018-04-03 11:32:50
举报
文章被收录于专栏:月牙寂月牙寂

说明:此文章为腾讯云机器自动从本人csdn博客搬迁过来。是本人授权操作。

申明:无本人授权,不可转载本文。如有转载,本人保留追究其法律责任的权利。

龚浩华,QQ 29185807,月牙寂 道长

第一时间获取文章,可以关注本人公众号 月牙寂道长 yueyajidaozhang

前面5篇简单的分析了下docker Daemon工作流程。

那么现在进入docker client模式

1、初始流程

代码在docker\docker\flags.go

首先我们看看都提供了那些操作

通过flag.usage来看是最直接的了

从上面的init函数中,可以看出,提供的所有的command

我们进入main函数

docker\docker\docker.go

func main() {

main函数末尾,构造了一个dockerCli,然后调用了cli.Cmd

2、DockerCli

代码在docker\api\client\cli.go

一些参数的准备,然后构建了DockerCli结构体

我们看下dockerCli结构体

结构体的成员数量还是比较少的,相对比Daemon来说,要简洁多了

2.1 、Cmd

下面我们就看看Cmd怎么转换的

根据命令行的参数,进行获取,如果有问题则调用CmdHelp

2.1.1、 CmdHelp

这里可以看到,其实最后调用的是flag.Usage(),这个我们开篇的时候已经分析过了。

2.1.2 、getMethod

getMethod,是通过将在cmd前面加上“Cmd”,然后通过反射找到相对应的处理函数。

这里就是全部提供的Cmd所对应的处理函数。

2.2、CmdCreate

下面我们看看Create命令

代码在docker\api\client\commands.go

首先解析了参数,获取到了config,hostconfig,cmd

然后调用了createContainer

2.2.1、createContainer

将参数合并,然后调用了call,传入的为Method何path,还有编码方式

最后将返回的response进行解码,返回结果

2.2.2、call

代码在docker\api\client\utils.go

将数据进行编码,然后调用了clientRequest

2.2.3 clientRequest

代码在docker\api\client\utils.go

这里代码很简单,也很清晰,构建了一个httpRequest,然后设置了一些参数

接着就是利用httpclient来发起请求,获得到的数据则返回给上一级

3、总结

dockerclient,代码量比较少,功能清晰。读取输入参数,通过发射查找到对应的cmdhandler,然后做一些相关的操作。最后通过调用call---》clientRequest---》httpclient与Daemon连接。

文中如果有哪里讲解的不对的地方,还请见谅,望指正。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年05月06日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、初始流程
  • 2、DockerCli
    • 2.1 、Cmd
      • 2.1.1、 CmdHelp
      • 2.1.2 、getMethod
    • 2.2、CmdCreate
      • 2.2.1、createContainer
      • 2.2.2、call
      • 2.2.3 clientRequest
  • 3、总结
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档