博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【原创】docker源码分析(4)---execdriver
阅读量:4032 次
发布时间:2019-05-24

本文共 1809 字,大约阅读时间需要 6 分钟。

本文的QQ空间链接:

本文的csdn博文的链接:

execdriver通过lxc或者libcontainer来实现资源隔离。本文就来简单分析下execdriver。

 

1、上层初始化

代码在docker\daemon\daemon.go

在函数NewDaemonFromDirectory

初始化了execdriver,并将其赋值到daemon的成员变量中。

这里就是execdriver的开启地方。

 

 

2、execdriver插件

目前execdriver支持两种模式

代码在docker\daemon\execdriver\execdrivers\execdrivers.go

这里面有lxc模式,还有native模式(这个模式其实就是对libcontainer的封装)

 

2.1、Driver接口

然后我们看看Driver的接口

代码在docker\daemon\execdriver\driver.go

看到这里,我们就应该很兴奋了,这里就封装了容器的运行。

 

里面的参数都需要一个Command

我们看看这个结构体

封装了容器运行所需要的参数

 

其中command里面有几个成员是比较值得注意的。

上面两个是Network的信息,这个就需要用到networkdriver了

 

还有ipc、pid、resources、mount等就不贴图出来了。

 

 

3、native

下面就简单看下native的driver

代码在docker\daemon\execdriver\native\driver.go

先看结构体

里面有一个activeContainers用于保存container

接着是初始化函数

里面封装了libcontainer的东西

 

下面我们看看其提供的一些操作

 

 

 

3.1、createContainer

在看createContainer之前我们先看看InitContainer

代码在docker\daemon\execdriver\driver.go

做了一些参数的设置

下面我们进入createContainer

代码在docker\daemon\execdriver\native\create.go

先初始化Container,然后创建ipc、pid、network

设置了capabilities和groups

设置mount,labels,还有limit,最后返回了libContainer中的对象Container

 

3.2、 Run

代码在docker\daemon\execdriver\native\driver.go

先创建了Container,然后初始化了一个process

接着设置tty

然后又封装了一层,由libcontaer的Factory生成了cont

最后将cont添加到了activeContainers(这个就是driver结构体中用来保存的Container的一个map)

 

下面就是启动了

  

3.3、Exec

我们看源码

代码在docker\daemon\execdriver\native\exec.go

exec流程和Run流程基本是一样的,不同的地方就是Run是新创建Container,而exec则是从activeContainer中去查找已经创建过的Container

查找到了之后,流程就是一样的了

3.4 Kill

代码在docker\daemon\execdriver\native\driver.go

kill很简单,就是查找到相对于的Container,然后发送一个信号给他

 

3.5 小结

还有很多的操作,这里就不一一贴图出来了。大致的流程应该是比较清晰了。如果还需要继续深入的话,那就需要去分析libContainer的代码了

4、总结

execdriver依旧采用的插件方式。代码还是很清晰的。只是底层涉及到lxc和libContainer,如果还需要继续深入的话,就需要对这两个东西做一些分析。

 

 

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

龚浩华

QQ 月牙寂 道长 29185807

2016年5月5日

(版权声明:本文为作者原创,如需转载请通知本人,并标明出处和作者。擅自转载的,保留追究其侵权的权利。)

 

如果你觉得本文对你有帮助,可以转到你的朋友圈,让更多人一起学习。

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

 

 

你可能感兴趣的文章
AS3 Flex基础知识100条
查看>>
Flex动态获取flash资源库文件
查看>>
flex中设置Label标签文字的自动换行
查看>>
Flex 中的元数据标签
查看>>
flex4 中创建自定义弹出窗口
查看>>
01Java基础语法-11. 数据类型之间的转换
查看>>
01Java基础语法-13. if分支语句的灵活使用
查看>>
01Java基础语法-15.for循环结构
查看>>
01Java基础语法-16. while循环结构
查看>>
01Java基础语法-17. do..while循环结构
查看>>
01Java基础语法-18. 各种循环语句的区别和应用场景
查看>>
01Java基础语法-19. 循环跳转控制语句
查看>>
Django框架全面讲解 -- Form
查看>>
socket,accept函数解析
查看>>
今日互联网关注(写在清明节后):每天都有值得关注的大变化
查看>>
”舍得“大法:把自己的优点当缺点倒出去
查看>>
[今日关注]鼓吹“互联网泡沫,到底为了什么”
查看>>
[互联网学习]如何提高网站的GooglePR值
查看>>
[关注大学生]求职不可不知——怎样的大学生不受欢迎
查看>>
[关注大学生]读“贫困大学生的自白”
查看>>