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等

原文地址:https://www.cnblogs.com/rdchenxi/p/10482608.html

时间: 2024-08-30 02:27:08

docker 框架概述的相关文章

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

综述 爬虫入门之后,我们有两条路可以走. 一个是继续深入学习,以及关于设计模式的一些知识,强化Python相关知识,自己动手造轮子,继续为自己的爬虫增加分布式,多线程等功能扩展.另一条路便是学习一些优秀的框架,先把这些框架用熟,可以确保能够应付一些基本的爬虫任务,也就是所谓的解决温饱问题,然后再深入学习它的源码等知识,进一步强化. 就个人而言,前一种方法其实就是自己动手造轮子,前人其实已经有了一些比较好的框架,可以直接拿来用,但是为了自己能够研究得更加深入和对爬虫有更全面的了解,自己动手去多做.

基于QTP的自动化测试框架概述

框架稳定后展示给用户的内容有以下几部分,也就是说测试人员需要去关注去维护的部分就可以了,完全不在care代码内容是什么,只需要按照格式填写就OK 1.测试用例执行模拟控制列表(可用其它管理工具代替,这里用成本最低的方式实现不借助已有的专业管理工具) 2.测试用例控制列表 3.测试数据控制列表 基于QTP的自动化测试框架概述,布布扣,bubuko.com

Java三大主流框架概述

Java三大主流框架概述 邮箱:[email protected] Struts.Hibernate和Spring是我们Java开发中的常用关键,他们分别针对不同的应用场景给出最合适的解决方案.但你是否知道,这些知名框架最初是怎样产生的?我们知道,传统的Java Web应用程序是采用JSP+Servlet+Javabean来实现的,这种模式实现了最基本的MVC分层,使的程序结构分为几层,有负责前台展示的JSP.负责流程逻辑控制的Servlet以及负责数据封装的Javabean.但是这种结构仍然存

JAVAWEB开发之Hibernate详解(一)——Hibernate的框架概述、开发流程、CURD操作和核心配置与API以及Hibernate日志的使用

Hibernate框架概述 什么是Hibernate? 框架:软件的半成品,完成部分代码的功能. Hibernate:Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思想来操作数据库.Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序中使用,也可以在Servlet/JSP的web应用程序中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成

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

iOS Foundation 框架概述文档:常量.数据类型.框架.函数.公布声明 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的漂亮人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. Foundation 框架概述文档:常量.数据类型.框架.函数.

爬虫框架概述

综述 爬虫入门之后,我们有两条路可以走. 一个是继续深入学习,以及关于设计模式的一些知识,强化Python相关知识,自己动手造轮子,继续为自己的爬虫增加分布式,多线程等功能扩展.另一条路便是学习一些优秀的框架,先把这些框架用熟,可以确保能够应付一些基本的爬虫任务,也就是所谓的解决温饱问题,然后再深入学习它的源码等知识,进一步强化. 就个人而言,前一种方法其实就是自己动手造轮子,前人其实已经有了一些比较好的框架,可以直接拿来用,但是为了自己能够研究得更加深入和对爬虫有更全面的了解,自己动手去多做.

iOS应用安全防护框架概述

iOS应用安全防护框架概述 攻易防难,唯有缜密.多层的防护网络才能可靠的保护我们iOS应用程序的安全.那么,一个完善的iOS应用安全防护框架都要写哪些东西呢? 首先,先梳理一下常见的逆向及攻击工具. iOS应用逆向常用工具 Reveal Cycript Class-dump Keychain-Dumper gdb iNalyzer introspy Fishhook removePIE IDA pro or Hopper snoop-it iDB Charles SSL Kill Switch

quick-cocos2d-x学习笔记【1】——引擎框架概述和创建项目

好吧,我还是忍不住想写点关于quick的学习笔记,确实网上关于它的教程太少太少了,简单把自己的所学所得分享一下,有不对之处还请班门弄斧. 首先下载引擎包,触控收购quick之后,现在cocos中文站的主页上就可以下到了,虽然3.0alpha版发布了,还是等beta吧,在这里可以下到最新2.x的版本--2.2.5,好了,以后就暂时先拿这个版本学习,还是从低版本向高版本学习要轻松一些,至少知道是怎么过渡的. 简单解压缩一下,可以看到这样的文件结构 我们真正常用的几个文件目录就是docs,player

play框架概述

今天是来百度实习的第四天,在项目过程中mentor说会用到play框架,当时就一个晕啊.Java还有一个叫play框架,作为一个从大三开始用java的重度javaer,居然不知道这个框架的存在,内心一阵草泥马飞过,于是乎就花了一下午研究一下. What's play framework? 先来个开胃菜吧,什么是play框架呢? 先来点官方的解释:Play是一款开源.轻量.无状态.Web友好的架构,使用Java语言编写并遵循MVC模式,集成了当今Web开发所需的组件和API.此外Play可以给应用