docker 框架概述
docker的框架
docker 使用传统的client-server架构模式,用户端通过docker client 与docker daemon 建立通信,并将请求发送给后者,而docker后端时松藕合结构,不同模块各斯其职,有机结合,完成用户请求 。

docker daemom 是 docker架构中的主要接口,首先,它提供了API server 用于接受来自docker client,其后根据不同的请求分发给docker daemom 的不同模块执行相应的工作,其中对容器运行时,volume、镜像以及网络方面的具体实现已经存放daemom以为的模块。值得注意的是,docker一直致力于将自己进一步解耦,削弱docker daemom的功能。
docker通过driver模块来实现对docker容器执行环景的创建和管理。当需要创建docker容器时可通过镜像管理部分的distribution和registry 模块从docker registry 中下载镜像,并通过镜像管理的image、reference和layer 存储镜像的元数据,通过镜像存储驱动graphdriver将镜像文件存储于具体的文件系统中;当需要为docker 容器创建网络环境时,通过网络管理模块network调用libnetwork创建并配置docker网络;当需要为容器创建数据卷时,则通过volume模块调用某具体的volumedriver,来创建一个数据卷并负责后续的挂载操作;当需要限制docker容器运行资源或者执行用户指令等操作时,则通过execdriver来实现对容器的管理,包括利用UTS、IPC、PID、Network、Mount、User等namespace实现容器资源隔离和利用cgroups实现对容器的资源限制,当容器的命令执行完成后,一个实际的容器就处于运行状态,该容器与拥有独立的文件系统,相对安全且互相隔离的运行环境。docker1.9版本以后,volume和network的生命周期都是独立运行于容器的,于容器一样是docker中的一等公民,docker用户可以单独增删改查volume或者network,然后在创建容器的时候根据需要配置给容器
docker daemom
docker daemom 是docker最核心的后台进程,他负责相应来自docker client 的请求,然后将这些请求翻译成系统调用完成容器的操作,该进程会在后台启动一个API server,负责接收docker client发送的请求;接收到的请求将通过docker daemom分发调度,再由具体函数来执行
dicker client
docker client 是一个泛称,用来向docker daemom发送请求的,执行相应的容器管理操作,可以是命令行工具docker,也可以是任何遵循了docker API的客户端,目前,社区中维护着docker client 种类非常丰富,涵盖了C#(支持Windows)、java、GO、Ruby、JavaScript等常用语言,甚至还有使用Angular库编写的webUI格式的客户端。
镜像管理
docker通过distribution、registry、layer、等模块实现了docker镜像管理,我们将模块统称镜像管理,在docker 1.10以前版本中,这一功能统一由graph组件来完成的
| distribution | 负责把docker registry交互,上传下载镜像以及存储于v2 registry有关的元数据 |
| registry | 负责与docker registry有关身份验证、镜像查找、镜像验证以及管理registry mirror等交互操作 |
| image | 负责与镜像元数据有关的存储,查找,镜像层的索引,查找以及镜像tar包有关的导入、导出等操作 |
| reference | 负责存储本地所有镜像的registry和tar名,并维护与镜像ID之间的映射关系 |
| layer | 负责与镜像层与容器层元数据有关的增删改查,并负责将镜像层的增删改查操作映射到实际存储镜像层文件系统的graphdriver |
execderiver 、volumedriver 、grephdirver
execderiver 是对Linux操作系统的namespace cgroups apparmor selinux 等容器运行所需的系统操作进行的一层二次封装,其本质作用类似于LXC,但是功能要更全面,这也就是为什么LXC会作为execdriver 的一种实现而存在,当然execdriver主要的实现,也是现在的默认实现。
volumedriver 是volume数据卷存储操作的最终执行者,负责volume的增删改查。屏蔽不同驱动实现的区别,为上层调用者提供统一接口。docker中默认实现的volumedriver是local。默认将文件存储于docker根目录下的volume文件夹里。其他的volumedriver均是通过外部插件实现的,是docker官方编写的libcontainer库
graphdriver是所有与容器镜像相关操作的最终执行者。graphdriver会在docker工作目录下维护一组与镜像层对应的目录,并记录下镜像层之间的关系以及与具体的graphdriver实现相关的元数据。这样,用户对镜像的操作最终会被映射成对这些目录的文件及元数据的增删改查,从而屏蔽掉不同文件存储实现对上层调用者的影响。在Linux环境下,目前docker已经支持graphdriver包括aufs、btrfs、zfs、devicemapper、overlay和vfs
network
docker 1.9版本以前,网络通过networkdriver模块以及libcontainer库完成的。现在这部分功能已经分离成一个libnetwork库独立维护了。libnetwork抽象出一个容器模型,并给调用者提供了一个统一抽象接口,其目标不仅限于docker容器CNM模型对真实的容器网络抽象出了沙盒、端点、网络这3中对象,具体网络驱动(包括内置的bridge、host、None和overlay驱动以及通过插件配置的外部驱动 )操作对象,并通过网络控制器提供一个统一接口供调用者管理网络。网络驱动负责实现具体操作,包括创建容器通信所需的网络。为容器提供一个network namespace,这个网络所需的虚拟网卡,分配通信所需的IP,服务访问的端口和容器与宿主机之间的端口映射,设置hosts,resolve.com、iptables等
docker 框架概述的更多相关文章
- Entity Framework 学习总结之一:ADO.NET 实体框架概述
http://www.cnblogs.com/xlovey/archive/2011/01/03/1924800.html ADO.NET 实体框架概述 新版本中的 ADO.NET 以新实体框架为特色 ...
- ThinkPHP框架概述
框架概述 1.什么是框架 框架,即framework.其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统. 2.框架的应用场景 ① 代码重用 ② 合理分工 ③ 解决团队协作开发问题 3. ...
- iOS Foundation 框架概述文档:常量、数据类型、框架、函数、公布声明
iOS Foundation 框架概述文档:常量.数据类型.框架.函数.公布声明 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业 ...
- struts2框架概述
框架概述 什么是框架,为什么使用框架,框架优点 框架(framework)是一个基本概念上的结构,用于去解决或者处理复杂的问题 框架,即framework.其实就是某种应用的半成品,就是一组组件,供你 ...
- 芝麻软件: Python爬虫进阶之爬虫框架概述
综述 爬虫入门之后,我们有两条路可以走. 一个是继续深入学习,以及关于设计模式的一些知识,强化Python相关知识,自己动手造轮子,继续为自己的爬虫增加分布式,多线程等功能扩展.另一条路便是学习一些优 ...
- 写写Django中DRF框架概述以及序列化器对象serializer的构造方法以及使用
写写Django中DRF框架概述以及序列化器对象serializer的构造方法以及使用 一.了解什么是DRF DRF: Django REST framework Django REST framew ...
- Python爬虫进阶一之爬虫框架概述
综述 爬虫入门之后,我们有两条路可以走. 一个是继续深入学习,以及关于设计模式的一些知识,强化Python相关知识,自己动手造轮子,继续为自己的爬虫增加分布式,多线程等功能扩展.另一条路便是学习一些优 ...
- iOS应用安全防护框架概述
iOS应用安全防护框架概述 攻易防难,唯有缜密.多层的防护网络才能可靠的保护我们iOS应用程序的安全.那么,一个完善的iOS应用安全防护框架都要写哪些东西呢? 首先,先梳理一下常见的逆向及攻击工具. ...
- python爬虫框架(1)--框架概述
框架概述 其中比较好用的是 Scrapy 和PySpider.pyspider上手更简单,操作更加简便,因为它增加了 WEB 界面,写爬虫迅速,集成了phantomjs,可以用来抓取js渲染的页面.S ...
随机推荐
- jQuery 引用地址(包括jquery和google提供的地址), 节省你不必要的流量
转载自:http://www.cnblogs.com/henw/archive/2011/09/30/2196255.html 你可以使用这句代码读取jQuery的最新版本的代码文件. jquery官 ...
- 看鸟哥的Linux私房菜的一些命令自我总结(一)
-显示目前所支持的语言 echo &LANG -修改语言成为英文系统 LANG=en_US -显示日历的命令 cal [[month] year] -惯用关机命令 shutdown 参数: ...
- bzoj 1478: Sgu282 Isomorphism && 1815: [Shoi2006]color 有色图【dfs+polya定理】
参考 https://wenku.baidu.com/view/fee9e9b9bceb19e8b8f6ba7a.html?from=search### 的最后一道例题 首先无向完全图是个若干点的置换 ...
- PAT团体程序设计天梯赛 - 模拟赛
由于本人愚笨,最后一题实在无力AC,于是只有前14题的题解Orz 总的来说,这次模拟赛的题目不算难,前14题基本上一眼就有思路,但是某些题写起来确实不太容易,编码复杂度有点高~ L1-1 N个数求和 ...
- (4)javascript的运算符以及运算符的优先级
运算符的使用方法 在javascript的程序中要完成各种各样的运算,是离不开运算符的. 在javascript中,按运算符类型可以分为 ...
- IDEA设置取消自动显示参数提示
IDEA设置取消自动显示参数提示 最近在使用IDEA的过程中,发现方法中一直显示形参名的提示,无法选中,也无法删除,基于不同人的使用习惯不同,有的人不喜欢这种提示,我也在网上寻找各种解决方案,由于搜索 ...
- Selenium | 基础入门 | 利用Xpath寻找用户框
以微信公众号登陆界面为例, 找到相对应的Xpath的方法, 核心代码: System.setProperty(“webdriver.chrome.driver”,“ C:\\Program Files ...
- nginx用户统计
1 概念 PV:页面访问量,即PageView,用户每次对网站的访问均被记录,用户对同一页面的多次访问,访问量累计. UV:独立访问用户数:即UniqueVisitor,访问网站的一台电脑客户端为一个 ...
- python之类的相关名词解释
变量:在类里面定义的变量,不必实例化即可调用 实例变量:在类里面定义的变量,必须实例化之后才可以调用 比如: 属性方法:调用时看起来像是一个变量,方法没有入参,可以变成一个属性方法 在方法上添加@pr ...
- _bzoj1029 [JSOI2007]建筑抢修【贪心 堆】
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1029 经典的贪心问题,不解释. #include <cstdio> #inclu ...