Docker架构浅析

1.传统虚拟机与容器比较

Docker架构浅析_第1张图片        传统虚拟机使用了 Hypervisor/VMM(虚拟机监控器),它允许多个操作系统共享一个或多个 CPU,由于虚拟机中包括全套的 OS,调度与资源占用都非常重。

        容器(container)是一种更加轻量级的操作系统虚拟化技术,它将应用程序,依赖包,库文件等运行依赖环境打包到标准化的镜像中,通过容器引擎提供进程隔离、资源可限制的运行环境,实现应用与 OS 平台及底层硬件的解耦。

2.Docker架构

Docker架构浅析_第2张图片

容器客户端(Client)

        Docker 的客户端,其主要任务是接收并解析用户的操作指令和执行参数,收集所需要的配置信息,根据相应的 Docker 命令通过 HTTP 或 REST API 等方式与 Docker daemon(守护进程)进行交互,并将处理结果返回给用户,实现 Docker 服务使用与管理。

容器管理引擎进程(Host)

        容器引擎进程是 Docker 架构的核心,包括运行 Docker Daemon(守护进程)、Image(镜像)、驱动(Driver)、Libcontainer(容器管理)等。

容器镜像仓库(Registry)

        Registry 就是存储容器镜像的仓库,在容器的运行过程中,Client 在接受到用户的指令后转发给 Host 下的 Daemon,它会通过网络与 Registry 进行通信,例如查询镜像(search),下载镜像(pull),推送镜像(push)等操作。

Docker Daemon

        Docker Daemon 负责监听客户端请求,然后执行后续的对应逻辑,还能管理 Docker 对象(容器、镜像、网络、磁盘等)。

        我们可以把 Daemon 分为三大部分,分别是 Server、Job、Engine。

        Server 负责接收客户端发来的请求(由 Daemon 在后台启动 Server)。接受请求以后 Server 通过路由与分发调度找到相应的 Handler 执行请求,然后与容器镜像仓库交互(查询、拉取、推送)镜像并将结果返回给 Docker Client。

        Engine 是 Daemon 架构中的运行引擎,同时也是 Docker 运行的核心模块。Engine 扮演了 Docker container 存储仓库的角色。

        Engine 执行的每一项工作,都可以拆解成多个最小动作——Job,这是 Engine 最基本的工作执行单元。其实,Job 不光能用在 Engine 内部,Docker 内部每一步操作,都可以抽象为一个 Job。Job 负责执行各项操作时,如储存拉取的镜像,配置容器网络环境等,会使用下层的 Driver(驱动)来完成。

Docker Driver

        Driver 顾名思义就是 Docker 中的驱动。设计驱动这一层依旧是解耦,将容器管理的镜像、网络和隔离执行逻辑从 Docker Daemon 的逻辑中剥离。

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

        graphdriver 负责容器镜像的管理,主要就是镜像的存储和获取,当镜像下载的时候,会将镜像持久化存储到本地的指定目录;

        networkdriver 主要负责 Docker 容器网络环境的配置,如 Docker 运行时进行 IP 分配端口映射以及启动时创建网桥和虚拟网卡;

        execdriver 是Docker 的执行驱动,通过操作 Lxc 或者 libcontainer 实现资源隔离。它负责创建管理容器运行命名空间、管理分配资源和容器内部真实进程的运行;

libcontainer

        execdriver,通过调用 libcontainer 来完成对容器的操作,加载容器配置 container,继而创建真正的 Docker 容器。libcontainer 提供了访问内核中和容器相关的 API,负责对容器进行具体操作。容器可以创建出一个相对隔离的环境,就容器技术本身来说,容器的核心部分是利用了我们操作系统内核的虚拟化技术。

你可能感兴趣的:(docker,架构)