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

这篇具有很好参考价值的文章主要介绍了docker 的整体架构及各模块组件 《深入docker底层原理》。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.Docker 整体架构

Docker 是一个 C/S 模式的架构,后端是一个松耦合架构,模块各司其职。
docker 的整体架构及各模块组件 《深入docker底层原理》,docker,docker,架构,eureka
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 的整体架构及各模块组件 《深入docker底层原理》,docker,docker,架构,eureka

Docker Server 架构图:

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

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 架构图:

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

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 架构图:

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

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

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

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

Networkdriver
Networkdriver 架构图:

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

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

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

Execdriver
Execdriver 架构图:

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

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

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

2.7 Libcontainer 「函数库」

Libcontainer 架构图:

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

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

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

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

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

Docker Container 架构:

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

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

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

用户通过指定容器镜像,使得 Docker 容器可以自定义 rootfs 等文件系统。
用户通过指定计算资源的配额,使得 Docker 容器使用指定的计算资源。
用户通过配置网络及其安全策略,使得 Docker 容器拥有独立且安全的网络环境。
用户通过指定运行的命令,使得 Docker 容器执行指定的工作。文章来源地址https://www.toymoban.com/news/detail-529493.html

到了这里,关于docker 的整体架构及各模块组件 《深入docker底层原理》的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • AUTOSAR COM(整体架构和模块交互)

    -返回总目录- 一、COM层主要功能和架构(参考MICROSAR COM Technical Reference CFG5 Version 9.00.01)《TechnicalReference_Com.pdf》 1.1 COM模块的主要功能: 为上层提供信号接口(无符号/有符号) I-PDUs 中信号的打包和解包 处理传输模式 I-PDUs 间传输最小间隔 I-PDU组的通信控制 接收的deadline监控

    2024年02月10日
    浏览(49)
  • 【手撕Spring - 深入篇】Spring 的设计理念和整体架构

    👉 博主介绍 : 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主 ⛪️ 个人社区:个人社区 💞 个人主页:个人主页 🙉 专栏地址: ✅ 带你手撕 Spring 🙉八股文专题:剑指大厂,

    2024年02月14日
    浏览(40)
  • 【深入浅出Spring Security(一)】Spring Security的整体架构

    这篇博客所述主要是在读《 深入浅出Spring Security 》途中所做的笔记(之前有学Spring Security,但了解的比较浅,所以想着看这本书深入一点点,这都是因为上次一个bug调了我几天) 这本书的 pdf 网盘链接可通过微信扫下方公众号私信\\\"深入浅出Spring Security\\\"即可获取。 在 Spring

    2024年02月06日
    浏览(88)
  • RPC核心原理(整体架构/调用过程)

    Server: Provider ,暴露服务,服务提供方 Client: Consumer ,服务消费,调用远程服务 Registry:服务注册与发现 RPC的调用过程如下: 第一步:server会将他需要暴露的服务以及他的地址信息注册到Registry这一注册中心。 第二步:client通过注册中心一只关注它所需要的服务在哪里,如果此时

    2024年02月09日
    浏览(42)
  • 万字长文深入理解Docker镜像分层原理、容器数据卷、网络通信架构(Docker系列第2章,共3章)

    在执行docker pull时,会发现多个Pull complete 字样,就能体现分层,如果是一个文件,只会有一个Pull complete 。 概念:文件系统是计算机系统中用于组织和管理数据存储的一种方式。它定义了数据如何存储、命名、访问和修改的方式。 举例:如Windows自带的NTFS、FAT32、EXFAT,和L

    2024年04月14日
    浏览(34)
  • Redis底层原理深入学习

    一、基本类型及底层实现  1.String 1) 使用场景: 简单字符串存储、分布式锁、计数器、全局唯一ID 2) 数据结构: C语言中String用char[]表示,源码中用SDS封装char[],这是Redis存储的最小单元,一个SDS最大可以存储512M信息。  Redis对SDS再次封装成RedisObject,核心作用有两个: ①

    2024年02月08日
    浏览(41)
  • kafka发布订阅原理,Java项目开发如何设计整体架构

    源码阅读,最核心有三点:技术基础+强烈的求知欲+耐心。 1.1 设计模式(45设计模式:介绍+优缺点+应用实例+源代码+解决问题) 1.2 Spring复习大纲:依赖注入Ioc+Beans+注解+数据访问+AOP+MVC等 1.3 Spring全家桶笔记:Spring+Spring Boot+Spring Cloud+Spring MVC 面试题(含解析)+学习书籍+学习

    2024年03月12日
    浏览(61)
  • 深入剖析 Git 对象底层原理

    在我们日常使用 Git 时,通常的操作是: 在写完一段代码后,执行 git add 命令,将这段代码添加到暂存区中 然后再执行 git commit 和 git push 命令,将 本地 Git 版本库中的提交同步到服务器中的版本库中 Git 在中间做了什么,它如何存储不同的文件和内容,以及如何区分不同分支

    2024年01月20日
    浏览(45)
  • 【大数据入门核心技术-ElasticSearch】(二)ElasticSearch整体架构和重要工作原理

    目录 一、整体架构图 二、重要工作原理 1、文档写入原理 2、文档检索原理

    2024年02月05日
    浏览(43)
  • 深入理解JVM虚拟机第二篇:虚拟机概念和JVM整体架构以及字节码的执行路线

      😉😉 学习交流群: ✅✅1:这是孙哥suns给大家的福利! ✨✨2:我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 🥭🥭3:QQ群:583783824   📚📚  工作微信:BigTreeJava 拉你进微信群,免费领取! 🍎🍎4:本文章内容出自上述:Spring应用课程!💞💞

    2024年02月09日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包