概述
主要介绍码头工人的技术框架及其组成的各种模块。
技术架构
distribution负责与docker注册表交互,上传bath mirror和v2注册表相关的源数据
registry负责docker注册表相关的验证、镜像查找、镜像验证和管理注册表镜像以及其他交互操作。
image负责与镜像源数据相关的存储和查找,镜像层的索引和查找,以及与镜像tar包相关的导入和导出操作。
reference负责存储所有本地镜像的存储库和标记名,并维护与镜像id的映射关系。
layer模块负责添加、删除和修改与镜像层和容器层相关的源数据,并负责将镜像层的添加、删除和修改映射到实际存储镜像层文件的graphdriver模块。
graghdriver是与容器镜像相关的所有操作的执行者。
1、docker client
docker客户端是用户用来在docker架构中与docker守护程序建立通信的客户端。用户使用的可执行文件是docker,许多管理容器的请求可以通过Docker命令行工具启动。
docker客户端发送容器管理请求,docker守护程序接受并处理该请求。当码头工人客户端接收到返回的请求并相应简单地处理它时,码头工人客户端的完整生命周期结束。当需要继续发送容器管理请求时,用户必须再次通过码头可执行文件创建码头客户。
2、docker daemon
docker守护程序是驻留在docker架构后台的系统进程。它的功能是接收和处理码头客户发送的请求。守护进程在后台启动服务器,服务器负载接受docker客户端发送的请求。接受请求后,服务器通过路由和分发调度找到相应的处理程序来执行请求。用于
docker守护程序启动的可执行文件也是docker,这与用于docker客户端启动的可执行文件docker相同。当docker命令被执行时,docker守护程序和docker客户端通过传入的参数来区分。
3、docker server
docker服务器在docker架构中专门为docker客户机的服务器服务。该服务器的功能是接受和发送码头客户发送的请求。架构图如下:
在Docker启动期间,一个多路复用器。路由器是通过Gorilla/MUX包(对Golang类库的分析)创建的,以提供请求的路由功能。在戈兰,大猩猩/多路复用器是一个强大的网址路由器和调度分配器。许多路由项已经被添加到多路复用器路由器中。每个路由项由三部分组成:HTTP请求方法(PUT、POST、GET或DELETE)、网址和处理程序。
4、engine
Engine是Docker架构中的运行引擎,也是Docker的核心模块。它扮演码头集装箱仓库的角色,并通过执行作业来管理这些集装箱。
在引擎数据结构的设计和实现过程中,有一个处理程序对象。处理程序对象存储许多特定作业的处理程序处理访问。例如,如果引擎的处理程序对象之一是:{“创建”:守护程序。ContainerCreate},然后当名为“Create”的作业运行时,守护进程的处理程序. ContainerCreate被执行。
5、job
作业可被视为码头架构中引擎内最基本的工作执行单元。码头工人能做的每一项工作都可以抽象为一项工作。例如,在容器内运行一个进程,这是一个作业;创建一个新的容器,这是一个工作,从互联网上下载一个文档,这是一个工作;这包括为服务器创建一个服务于超文本传输协议的应用编程接口,这也是一项工作,等等,正如在文档服务器部分前面提到的。
Job的设计者将作业设计成类似于Unix进程。例如:作业有名称、参数、环境变量、标准输入和输出、错误处理、返回状态等。
6、docker registry
Docker Registry是一个存储容器图像的仓库。容器映像是在创建容器时为初始化容器而加载的文件模式和目录。
在Docker的操作过程中,Docker守护进程将与Docker注册表通信,实现搜索镜像、下载镜像和上传镜像三种功能。与这三个功能相对应的职务名称是“搜索”、“拉动”和“推动”。
其中,在码头工人架构中,码头工人可以使用公共码头工人注册中心(public Docker Registry),该注册中心被称为码头工人中心(Docker Hub)。因此,当获取容器图像文件时,码头工人必须通过互联网访问码头工人中心。同时,Docker还允许用户建立本地私有的Docker注册表(Registry),这可以确保容器图像的获取在内部网中完成。
7、Graph
Graph在Docker体系结构中充当下载容器映像的保管者和下载容器映像之间关系的记录器。一方面,图形存储带有版本信息的本地文件系统映像;另一方面,GraphDB记录所有文件系统映像之间的关系。图形的架构如下:
其中,图形数据库(GraphDB)是一个建立在SQLite上的小型图形数据库,它实现了节点的命名和节点间关联关系的记录。它只实现了大多数图形数据库拥有的一个小子集,但是提供了一个简单的接口来表示节点之间的关系。
同时,在图形的本地目录中,关于每个容器图像,具体存储的信息包括:容器图像的元数据、容器图像的大小信息以及容器图像表示的具体根。
8、driver
Driver是Docker架构中的驱动程序模块。通过驱动程序,码头工人可以定制码头工人容器的执行环境。在码头工人操作的生命周期中,并非用户的所有操作都是针对码头工人容器的管理。此外,还有码头工人操作信息的获取、图表的存储和记录等。因此,为了区分Docker容器的管理和Docker守护程序的内部业务逻辑,驱动程序层驱动程序被设计来接管所有这些请求。
9、libcontainer
libcontainer是一个使用Docker架构中的Go语言设计和实现的库。设计的初衷是库可以直接访问内核中与容器相关的应用编程接口,而不依赖于任何依赖关系。
由于libcontainer的存在,Docker可以直接调用libcontainer,并最终操纵容器的名称空间、cgroups、apparmor、网络设备、防火墙规则等。这一系列行动的完成不取决于LXC或其他一揽子计划。libcontainer架构如下:
此外,libcontainer提供了一组标准接口来满足上层对容器管理的要求。换句话说,libcontainer阻止了doc上层对容器的直接管理。由于libcontainer是使用跨平台语言Go开发和实现的,它本身可以被上层的许多不同编程语言访问,所以很难说未来的文档一定会与Linux紧密结合。与此同时,微软也在其著名的云计算平台Azure中增加了对Docker的支持,这显示了Docker的开放性和行业的普及性。
10、docker container
Docker Container(Docker Container)是Docker架构中服务交付的最终实施例。
Docker根据用户的要求和说明定制相应的Docker容器:
用户可以通过指定容器镜像来定制文件系统,例如根文件系统;用户通过指定计算资源的配额使码头集装箱使用指定的计算资源;通过配置网络及其安全策略,用户使Docker容器具有独立和安全的网络环境。用户通过指定要运行的命令使Docker容器执行指定的工作。
极牛网精选文章《一文看懂Docker容器技术架构及其中的各个模块》文中所述为作者独立观点,不代表极牛网立场。如若转载请注明出处:https://geeknb.com/4533.html