当前位置:首页 > 经验 >

容器docker怎么理解(docker容器技术的理解)

来源:原点资讯(www.yd166.com)时间:2022-11-09 08:09:17作者:YD166手机阅读>>

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

若Docker Client通过HTTP的形式访问Docker Daemon,创建完mux.Router之后,Docker将Server的监听地址以及mux.Router作为参数,创建一个httpSrv=http.Server{},最终执行httpSrv.Serve为请求服务。

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

需要注意的是:Docker Server的运行在Docker的启动过程中,是靠一个名为”serveapi”的job的运行来完成的。原则上,Docker Server的运行是众多job中的一个,但是为了强调Docker Server的重要性以及为后续job服务的重要特性,将该”serveapi”的job单独抽离出来分析,理解为Docker Server。

4、engine

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

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

5、job

一个Job可以认为是Docker架构中Engine内部最基本的工作执行单元。Docker可以做的每一项工作,都可以抽象为一个job。例如:在容器内部运行一个进程,这是一个job;创建一个新的容器,这是一个job,从Internet上下载一个文档,这是一个job;包括之前在Docker Server部分说过的,创建Server服务于HTTP的API,这也是一个job,等等。

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

6、docker registry

Docker Registry是一个存储容器镜像的仓库。而容器镜像是在容器被创建时,被加载用来初始化容器的文件架构与目录。

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

其中,在Docker架构中,Docker可以使用公有的Docker Registry,即大家熟知的Docker Hub,如此一来,Docker获取容器镜像文件时,必须通过互联网访问Docker Hub;同时Docker也允许用户构建本地私有的Docker Registry,这样可以保证容器镜像的获取在内网完成。

7、Graph

Graph在Docker架构中扮演已下载容器镜像的保管者,以及已下载容器镜像之间关系的记录者。一方面,Graph存储着本地具有版本信息的文件系统镜像,另一方面也通过GraphDB记录着所有文件系统镜像彼此之间的关系。

Graph的架构如下:

容器docker怎么理解,docker容器技术的理解(9)

其中,GraphDB是一个构建在SQLite之上的小型图数据库,实现了节点的命名以及节点之间关联关系的记录。它仅仅实现了大多数图数据库所拥有的一个小的子集,但是提供了简单的接口表示节点之间的关系。

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

8、driver

Driver是Docker架构中的驱动模块。通过Driver驱动,Docker可以实现对Docker容器执行环境的定制。由于Docker运行的生命周期中,并非用户所有的操作都是针对Docker容器的管理,另外还有关于Docker运行信息的获取,Graph的存储与记录等。因此,为了将Docker容器的管理从Docker Daemon内部业务逻辑中区分开来,设计了Driver层驱动来接管所有这部分请求。

在Docker Driver的实现中,可以分为以下三类驱动:graphdriver、networkdriver和execdriver。

graphdriver主要用于完成容器镜像的管理,包括存储与获取。即当用户需要下载指定的容器镜像时,graphdriver将容器镜像存储在本地的指定目录;同时当用户需要使用指定的容器镜像来创建容器的rootfs时,graphdriver从本地镜像存储目录中获取指定的容器镜像。

在graphdriver的初始化过程之前,有4种文件系统或类文件系统在其内部注册,它们分别是aufs、btrfs、vfs和devmapper。而Docker在初始化之时,通过获取系统环境变量”DOCKER_DRIVER”来提取所使用driver的指定类型。而之后所有的graph操作,都使用该driver来执行。

graphdriver的架构如下:

容器docker怎么理解,docker容器技术的理解(10)

networkdriver的用途是完成Docker容器网络环境的配置,其中包括Docker启动时为Docker环境创建网桥;Docker容器创建时为其创建专属虚拟网卡设备;以及为Docker容器分配IP、端口并与宿主机做端口映射,设置容器防火墙策略等。networkdriver的架构如下:

容器docker怎么理解,docker容器技术的理解(11)

execdriver作为Docker容器的执行驱动,负责创建容器运行命名空间,负责容器资源使用的统计与限制,负责容器内部进程的真正运行等。在execdriver的实现过程中,原先可以使用LXC驱动调用LXC的接口,来操纵容器的配置以及生命周期,而现在execdriver默认使用native驱动,不依赖于LXC。

具体体现在Daemon启动过程中加载的ExecDriverflag参数,该参数在配置文件已经被设为”native”。这可以认为是Docker在1.2版本上一个很大的改变,或者说Docker实现跨平台的一个先兆。execdriver架构如下:

容器docker怎么理解,docker容器技术的理解(12)

栏目热文

docker容器是解决什么的(docker容器缺点)

docker容器是解决什么的(docker容器缺点)

现代软件开发的目标之一是应用程序既能运行在同一主机或集群上,又能彼此隔离,这样它们就不会过度干扰彼此的操作或维护,但由于...

2022-11-09 08:01:54查看全文 >>

docker容器基本概念(docker容器技术基本知识点)

docker容器基本概念(docker容器技术基本知识点)

自学了几天DDocker,就干脆总结一下,也顺带增加一篇《30分钟入门系列》。网上能够查到的对于Docker的定义我就不...

2022-11-09 07:58:30查看全文 >>

容器docker缺点(docker容器云缺点)

容器docker缺点(docker容器云缺点)

在实际的软件开发过程中,我们需要多的环境:如开发环境、测试环境、沙箱环境、自动化环境、预发环境、生产环境……这么多的环境...

2022-11-09 07:28:34查看全文 >>

容器docker怎么用(docker容器介绍)

容器docker怎么用(docker容器介绍)

一.什么是docker?百度百科:Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移...

2022-11-09 07:53:42查看全文 >>

docker容器有哪些(docker容器的特点与功能)

docker容器有哪些(docker容器的特点与功能)

概述今天主要简单介绍下Docker的技术架构及其中组成的各个模块。技术架构distribution 负责与docker ...

2022-11-09 07:43:27查看全文 >>

docker容器和镜像什么意思(docker镜像和容器怎么用)

docker容器和镜像什么意思(docker镜像和容器怎么用)

技术头条:干货、简洁、多维全面。更多云计算精华知识尽在眼前,get要点、solve难题,统统不在话下!作为云计算的当红明...

2022-11-09 07:57:05查看全文 >>

docker容器含义(docker容器开发是啥)

docker容器含义(docker容器开发是啥)

在容器技术没有出来之前,开发运维在进行交付的时候经常出现,开发环境执行正常,生产环境部署运行出现问题,很多原因就是因为环...

2022-11-09 07:59:29查看全文 >>

docker容器干嘛用(docker容器使用缺点)

docker容器干嘛用(docker容器使用缺点)

Java识堂,一个高原创,高收藏,有干货的微信公众号,一起成长,一起进步,欢迎关注Docker是什么?Docker是一个...

2022-11-09 07:50:25查看全文 >>

docker与容器的关系(docker中的镜像和容器是什么)

docker与容器的关系(docker中的镜像和容器是什么)

容器化是解决传统虚拟化带来的障碍的解决方案。自问世以来,虚拟机(VM)使公司能够做到事半功倍。单个物理设备可以通过虚拟机...

2022-11-09 07:54:20查看全文 >>

docker容器技术的特点有哪些(docker容器化有什么用)

docker容器技术的特点有哪些(docker容器化有什么用)

什么是容器? 一句话概括容器:容器就是将软件打包成标准化单元,以用于开发、交付和部署。 容器镜像是轻量的...

2022-11-09 08:14:53查看全文 >>

文档排行