加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 移动互联 > 正文

Docker底层原理及源码分析 Docker 架构

发布时间:2019-10-18 09:33:26 所属栏目:移动互联 来源:青峰科技
导读:媒介 Docker 简介 Docker 是 Docker 公司开源的一个基于轻量级假造化技能的容器引擎项目, 整个项目基于 Go 说话开拓,并遵从 Apache 2.0 协议。今朝,Docker 可以在容器内部快速自动化陈设应用,并可以通过内核假造化技能(namespaces 及 cgroups 等)来提供

正是因为 libcontainer 的存在,Docker 可以直接挪用 libcontainer,而最终哄骗容器的 namespace、cgroups、apparmor、收集装备以及防火墙法则等。这一系列操纵的完成都不必要依靠 LXC 可能其他包。libcontainer 架构如图 4.7:

Docker底层道理及源码说明 Docker 架构

libcontainer 表示图

其它,libcontainer 提供了一整套尺度的接口来满意上层对容器打点的需求。可能说,libcontainer 屏障了 Docker 上层对容器的直接打点。又因为 libcontainer 行使 Go 这种跨平台的说话开拓实现,且自己又可以被上层多种差异的编程说话会见,因此很难说,将来的 Docker 就必然会牢牢地和 Linux 绑缚在一路。而于此同时,Microsoft 在其闻名云计较平台 Azure 中,也添加了对 Docker 的支持,可见 Docker 的开放水平与业界的火热度。

暂不谈 Docker,因为 libcontainer 的成果以及其自己与体系的松耦合特征,很有也许会在其他以容器为原型的平台呈现,同时也很有也许催生出云计较规模全新的项目。

4.7 Docker container

Docker container(Docker 容器)是 Docker 架构中处事交付的最终浮现情势。

Docker 凭证用户的需求与指令,订制响应的 Docker 容器:

用户通过指定容器镜像,使得 Docker 容器可以自界说 rootfs 等文件体系;

用户通过指定计较资源的配额,使得 Docker 容器行使指定的计较资源;

用户通过设置收集及其安详计策,使得 Docker 容器拥有独立且安详的收集情形;

用户通过指定运行的呼吁,使得 Docker 容器执行指定的事变。

Docker 容器表示图如图 4.8:

Docker底层道理及源码说明 Docker 架构

图 4.8 Docker 容器表示图

5 Docker 运行案例说明

上一章节着重于 Docker 架构中各个部门的先容。本章的内容,将以串联 Docker 各模块来扼要说明,说明原型为 Docker 中的 docker pull 与 docker run 两个呼吁。

5.1 docker pull

docker pull 呼吁的浸染为:从 Docker Registry 中下载指定的容器镜像,并存储在当地的 Graph 中,以备后续建设 Docker 容器时的行使。docker pull 呼吁执行流程如图 5.1。

Docker底层道理及源码说明 Docker 架构

图 5.1 docker pull 呼吁执行流程表示图

如图,图中标志的赤色箭头暗示 docker pull 呼吁在提倡后,Docker 所做的一系列运行。以下一一说明这些步调。

(1) Docker Client 接管 docker pull 呼吁,理会完哀求以及网络完哀求参数之后,发送一个 HTTP 哀求给 Docker Server,HTTP 哀求要领为 POST,哀求 URL 为"/images/create? "+"xxx";

(2) Docker Server 接管以上 HTTP 哀求,并交给 mux.Router,mux.Router 通过 URL 以及哀求要领来确定执行该哀求的详细 handler;

(3) mux.Router 将哀求路由分发至响应的 handler,详细为 PostImagesCreate;

(4) 在 PostImageCreate 这个 handler 之中,一个名为"pull"的 job 被建设,并开始执行;

(5) 名为"pull"的 job 在执行进程中,执行 pullRepository 操纵,即从 Docker Registry 中下载响应的一个可能多个 image;

(6) 名为"pull"的 job 将下载的 image 交给 graphdriver;

(7) graphdriver 认真将 image 举办存储,一方建设 graph 工具,另一方面在 GraphDB 中记录 image 之间的相关。

5.2 docker run

docker run 呼吁的浸染是在一个全新的 Docker 容器内部运行一条指令。Docker 在执行这条呼吁的时辰,所做事变可以分为两部门:第一,建设 Docker 容器所需的 rootfs;第二,建设容器的收集等运行情形,并真正运行用户指令。因此,在整个执行流程中,Docker Client 给 Docker Server 发送了两次 HTTP 哀求,第二次哀求的提倡取决于第一次哀求的返回状态。Docker run 呼吁执行流程如图 5.2。

Docker底层道理及源码说明 Docker 架构

图 5.2 docker run 呼吁执行流程表示图

如图,图中标志的赤色箭头暗示 docker run 呼吁在提倡后,Docker 所做的一系列运行。以下一一说明这些步调。

(1) Docker Client 接管 docker run 呼吁,理会完哀求以及网络完哀求参数之后,发送一个 HTTP 哀求给 Docker Server,HTTP 哀求要领为 POST,哀求 URL 为"/containers/create? "+"xxx";

(2) Docker Server 接管以上 HTTP 哀求,并交给 mux.Router,mux.Router 通过 URL 以及哀求要领来确定执行该哀求的详细 handler;

(3) mux.Router 将哀求路由分发至响应的 handler,详细为 PostContainersCreate;

(4) 在 PostImageCreate 这个 handler 之中,一个名为"create"的 job 被建设,并开始让该 job 运行;

(5) 名为"create"的 job 在运行进程中,执行 Container.Create 操纵,该操纵必要获取容器镜像来为 Docker 容器建设 rootfs,即挪用 graphdriver;

(6) graphdriver 从 Graph 中获取建设 Docker 容器 rootfs 所必要的全部的镜像;

(7) graphdriver 将 rootfs 全部镜像,加载安装至 Docker 容器指定的文件目次下;

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读