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 条评论
登录 后参与评论

相关文章

来自专栏自动化测试实战

推荐一个正则表达式软件——Match Tracer

1514
来自专栏前端小叙

koa2入门学习

koa模块 koa-route 路由 route.get("路径",路由函数) koa-static 静态资源加载     const serve(路径) k...

3448
来自专栏Ryan Miao

java线程(1)--概念基础

参考:http://lavasoft.blog.51cto.com/62575/99150 http://blog.csdn.net/baby_newstar/...

3238
来自专栏钟绍威的专栏

从源代码到Runtime发生的重排序编译器重排序指令重排序内存系统重排序阻止重排序

 源代码和Runtime时执行的代码很可能不一样,这是因为编译器、处理器常常会为了追求性能对改变执行顺序。然而改变顺序执行很危险,很有可能使得运行结果和预想的不...

2379
来自专栏个人随笔

Java 多线程 从无到有

个人总结:望对屏幕对面的您有所帮助 ? 一. 线程概述 进程: 有独立的内存控件和系统资源 应用程序的执行实例 启动当前电脑任务管理器:taskmgr 进程是...

3125
来自专栏Java后端技术

深入聊聊Java多线程

  在没有学习Java多线程以前,总觉得多线程是个很神秘的东西,只有那些大神才能驾驭,新年假期没事就来学习和了解一下Java的多线程,本篇博客我们就来从头说一下...

994
来自专栏ascii0x03的安全笔记

HTTP严格安全传输(HTTP Strict Transport Security, HSTS)chromuim实现源码分析(二)

HTTP严格安全传输(HTTP Strict Transport Security, HSTS)chromuim实现源码分析(一) 下面来查看其他对保存HSTS...

3027
来自专栏求索之路

吾日外省

912
来自专栏北京马哥教育

Python爬虫基础知识:百度贴吧网络爬虫及源码分享

糖豆贴心提醒,本文阅读时间6分钟 百度贴吧的爬虫制作和糗百的爬虫制作原理基本相同,都是通过查看源码扣出关键数据,然后将其存储到本地txt文件。 项目内容: ...

30510
来自专栏我爱编程

Day15进程和线程

多进程 multiprocessing multiprocessing模块提供了一个Process类来代表一个进程对象,下面的例子演示了启动一个子进程并等待其结...

2775

扫码关注云+社区