Docker工作原理

Docker架构的工作原理

对Docker不太熟悉的朋友可以参考博文:Docker简介及安装配置详解
首先Docker是基于Go语言进行开发的,而且是基于C/S结构进行工作的,如图:

从图中可以看出:
(1)用户是使用Docker Client与Docker Daemon建立通信,并发送请求给后者;
(2)Docker Daemon作为Docker架构中的主体部分,首先提供Server的功能使其可以接受Docker Client的请求;而后Engine(引擎)执行Docker内部的一系列工作,每一项工作都是以一个Job的形式存在;
(3)Job的运行过程中,当需要容器镜像时,则从Docker Registry(docker仓库)中下载镜像,并通过graphdriver(镜像管理驱动)将下载镜像以Graph(图像)的形式存储;当需要为Docker创建网络环境时,通过networkdriver(网络管理驱动)创建并配置Docker容器网络环境;当需要限制Docker容器运行资源或执行用户指令等操作时,则通过execdriver(执行管理驱动)来完成。
(4)libcontainer(容器库)是一项独立的容器管理包,networkdriver以及execdriver都是通过libcontainer来实现具体对容器进行的操作。当执行完运行容器的命令后,一个实际的Docker容器就处于运行状态,该容器拥有独立的文件系统,独立并且安全的运行环境等。

各个模块的功能

(1)docker client

docker client是docker架构中用户用来和docker daemon建立通信的客户端,用户可以通过dicker命令行工具发起众多管理docker container的请求。

docker client发送容器管理请求后,由docker daemon接受并处理请求,当docker client接收到返回的请求相应并简单处理后,docker client一次完整的生命周期就已经结束了。

(2)docker daemon

docker daemon 是docker架构中一个常驻在后台的系统进程,功能就是:接收处理docker client发送的请求。该守护进程在后台启动一个server,server负载接受docker client发送的请求;接受请求后,server通过路由与分发调度,找到相应的handler(处理器)来执行请求。

(3)docker server

 docker server在docker架构中是专门服务于docker client的server,该server的功能就是:接受并调度分发docker client发送的请求。

(4)engine

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

(5)job

一个Job可以认为是Docker架构中Engine内部最基本的工作执行单元,Docker可以做的每一项工作,都可以抽象为一个job。

(6)docker registry

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

(7)Graph

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

(8)driver

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

在Docker Driver的实现中,可以分为以下三类驱动:

  • graphdriver主要用于完成容器镜像的管理,包括存储与获取。即当用户需要下载指定的容器镜像时,graphdriver将容器镜像存储在本地的指定目录;同时当用户需要使用指定的容器镜像来创建容器的rootfs时,graphdriver从本地镜像存储目录中获取指定的容器镜像;
  • networkdriver的用途是完成Docker容器网络环境的配置,其中包括Docker启动时为Docker环境创建网桥;Docker容器创建时为其创建专属虚拟网卡设备;以及为Docker容器分配IP、端口并与宿主机做端口映射,设置容器防火墙策略等;
  • execdriver作为Docker容器的执行驱动,负责创建容器运行命名空间,负责容器资源使用的统计与限制,负责容器内部进程的真正运行等。在execdriver的实现过程中,原先可以使用LXC驱动调用LXC的接口,来操纵容器的配置以及生命周期,而现在execdriver默认使用native驱动,不依赖于LXC。具体体现在Daemon启动过程中加载的ExecDriverflag参数,该参数在配置文件已经被设为”native”;

(9)libcontainer

libcontainer是Docker架构中一个使用Go语言设计实现的库,设计初衷是希望该库可以不依靠任何依赖,直接访问内核中与容器相关的API。正是由于libcontainer的存在,Docker可以直接调用libcontainer,而最终操纵容器的namespace、cgroups、apparmor、网络设备以及防火墙规则等。

(10)docker container

Docker container(Docker容器)是Docker架构中服务交付的最终体现形式。Docker按照用户的需求与指令,订制相应的Docker容器。用户通过指定容器镜像,使得Docker容器可以自定义rootfs等文件系统; 用户通过指定计算资源的配额,使得Docker容器使用指定的计算资源; 用户通过配置网络及其安全策略,使得Docker容器拥有独立且安全的网络环境; 用户通过指定运行的命令,使得Docker容器执行指定的工作。

如果想对Docker有更加深入的研究可以参考博文:Docker架构原理及简单使用

————————————本文到此结束,感谢观看——————————————

原文地址:https://blog.51cto.com/14157628/2457873

时间: 2024-10-01 07:10:54

Docker工作原理的相关文章

Docker 工作原理及容器化简易指南

Docker 非常棒! 它使软件开发者无需担心配置和依赖性,在任何地方打包,发送和运行他们的应用程序.而在与 Kubernetes 相结合后,它使应用集群部署和管理变得更方便.这使得 Docker 深受软件开发者的喜爱,越来越多的开发者开始使用 Docker. 那么 Docker 到底是什么? 它是构建.测试.部署和发布容器化应用的平台.称其为平台是因为 Docker 其实是一套用于管理与容器相关的所有事物的工具.作为 Docker 的核心,接下来我们将深入探讨容器. 什么是容器? 原文地址:h

Docker Macvlan 介绍与工作原理

Docker Macvlan Network Macvlan Network:属于Docker的网络驱动. Macvlan Network:Docker主机网卡接口逻辑上分为多个子接口,每个子接口标识一个VLAN.容器接口直接连接Docker主机网卡接口,通过路由策略转发到另一台Docker主机. 工作原理解析 1.两边节点分别创建macvlan网络,并创建子网段. 2.docker0网卡会通过NET去访问外网. 3.容器内的eth0是由macvlan所在物理接口ens33创建的一个逻辑网口.

Docker Weave 介绍 or 工作原理

Docker Weave Network Weave在Docker主机之间实现Overlay网络,使用业界标准VXLAN封装,基于UDP传输,也可以加密传输. Weave Net创建一个连接多个Docker主机的虚拟网络,类似于一个以太网交换机,所有的容器都连接到这上面,互相通信. Weave Net由多个peer组成,Weave路由器运行不同Docker主机上,是一个用户空间的进程:每个peer都有一个名称,重启保持不变.它们通过TCP连接彼此,建立后交换拓扑信息. Weave Net可以在具

用一个实际例子理解Docker volume工作原理

要了解Docker Volume,首先我们需要理解Docker文件系统的工作原理.Docker镜像是由多个文件系统的只读层叠加而成.当一个容器通过命令docker run启动时,Docker会加载只读镜像层并在镜像栈顶部添加一个读写层.如果运行中的容器修改了现有的一个已经存在的文件,那该文件将会从读写层下面的只读层复制到读写层,但是该文件的只读版本依然存在,只不过已经被读写层中该文件的副本所隐藏. 当删除Docker容器,并通过该镜像重新启动时,之前在读写层的更改将会丢失.在Docker中,只读

kubelet工作原理

在调度这一步完成后,Kubernetes 就需要负责将这个调度成功的 Pod,在宿主机上创建出来,并把它所定义的各个容器启动起来.这些,都是 kubelet 这个核心组件的主要功能. kubelet 本身,也是按照“控制器”模式来工作的.它实际的工作原理,可以用如下所示的一幅示意图来表示清楚. kubelet 的工作核心,就是一个控制循环,即:SyncLoop(图中的大圆圈).而驱动这个控制循环运行的事件,包括四种: 1.Pod 更新事件: 2.Pod 生命周期变化: 3.kubelet 本身设

深入分析 Docker 镜像原理

摘要:近日, DaoCloud 软件工程师孙宏亮在 CSDN Container 微信群为大家带来了 Docker 镜像原理的深度分享,本次分享的重点是 Docker 镜像,分享的内容主要包含两个部分:1)Docker 镜像的基本知识:2)Dockerfile,Docker 镜像与 Docker 容器的关系. 嘉宾介绍:孙宏亮,硕士,浙江大学毕业,现为 DaoCloud 软件工程师,出版有<Docker 源码分析>,目前主要负责企业级容器云平台的研发工作.数年来一直从事云计算.PaaS 领域的

Android ListView工作原理完全解析(转自 郭霖老师博客)

原文地址:http://blog.csdn.net/guolin_blog/article/details/44996879 在Android所有常用的原生控件当中,用法最复杂的应该就是ListView了,它专门用于处理那种内容元素很多,手机屏幕无法展示出所有内容的情况.ListView可以使用列表的形式来展示内容,超出屏幕部分的内容只需要通过手指滑动就可以移动到屏幕内了. 另外ListView还有一个非常神奇的功能,我相信大家应该都体验过,即使在ListView中加载非常非常多的数据,比如达到

LVS集群之工作原理

  首先我们要了解LVS的工作机制: LVS里Director本身不响应请求,只是接受转发请求到后方,Realservers才是后台真正响应请求. LVS 工作原理基本类似DNAT,又不完全相像,它是一种四层交换,默认情况下通过用户请求的地址和端口来判断用户的请求,从而转发到后台真正提供服务的主机,而判断这种请求的是通过套接字来实现,所以四层就可以实现. 而且这个转发的过程对用户而言是透明的(简单的讲,就是用户访问DR的IP,而DR转发给RSS,而用户不知道这个过程) LVS的工作模式: 1.D

47 监控系统基础及zabbix介绍、zabbix工作原理及安装配置、zabbix on CentOS7、zabbix配置

02    zabbix工作原理及安装配置 配置环境 node1192.168.1.120CentOS6.7 node2192.168.1.121CentOS6.7 1.安装配置zabbix #安装前准备 [[email protected] ~]#yum -y install mysql-server mysq [[email protected] ~]# mysql mysql> CREATE DATABASE zabbix CHARACTER SET utf8; mysql> GRANT