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. 【转】在IDEA中创建maven项目

    原文地址: https://blog.csdn.net/zzy1078689276/article/details/78732183 现在的JavaWeb项目中,绝大多数都是采用的maven结构的项目 ...

  2. HTTP错误code大全

    100 - Continue 101 - Switching Protocols Top Success Codes 200 - OK 201 - Created 202 - Accepted 203 ...

  3. [技术分享]借用UAC完成的提权思路分享

    借用UAC完成的提权思路分享 背景 UAC(User Account Control,用户帐户控制)是微软为提高系统安全而在Windows Vista中引入的新技术,它要求用户在执行可能会影响计算机运 ...

  4. 51nod1270 【dp】

    思路: dp[i][0]代表第i个位置取1,dp[i][1]代表第i个位置取b[i]. #include <bits/stdc++.h> using namespace std; type ...

  5. Managed C++ wtypes.h DATE 转化为 .net的 DateTime

    http://stackoverflow.com/questions/570224/how-do-i-convert-from-mfcs-coledatetime-to-c-sharp-datetim ...

  6. poj 3710 Christmas Game【博弈论+SG】

    也就是转换到树形删边游戏,详见 https://wenku.baidu.com/view/25540742a8956bec0975e3a8.html #include<iostream> ...

  7. 鸟哥私房菜基础篇:Linux 档案与目录管理习题

    猫宁!!! 参考链接:http://linux.vbird.org/linux_basic/0220filemanager.php 鸟哥是为中国信息技术发展做出巨大贡献的人. 1-什么是绝对路径与相对 ...

  8. Mantis优化改造(技术篇)

    为什么要写这篇? 既然都过去这么久了,都回忆不起来了,为什么还要整理出来这篇文章呢? 这还要追溯到2018年3月份. 当时换工作,面试了国内某知名电视厂商. 简历上面写了我优化改造了bug管理系统ma ...

  9. plsqldeveloper永久注册码

    注册码:Product Code:4t46t6vydkvsxekkvf3fjnpzy5wbuhphqzserial Number:601769 password:xs374ca

  10. The Django Book学习笔记 06 admin

    自定义字段标签 自定义一个标签, 你只需在模块中指定 verbose_name=' ' from django.db import models # Create your models here. ...