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

说明:此文章为腾讯云机器自动从本人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连接。

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏肖蕾的博客

第十三章:图片资源打包器(TexturePacker)TexturePacker介绍TexturePacker 下载使用TextureAtlaspack文件格式

1.介绍:TexturePacker 是一款把若干张资源图片拼接为一张大图的工具。 2.特点: - 1.提高载入速度 把小图拼接成一张大图,一次载入,减少...

924
来自专栏GreenLeaves

Jquery ajax调用后台aspx后台文件方法(不是ashx)

在asp.net webForm开发中,用Jquery ajax调用aspx页面的方法常用的有两种:下面我来简单介绍一下。   (1)通过aspx.cs的静态方...

1825
来自专栏Seebug漏洞平台

当代 Web 的 JSON 劫持技巧

Benjamin Dumke-von der Ehe 发现了一种有趣的跨域窃取数据的方法。使用JS 代理,他能够创建一个 handler,可以窃取未定义的 Ja...

3256
来自专栏coder修行路

CSS补充之--页面布局、js补充,dom补充

CSS补充之--页面布局 主站一:(下面是一个大致的模板) <div class="pg-header"> <div style="width...

2307
来自专栏从零开始学自动化测试

appium+python自动化48-长按(long_press)

长按操作是经常会遇到的场景,通过driver可以直接调出long_press_keycode方法,但是这个方法是长按手机上某个按钮,比如长按电源键,长按home...

961
来自专栏Python入门

使用Python这么多年,才发现Python还有这些实用的功能和特点

在使用Python多年以后,我偶然发现了一些我们过去不知道的功能和特性。一些可以说是非常有用,但却没有充分利用。考虑到这一点,我编辑了一些你应该了解的Pytho...

671
来自专栏安恒网络空间安全讲武堂

WriteUp分享 | CTF-web

题目 各种绕过哦 TXT? 文件上传测试 本地包含 考细心 正则? PHP很烦人? 一道签到题 抽抽奖 never give up I have a j...

1.4K8
来自专栏老马寒门IT

高性能前端 art-template 模板

官网: https://aui.github.io/art-template/zh-cn/index.html

620
来自专栏HTML5学堂

JS简单页面交互实战 - 点击按钮实现求和功能

上一期堡堡给大家讲解了简单的页面交互效果 - 点击块,让块动起来,让我们更清晰的了解JS逻辑和DOM的结合。如果想具体了解点击块,让块动起来,可以回复“交互”到...

3478
来自专栏ASP.NET MVC5 后台权限管理系统

ASP.NET MVC5+EF6+EasyUI 后台管理系统(55)-工作流设计-表单布局

前言:这一节比较有趣。基本纯UI,但是不是很复杂 有了实现表单的打印和更加符合流程表单方式,我们必须自定义布局来适合业务场景打印!我们想要什么效果?看下图 (我...

1609

扫描关注云+社区