如下是根据docker信息整理的思维导图

docker架构解析

docker的体系架构图

docker架构解析

docker体系架构详解

docker是client-server模式的运行的,用户通过Docker client与Docker daemon建立通信,并将请求发送给Docker daemo的API server,docker daemo根据请求的不同,将请求分发给不同的模块执行相应的工作。

docker通过driver模块实现对Docker容器执行环境的定制。需要创建容器时,可从docker registry中下载镜像,并通过镜像管理驱动graphdriver将下载的镜像以graph的形式存储在本地;当需要为Docker 容器创建网络环境时,通过网络管理驱动networkdriver创建和配置容器的网络环境;当需要限制Docker容器的运行资源和执行用户指令等操作时,则通过execdriver来执行。libcontainer是一个独立的容器管理包,netwokdriver和execdriver都通过libcontainer来实现对容器的操作,包括利用UTS,IPC,PID,Network,Mount,User等namespace API实现容器之间的资源隔离,利用group实现对容器的资源限制。当运行容器的命令执行完毕,一个实际的容器处于运行状态,该容器拥有独立的为文件系统,安全且互相隔离的运行环境。

docker模块简介

  • Docker daemon Docker daemon是Docker最核心的后台进程,他负责响应来自Docker client的请求,然后讲这些请求翻译成系统调用完成容器管理操作。该进程会在后台启动一个API Server,负责接收有Docker client发送的请求;接收到的请求将通过Docker daemo内部的一个路由分发调度,再由具体的函数执行请求。

  • Docker client Docker client是一个泛称,用来向指定的Docker daemon发送请求,执行容器相应的管理工作。它既可以是docker命令行工具,也可以是任何遵循了Docker API的客户端。

  • graph graph组件负责维护已下载的镜像信息记它们之间的关系,所以大部分Docker镜像相关的操作都由graph组建来完成,gfaph通过镜像“层”和每层的元数据来记录这些镜像的信息,用户发起的镜像管理操作最终都转换成了graph对这些层和元数据的操作。但正是因为这个原因,而且很多时候Docker操作都需要加载当前Docker daemon维护着的所有镜像信息,graph组件常常会成为性能瓶颈。

  • GraphDB Docker daemon通过GraphDB记录它所维护的所有容器(节点)以及他们之间的link关系(边),这也是为什么这里采用了一个图架构来保存这些数据。具体来说,GraphDB就是一个基于SQLite的简单版本的图形数据库,能够为调用者提供节点的增,删,遍历,连接,所有父子节点的查询操作。这些节点对应的就是一个容器,而节点的边就是一个Docker link关系。每创建一个容器,Docker deamon都会从GraphDB添加一个节点,而当我们为某个容器设置了link操作后,GraphDB就会为它创建一个父子关系。即一条边。显然,虽然名字很像但是GraphDB和graph没有任何关系

  • driver Dcoker daemon负责将用户请求转译成系统调用,进而创建和管理容器的核心进程。在具体的实现过程中,为了将具体的调用抽象成统一的接口方便调用者使用,Docker将这些操作分类成容器管理驱动,网络管理驱动,文件管理驱动3种,分别对应execdriver,networkdriver和graphdriver

  1. execdriver是对Linux操作系统的namespaces,cgroups,apparmor,SELinux等容器运行所需要的系统操作进行的二次封装,其本质类似于LXC,但功能更全面。这也是为什么LXC会作为execdriver的一种实现而存在。当然execdriver最主要的实现也是现在官方默认实现是Docker官方编写的libcontainer库。

  2. networkdriver是对容器网络环境操作所进行的封装。对容器来说,网络设备的配置相对比较独立,并且应该允许用户进行更多的配置,所以在Docker中,这一部分是单独作为一个driver来实现的。这些操作包括创建容器通信所需要的网络,容器的network namespaces,这个网络所需的虚拟网卡,分配通信所需的IP,服务访问的端口和容器与宿主机之间的端口映射,设置hosts,resolv.conf,iptables等。

  3. graphdriver是所有与容器镜像相关操作的最终执行者。graphDriver会在Docker工作目录下维护一组与镜像层对应的目录,并记下容器与镜像之间关系等元数据。这样,用户对镜像的操作最终会被映射成对这些目录文件以及元数据的增删改查,从而屏蔽掉不同文件存储实现对于上层调用者的影响。目前Docker已经支持的文件存储实现包括aufs,btrfs,devicemapper,overlay和vfs。

转载于:https://my.oschina.net/baijuminglu/blog/1590004

相关文章:

  • 2021-10-24
  • 2021-09-19
  • 2022-12-23
  • 2021-08-11
  • 2021-11-20
  • 2021-12-30
猜你喜欢
  • 2021-07-14
  • 2021-10-06
  • 2021-11-21
  • 2021-04-10
  • 2022-12-23
  • 2021-11-21
相关资源
相似解决方案