docker 的整体架构及各模块组件 《深入docker底层原理》

news2024/10/5 16:25:21

1.Docker 整体架构

Docker 是一个 C/S 模式的架构,后端是一个松耦合架构,模块各司其职。
在这里插入图片描述
1、用户是使用 Docker Client 与 Docker Daemon 建立通信,并发送请求给后者。

2、Docker Daemon 作为 Docker 架构中的主体部分,首先提供 Docker Server 的功能使其可以接受 Docker Client 的请求。

3、Docker Engine 执行 Docker 内部的一系列工作,每一项工作都是以一个 Job 的形式的存在。

4、Job 的运行过程中,当需要容器镜像时,则从 Docker Registry 中下载镜像,并通过镜像管理驱动 Graphdriver 将下载镜像以 Graph 的形式存储。

5、当需要为 Docker 创建网络环境时,通过网络管理驱动 Networkdriver 创建并配置 Docker容器网络环境。

6、当需要限制 Docker 容器运行资源或执行用户指令等操作时,则通过 Execdriver 来完成。

7、Libcontainer 是一项独立的容器管理包,Networkdriver 以及 Execdriver 都是通过 Libcontainer 来实现具体对容器进行的操作。

2.Docker 各模块组件

2.1Docker Client「发起请求」

1、Docker Client 是 和 Docker Daemon 建立通信的客户端。用户使用的可执行文件为 docker(一个命令行可执行文件),docker 命令使用后接参数的形式来实现一个完整的请求命令(例如:docker images,docker 为命令不可变,images 为参数可变)。

2、Docker Client 可以通过以下三种方式和 Docker Daemon 建立通信:tcp://host:port、unix://pathtosocket 和 fd://socketfd

3、Docker Client 发送容器管理请求后,由 Docker Daemon 接受并处理请求,当 Docker Client 接收到返回的请求相应并简单处理后,Docker Client 一次完整的生命周期就结束了。(一次完整的请求:发送请求→处理请求→返回结果),与传统的 C/S 架构请求流程并无不同。

2.2 Docker Daemon(后台守护进程)

Docker daemon 架构图:

图片

Docker Server 架构图:

图片

1、Docker Server 相当于 C/S 架构的服务端。功能为接受并调度分发 Docker Client 发送的请求。接受请求后,Docker Server 通过路由与分发调度,找到相应的 Handler 来执行请求。

2、在 Docker 的启动过程中,通过包 gorilla/mux 创建了一个 mux.Router 来提供请求的路由功能。在 Golang 中 gorilla/mux 是一个强大的 URL 路由器以及调度分发器。该 mux.Router 中添加了众多的路由项,每一个路由项由 HTTP 请求方法(PUT、POST、GET 或DELETE)、URL、Handler 三部分组成。

3、创建完 mux.Router 之后,Docker 将 Server 的监听地址以及 mux.Router 作为参数来创建一个 httpSrv=http.Server{},最终执行 httpSrv.Serve() 为请求服务。

4、在 Docker Server 的服务过程中,Docker Server 在 listener 上接受 Docker Client 的访问请求,并创建一个全新的 goroutine 来服务该请求。在 goroutine 中,首先读取请求内容并做解析工作,接着找到相应的路由项并调用相应的 Handler 来处理该请求,最后 Handler 处理完请求之后回复该请求。

2.3 Docker Engine

1、Docker Engine 是 Docker 架构中的运行引擎,同时也 Docker 运行的核心模块。它扮演 Docker Container 存储仓库的角色,并且通过执行 Job 的方式来操纵管理这些容器。

2、在 Docker Engine 数据结构的设计与实现过程中,有一个 Handler 对象。该 Handler 对象存储的都是关于众多特定 Job 的 Handler 处理访问。举例说明: Docker Engine 的Handler 对象中有一项为:{“create”: daemon.ContainerCreate,},则说明当名为”create” 的 Job 在运行时,执行的是 daemon.ContainerCreate 的 Handler。

job (Docker Engine 内部最基本的工作执行单元)

1、一个 Job 可以认为是 Docker 架构中 Docker Engine 内部最基本的工作执行单元。Docker 可以做的每一项工作,都可以抽象为一个 Job。例如:在容器内部运行一个进程,这是一个 Job;创建一个新的容器,这是一个 Job。Docker Server 的运行过程也是一个 Job,名为 ServeApi。

2、Job 的设计者,把 Job 设计得与 Unix 进程相仿。比如说:Job 有一个名称、有参数、有环境变量、有标准的输入输出、有错误处理,有返回状态等。

2.4 Docker Registry(镜像注册中心)

1、Docker Registry 是一个存储容器镜像的仓库(注册中心),可理解为云端镜像仓库。按 Repository 来分类,docker pull 按照 [repository]:[tag] 来精确定义一个具体的 Image。

2、在 Docker 的运行过程中,Docker Daemon 会与 Docker Registry 通信,并实现搜索镜像、下载镜像、上传镜像三个功能,这三个功能对应的 Job 名称分别为:“search”、”pull” 与 “push”。

3 Docker Registry 可分为公有仓库( Docker Hub)和私有仓库。

2.5 Graph 「Docker 内部数据库」

Graph 架构图:

图片

Repository
1、已下载镜像的保管者(包括下载的镜像和通过 Dockerfile 构建的镜像)。
搜索公众号顶级架构师回复关键字“架构整洁”,获取一份惊喜礼包。

2、一个 Repository 表示某类镜像的仓库(例如:Ubuntu),同一个 Repository 内的镜像用 Tag 来区分(表示同一类镜像的不同标签或版本)。一个 Registry 包含多个Repository,一个 Repository 包含同类型的多个 Image。

3、镜像的存储类型有 Aufs、Devicemapper、Btrfs、Vfs等。其中 CentOS 系统 7.x 以下版本使用 Devicemapper 的存储类型。

4、同时在 Graph 的本地目录中存储有关于每一个的容器镜像具体信息,包含有:该容器镜像的元数据、容器镜像的大小信息、以及该容器镜像所代表的具体 rootfs。

GraphDB
1、已下载容器镜像之间关系的记录者。

2、GraphDB 是一个构建在 SQLite 之上的小型数据库,实现了节点的命名以及节点之间关联关系的记录。

2.6 Driver 「执行部分」

Driver 是 Docker 架构中的驱动模块。通过 Driver 驱动,Docker 可以实现对 Docker 容器执行环境的定制。即 Graph 负责镜像的存储,Driver 负责容器的执行。

Graphdriver
Graphdriver 架构图:

图片

1、Graphdriver 主要用于完成容器镜像的管理,包括存储与获取。

2、存储:docker pull 下载的镜像由 Graphdriver 存储到本地的指定目录( Graph 中 )。

3、获取:docker run(create)用镜像来创建容器的时候由 Graphdriver 到本地 Graph中获取镜像。

Networkdriver
Networkdriver 架构图:

图片

Networkdriver 的用途是完成 Docker 容器网络环境的配置,其中包括:

Docker 启动时为 Docker 环境创建网桥。
Docker 容器创建时为其创建专属虚拟网卡设备。
Docker 容器分配IP、端口并与宿主机做端口映射,设置容器防火墙策略等。

Execdriver
Execdriver 架构图:

图片

1、Execdriver 作为 Docker 容器的执行驱动,负责创建容器运行命名空间、容器资源使用的统计与限制、容器内部进程的真正运行等。

2、现在 Execdriver 默认使用 Native 驱动,不依赖于 LXC。

2.7 Libcontainer 「函数库」

Libcontainer 架构图:

图片

1、Libcontainer 是 Docker 架构中一个使用 Go 语言设计实现的库,设计初衷是希望该库可以不依靠任何依赖,直接访问内核中与容器相关的 API。

2、Docker 可以直接调用 Libcontainer 来操纵容器的 Namespace、Cgroups、Apparmor、网络设备以及防火墙规则等。

3、Libcontainer 提供了一整套标准的接口来满足上层对容器管理的需求。或者说 Libcontainer 屏蔽了 Docker 上层对容器的直接管理。

2.8 Docker Container 「服务交付的最终形式」

Docker Container 架构:

图片

1、Docker Container( Docker 容器 )是 Docker 架构中服务交付的最终体现形式。

2、Docker 按照用户的需求与指令,订制相应的 Docker 容器:

用户通过指定容器镜像,使得 Docker 容器可以自定义 rootfs 等文件系统。
用户通过指定计算资源的配额,使得 Docker 容器使用指定的计算资源。
用户通过配置网络及其安全策略,使得 Docker 容器拥有独立且安全的网络环境。
用户通过指定运行的命令,使得 Docker 容器执行指定的工作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/725692.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows如何设置自动关闭未响应的程序?Windows设置自动关闭未响应的程序方法,带图详解

Windows系统程序经常出现程序未响应现象,如何通过注册表使其自动关闭呢 1、首先快捷键winR唤出【运行】 输入regedit 2、确定后就打开了注册表编辑器,定位到【HKEY_CURREnT_UsER\Control panel\desktop】项下 3、在右侧找【AutoEndTasks】数值数据&#…

yolo.h5文件问题的解决 - 吴恩达深度学习:目标检测之YOLO算法

1.下载下载yad2k: git clone https://github.com/allanzelener/yad2k.git 这里面顺便有yad2k.py文件 2.下载yolov2.cfg https://github.com/pjreddie/darknet/tree/master/cfg 3.下载yolov2.weights http://pjreddie.com/media/files/yolo.weights 需要这三个文件 自己去githup…

易模为真人3D手办制作带来了创新

3d打印技术是一项近年来迅速发展的先进制造技术,逐渐在各个领域展现出无限的潜力。其中,3d打印真人手办成为了一个备受关注的领域。在市面上,我们常常可以看到一些热门动漫角色或明星的真人3d手办,逼真的细节和完美的再现度让人们…

iOS上架报错:无法添加以供审核

无法提交以供审核 要开始审核流程 必须提供以下项目 您必须为要添加的 app 提供版权信息。 您在提交 app 审核时遇到的问题是因为需要提供版权信息,而您的 app 缺少相关的版权信息。以下是解决此问题的步骤: 确认您是否拥有 app 的版权:在提…

mac苹果电脑,怎么把mkv转换mp4格式

mac苹果电脑,怎么把mkv转换mp4格式?如果你是一名mac苹果电脑的用户,在电脑上下载到mkv格式的视频后会发现它使用起来非常的麻烦,甚至不能直接打开播放。mkv其实也是一种时间比较久远的视频文件格式,但是不知道是什么原…

eNSP-OSPF组播拓展

OSPF组播拓展 文章目录 OSPF组播拓展一、拓扑结构二、基础配置三、测试验证 启动 OSPF 协议后 , OSPF 将向本地所有运行 OSPF 协议的接口以组播224.0.0.5的形式发送hello报 文 ; hello 报文中将携带本地 RID 值 , 以及本地已知的邻居的RID值&…

nginx反向代理 404 问题

发现我们设置了反向代理没有起作用,最后发现原来是伪静态惹得祸 解决nginx添加反向代理代码不生效-与原rewrite伪静态规则冲突了 以thinkphp官方给的伪静态为例 if (!-e $request_filename){rewrite ^(.*)$ /index.php?s$1 last; break;}仔细研究发现发现问…

Android OpenGL ES 学习(十三) -离屏渲染FBO(截图)RBO, OES转 FBO

Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学习(三) – 绘制平面图形 Android OpenGL ES 学习(四) – 正交投屏 Android OpenGL ES 学习(五) – 渐变色 Android OpenGL ES 学习(六) – 使用 VBO、VAO 和 EB…

威胁和漏洞管理增强远程 IT 安全性

威胁和漏洞管理是保护组织设备和数据的主动方法。它可以帮助管理员识别漏洞并检查安全设置是否薄弱。通过使用此方法,可以在任何弱点成为安全漏洞之前对其进行修复。 对远程威胁和漏洞管理工具的需求 随着越来越多的员工远程工作,网络攻击的可能性也在…

基于Unity 3D实现的融合多元素风格游戏

完整资料进入【数字空间】查看——baidu搜索"writebug" 1.综合描述 1.1 产品背景 随着人们对游戏的追求,越来越多的优秀游戏被开发出来。目前,多风格元素游戏深受大众喜爱,例如绝地求生融合了 FPS 射击与生 存元素,守…

【软件分析/静态分析】chapter4 课程05/06 数据流分析—基础(Data Flow Analysis—Foundations)

🔗 课程链接:李樾老师和谭天老师的: 南京大学《软件分析》课程05(Data Flow Analysis - Foundations I)_哔哩哔哩_bilibili 目录 第四章 数据流分析——基础 4.1 从另一个视角看迭代算法(Iterative Algor…

【乌鲁木齐】基于ArcGIS、ENVI、InVEST、FRAGSTATS等多技术融合提升环境、生态、水文、土地、土壤、农业、大气等领域应用

【原文链接】:【乌鲁木齐】基于ArcGIS、ENVI、InVEST、FRAGSTATS等多技术融合提升环境、生态、水文、土地、土壤、农业、大气https://mp.weixin.qq.com/s?__bizMzU5NTkyMzcxNw&mid2247545692&idx1&sn1934aa8be717557c6c97c6b5e2a49151&chksmfe68f5…

web---text示例1

一、题目&#xff1a; <!-- 题目&#xff1a; 今日搜索热词 1、阿卡贝拉阿卡贝拉 (意大利: Acappella )即无伴奏合唱。 其起源可追溯至中世纪的教会音乐&#xff0c;当时的教会音乐只以人声清唱&#xff0c;并不应用乐器。 音频示例:阿卡贝拉.千与千寻2、翻唱“翻唱”…

Windows server防火墙如何设置阻止IP访问防火墙限制ip地址访问

无论是服务器还是本机电脑&#xff0c;安全都是非常重要的&#xff0c;一些安全软件设置后会拦截到一些异常IP&#xff0c;我们可以通过防火墙将异常IP加入黑名单&#xff0c;禁止访问&#xff0c;今天芳芳就和你们分享Windows防火墙如何设置IP禁止访问&#xff0c;希望可以帮助…

Redis通用命令数据结构

目录 Redis通用命令 官网查看不同命令https://redis.io/commands/ help命令&#xff1a;查询各种命令用法 keys命令&#xff1a;查看符合模板的所有key Redis的key结构 ​编辑 数据结构 String类型 String常用指令 Hash类型 Hash常用命令 List类型 List常用命令 …

Java框架之ORM

写在前面 本文看下Java操作数据库相关的内容。 1&#xff1a;JDBC 我们知道关系型数据库不止一种&#xff0c;像MySQL&#xff0c;Oracle&#xff0c;db2&#xff0c;PostgreSQL,sql server等&#xff0c;为了规范对这些不同数据的连接&#xff0c;数据的CRUD操作&#xff0…

Spring Boot 中的请求映射是什么,如何使用

Spring Boot 中的请求映射是什么&#xff0c;如何使用 Spring Boot 是一个快速开发 Spring 应用程序的框架&#xff0c;它可以帮助开发者快速搭建一个完整的 Web 应用程序。在 Spring Boot 中&#xff0c;请求映射&#xff08;Request Mapping&#xff09;是一个重要的概念&am…

Element 时间选择器 el-time-picker 禁用 秒 选项

文章目录 默认格式 HH:mm:ss禁用 秒 选项el-time-picker 设置日期和时间组合 默认格式 HH:mm:ss 时间选择器 format 标签默认为 HH:mm:ss <el-time-picker is-range v-model"value" range-separator"-" format"HH:mm:ss" start-placeholder…

openfeign的几种实现方式

第一种&#xff1a; 假如A 服务调用B服务的某个方法&#xff0c;如果不建立新的feign模块&#xff0c;可以进行一下步骤 在调用者A中引入依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign&…

砷化镓微纳米器件的制造工艺条件

引言 与硅基器件相比&#xff0c;III-V半导体具有更高的电子迁移率和峰值速度&#xff0c;因此更适合光电子学以外的高性能应用。目前III-V材料的不同工艺技术仍然具有挑战性&#xff0c;需要进一步发展。ICP-RIE&#xff08;电感耦合等离子体反应性离子蚀刻&#xff09;蚀刻技…