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 框架概述的更多相关文章

  1. Entity Framework 学习总结之一:ADO.NET 实体框架概述

    http://www.cnblogs.com/xlovey/archive/2011/01/03/1924800.html ADO.NET 实体框架概述 新版本中的 ADO.NET 以新实体框架为特色 ...

  2. ThinkPHP框架概述

    框架概述 1.什么是框架 框架,即framework.其实就是某种应用的半成品,就是一组组件,供你选用完成你自己的系统. 2.框架的应用场景 ① 代码重用 ② 合理分工 ③ 解决团队协作开发问题 3. ...

  3. iOS Foundation 框架概述文档:常量、数据类型、框架、函数、公布声明

    iOS Foundation 框架概述文档:常量.数据类型.框架.函数.公布声明 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业 ...

  4. struts2框架概述

    框架概述 什么是框架,为什么使用框架,框架优点 框架(framework)是一个基本概念上的结构,用于去解决或者处理复杂的问题 框架,即framework.其实就是某种应用的半成品,就是一组组件,供你 ...

  5. 芝麻软件: Python爬虫进阶之爬虫框架概述

    综述 爬虫入门之后,我们有两条路可以走. 一个是继续深入学习,以及关于设计模式的一些知识,强化Python相关知识,自己动手造轮子,继续为自己的爬虫增加分布式,多线程等功能扩展.另一条路便是学习一些优 ...

  6. 写写Django中DRF框架概述以及序列化器对象serializer的构造方法以及使用

    写写Django中DRF框架概述以及序列化器对象serializer的构造方法以及使用 一.了解什么是DRF DRF: Django REST framework Django REST framew ...

  7. Python爬虫进阶一之爬虫框架概述

    综述 爬虫入门之后,我们有两条路可以走. 一个是继续深入学习,以及关于设计模式的一些知识,强化Python相关知识,自己动手造轮子,继续为自己的爬虫增加分布式,多线程等功能扩展.另一条路便是学习一些优 ...

  8. iOS应用安全防护框架概述

    iOS应用安全防护框架概述 攻易防难,唯有缜密.多层的防护网络才能可靠的保护我们iOS应用程序的安全.那么,一个完善的iOS应用安全防护框架都要写哪些东西呢? 首先,先梳理一下常见的逆向及攻击工具. ...

  9. python爬虫框架(1)--框架概述

    框架概述 其中比较好用的是 Scrapy 和PySpider.pyspider上手更简单,操作更加简便,因为它增加了 WEB 界面,写爬虫迅速,集成了phantomjs,可以用来抓取js渲染的页面.S ...

随机推荐

  1. 洛谷 P1337 平衡点 & bzoj 3680 吊打 XXX —— 模拟退火

    题目:https://www.luogu.org/problemnew/show/P1337 https://www.lydsy.com/JudgeOnline/problem.php?id=3680 ...

  2. 6-4 Haar特征1

    实际上特征就是图像中某个区域的像素点,经过某种四则运算之后得到的结果.所以说图像的特征它是像素经过运算之后得到的某一个结果.这个结果可以是一个具体的值,也可以是一个向量,又或是一个多维的元素.所以说特 ...

  3. 是时候开刷NOI了

    整天挨着毛爷爷,压力好大.. 看毛爷爷即将炖完NOI,我的确也该刷了 原则是从头到尾自己想(虽然看了一次题解),可以不A掉. NOI2009 day1: T1 题目略神,我还是不讲了...(就这题我W ...

  4. Codeforces626B - Cards【模拟】

    题意: 两张相同可以合并成相同: 两张不同可以产生另外一个不同: 求最终的可能颜色: 思路: 模拟啊. 总共也就那么几种情况,具体看挫code--. #include<iostream> ...

  5. bzoj 2648: SJY摆棋子【KD-tree】

    其实理论上cdq更优 核心是依次取x值.y值的mid作为当前节点,向两边递归建立二叉树,树上维护size:子树大小:mx[0/1]:子树内最大x/y:mn[0/1]:子树内最小x/y:d[0/1]:这 ...

  6. 洛谷CF1030F Putting Boxes Together(树状数组)

    题意: 现在有n个物品,第i个物品他的位置在a[i],他的重量为w[i].每一个物品移动一步的代价为他的w[i].目前有2种操作: 1. x y 将第x的物品的重量改为y 2.l r 将编号在 [ l ...

  7. SQL_MODE 的设置

    查看当前的 SQL_MODE SELECT @@sql_mode SELECT @@sql_mode 的执行结果 mysql> SELECT @@sql_mode; +------------- ...

  8. IO流案例:1.复制多级文件夹 2.删除多级文件夹

    package copy; /* 需求:复制多级文件夹 复制d:\\itcast(包含文件和子文件夹)到模块目录下 分析: d:\\itcast a.txt b.txt javaweb a.xml b ...

  9. 1-docker基础

    docker有三个基本概念:镜像/容器/仓库 镜像:一个完整的root文件系统,但并非一个iso的打包文件,而是使用分层存储.构建镜像时,是一层一层的.新的镜像,也可以在原有镜像上添加新层. 容器:是 ...

  10. SQL-添加字段处理

    1.alter   table   [dbo].[SiteTracks]   drop   constraint   DF__SiteTrack__Audit__47DBAE452.ALTER TAB ...