Docker 架构及工作原理
创始人
2024-06-03 14:34:00
0

    • 一、Docker 概述
    • 二、Client 客户端
    • 三、Docker 引擎
    • 四、Image 镜像
    • 五、Container 容器
    • 六、镜像分层
      • 可写的容器层
    • 七、Volume 数据卷
    • 八、Registry 注册中心
    • 九、总结

一、Docker 概述

Docker 是一个开发、发布和运行应用程序的开放平台。Docker使您能够将应用程序与基础架构分离,以便快速交付软件。有了 Docker,你可以像管理应用程序一样管理你的基础设施。通过利用 Docker 快速发布、测试和部署代码的方法,您可以显著减少编写代码和在生产环境中运行它之间的延迟。

Docker 在运行时分为 Docker 引擎(服务端守护进程) 和 客户端工具,我们日常使用各种 docker 命令,其实就是在使用 客户端工具 与 Docker 引擎 进行交互。

在这里插入图片描述

二、Client 客户端

Docker 是一个客户端-服务器(C/S)架构程序。Docker 客户端只需要向 Docker 服务器或者守护进程发出请求,服务器或者守护进程将完成所有工作并返回结果。Docker 提供了一个命令行工具 Docker 以及一整套 RESTful API。你可以在同一台宿主机上运行 Docker 守护进程和客户端,也可以从本地的 Docker 客户端连接到运行在另一台宿主机上的远程 Docker 守护进程。

三、Docker 引擎

一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。
  
Docker 引擎是一个 客户端-服务器 应用程序,具有以下主要组件:

  • 一个服务器,它是一种称为守护进程(dockerd 命令)的长时间运行程序。
  • 一个 REST API,它指定程序可以用来与守护进程对话并指示它做什么的接口。
  • 一个命令行界面(CLI)客户端(docker命令)。
    在这里插入图片描述

CLI 使用Docker REST API通过脚本或直接CLI命令控制Docker守护进程或与之交互。
许多其他Docker应用程序使用底层API和CLI。

这个守护进程创建和管理 Docker 对象,如镜像、容器、网络和卷(images, containers, networks, and volumes)。

四、Image 镜像

什么是 Docker 镜像?简单的理解,Docker 镜像就是一个 Linux 的文件系统(Root FileSystem),这个文件系统里面包含可以运行在 Linux 内核的程序以及相应的数据。

通过镜像启动一个容器,一个镜像就是一个可执行的包,其中包括运行应用程序所需要的所有内容:包含代码,运行时间,库,环境变量和配置文件等。

Docker 把 App 文件打包成为一个镜像,并且采用类似多次快照的存储技术,可以实现:

  • 多个 App 可以共用相同的底层镜像(初始的操作系统镜像);
  • App 运行时的 IO 操作和镜像文件隔离;
  • 通过挂载包含不同配置/数据文件的目录或者卷(Volume),单个 App 镜像可以用来运行无数个不同业务的容器。

五、Container 容器

镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

Docker面向对象
镜像
容器对象

六、镜像分层

Docker 支持通过扩展现有镜像,创建新的镜像。实际上,Docker Hub 中 99% 的镜像都是通过在 base 镜像中安装和配置需要的软件构建出来的。
在这里插入图片描述

从上图可以看到,新镜像是从 base 镜像一层一层叠加生成的。每安装一个软件,就在现有镜像的基础上增加一层。

镜像分层最大的一个好处就是共享资源。比如说有多个镜像都从相同的 base 镜像构建而来,那么 Docker Host 只需在磁盘上保存一份 base 镜像;同时内存中也只需加载一份 base 镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享。

如果多个容器共享一份基础镜像,当某个容器修改了基础镜像的内容,比如 /etc 下的文件,这时其他容器的 /etc 是不会被修改的,修改只会被限制在单个容器内。这就是容器 Copy-on-Write 特性。

可写的容器层

当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。

在这里插入图片描述

所有对容器的改动 - 无论添加、删除、还是修改文件都只会发生在容器层中。只有容器层是可写的,容器层下面的所有镜像层都是只读的。

镜像层数量可能会很多,所有镜像层会联合在一起组成一个统一的文件系统。如果不同层中有一个相同路径的文件,比如 /a,上层的 /a 会覆盖下层的 /a,也就是说用户只能访问到上层中的文件 /a。在容器层中,用户看到的是一个叠加之后的文件系统。

文件操作说明
添加文件在容器中创建文件时,新文件被添加到容器层中。
读取文件在容器中读取某个文件时,Docker 会从上往下依次在各镜像层中查找此文件。一旦找到,立即将其复制到容器层,然后打开并读入内存。
修改文件在容器中修改已存在的文件时,Docker 会从上往下依次在各镜像层中查找此文件。一旦找到,立即将其复制到容器层,然后修改之。
删除文件在容器中删除文件时,Docker 也是从上往下依次在镜像层中查找此文件。找到后,会在容器层中记录下此删除操作。(只是记录删除操作)

只有当需要修改时才复制一份数据,这种特性被称作 Copy-on-Write。可见,容器层保存的是镜像变化的部分,不会对镜像本身进行任何修改。

总结下来就是:容器层记录对镜像的修改,所有镜像层都是只读的,不会被容器修改,所以镜像可以被多个容器共享。

七、Volume 数据卷

实际上我们的容器就好像是一个简易版的操作系统,只不过系统中只安装了我们的程序运行所需要的环境,前边说到我们的容器是可以删除的,那如果删除了,容器中的程序产生的需要持久化的数据怎么办呢?容器运行的时候我们可以进容器去查看,容器一旦删除就什么都没有了。

所以数据卷就是来解决这个问题的,是用来将数据持久化到我们宿主机上,与容器间实现数据共享,简单的说就是将宿主机的目录映射到容器中的目录,应用程序在容器中的目录读写数据会同步到宿主机上,这样容器产生的数据就可以持久化了,比如我们的数据库容器,就可以把数据存储到我们宿主机上的真实磁盘中。

八、Registry 注册中心

Docker 用 Registry 来保存用户构建的镜像。Registry 分为公共和私有两种。Docker 公司运营公共的 Registry 叫做 Docker Hub。用户可以在 Docker Hub 注册账号,分享并保存自己的镜像。

Docker 公司提供了公共的镜像仓库 https://hub.docker.com(Docker 称之为 Repository)提供了庞大的镜像集合供使用。

一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。

通常,一个仓库会包含同一个软件不同版本的镜像,而标签对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。

九、总结

在这里插入图片描述

Docker 官网写着这样一句话:Build and Ship any Application Anywhere,再结合刚才我们所理解的内容,总结下来就是:一次构建,到处运行。

此外,Docker 公司提供了公共的镜像仓库 https://hub.docker.com,GitHub connect,自动构建镜像,大大简化了应用分发、部署、升级流程。加上 Docker 可以非常方便的建立各种自定义的镜像文件,这些都是 Docker 成为最流行的容器技术的重要因素。

通过以上这些技术的组合,最后的结果就是:绝大部分应用,开发者都可以通过 docker build 创建镜像,通过 docker push 上传镜像,用户通过 docker pull 下载镜像,使用 docker run 运行容器应用。用户不再需要去关心如何搭建环境,如何安装,如何解决不同发行版的库冲突——而且通常不会消耗更多的硬件资源,不会明显降低性能。

相关内容

热门资讯

南宁警方通报“某学校发生一起伤... 16日晚,南宁市公安局江南分局官方微博发布警情通报,全文如下:
钱文海出任国都证券董事长!浙商... 国都证券5月16日公告,其于前一日召开2025年第一次临时股东会,并选举产生了新一届董事会、监事会。...
成都拟对“砸车侠”等见义勇为人... 中新网成都5月16日电 从不顾自身安危跳河砸车的“砸车侠”,到合力勇斗持刀歹徒的普通邻里,见义勇为人...
中原内配:5月16日召开董事会... 中原内配(维权)(SZ 002448,收盘价:8.25元)5月16日晚间发布公告称,公司第十一届第一...
集装箱出厂,方向美国!“中国电... 转自:交汇点编者按:当前,单边主义、保护主义加剧,外部环境不确定不稳定因素增多,面对困难和挑战,我国...
首批商用堆产碳-14同位素投入... 中证报中证网讯(记者杨洁)5月16日,记者自中国核电获悉,当日,首批商用堆产碳-14同位素产品从中国...
财联社5月16日晚间新闻精选 转自:财联社【财联社5月16日晚间新闻精选】 1、证监会鼓励私募基金参与上市公司并购重组,首次建立简...
中兰环保:实控人孔熊君拟减持不... 中兰环保(300854.SZ)公告称,公司实际控制人孔熊君计划减持不超过3,031,305股,占公司...
宁德时代上市“倒计时”:厘定每... 宁德时代将5月20日在联交所主板开始买卖,每股263.00港元,筹资规模扩大至46亿美元,月度期权将...
上海首创首发进口消费品检验便利... 5月16日,上海市商务委员会与上海海关联合发布《关于开展首发进口消费品检验便利化措施试点的公告》,在...
全球粮食危机报告:去年逾2.9... 中新社北京5月16日电 (记者 刘亮)16日发布的《全球粮食危机报告》显示,2024年,53个国家和...
京东618于5月底开启 将为用... 中国青年报客户端讯(中青报·中青网见习记者 刘佳佳 记者 宁迪)5月15日,“京东618惊喜开放日”...
证监会正式对外公布实施修订后的... 转自:北京商报北京商报讯(记者 马换换 王蔓蕾)5月16日晚间,证监会官网发文称,《关于修改<上市公...
调研速递|神州泰岳接受超百家投... 5月16日下午15:00 - 17:00,北京神州泰岳软件股份有限公司在全景网“投资者关系互动平台”...
美股异动 | 哔哩哔哩(BIL... 周五,哔哩哔哩(BILI.US)涨6%,报18.81美元。消息面上,哔哩哔哩将于5月20日(即下周二...
中国通信服务全资子公司中标一项... (转自:快查一企业中标了)快查APP显示,中国通信服务相关公司江西省通信产业服务有限公司于2025年...
微软就“解绑”Teams与Of... 欧盟委员会5月16日宣布,微软已提出一系列新承诺,旨在了结有关将Teams与Office产品捆绑销售...
多少人愿买高价“美国货”? 制... 转自:新华社 “美国制造”商品究竟贵多少?有多少美国消费...
一互联网“大厂”餐饮专家收受供... 中国青年报客户端讯(中青报·中青网记者 刘言)一互联网“大厂”餐饮专家利用职务之便,3年收受供应商贿...
香港今年首季经济稳健扩张 全年... 中新网香港5月16日电 (魏华都 黄岩妮)香港特区政府16日举行记者会,介绍今年第一季度香港经济及今...