订阅
纠错
加入自媒体

关于容器和容器运行时那些事

2020-08-11 09:55
EAWorld
关注

5.Docker

Docker 是一个开放源代码软件,是一个开放平台,用于开发应用、交付应用、运行应用。 Docker允许用户将基础设施中的应用单独分割出来,形成更小的颗粒,从而提高交付软件的速度。 Docker容器 与虚拟机类似,但原理上,容器是将操作系统层虚拟化,虚拟机则是虚拟化硬件,因此容器更具有便携性、高效地利用服务器。

Docker的主要特性有:

分层容器

Docker使用AUFS / devicemapper / btrfs使用文件系统的只读层来构建容器。容器由只读层组成,这些只读层在提交后将成为容器映像。镜像是一个包含用于构建应用程序的图层的容器。当docker容器运行时,只有顶层是可读写的,下面的所有层都是只读的,顶层是临时数据,直到将其提交到新层为止。使用只读文件系统的覆盖层会带来固有的复杂性和性能损失。

单一应用容器

Docker将容器限制为仅一个进程。默认的docker baseimage OS模板并非旨在支持多个应用程序,进程或服务,如init,cron,syslog,ssh等。您可以想象这会引入一定的复杂性,并且对日常使用场景具有巨大的影响。由于当前的体系结构,应用程序和服务旨在在正常的多进程OS环境中运行,因此您需要找到一种Docker方式来做事或使用支持Docker的工具。对于LAMP容器的应用程序,需要构建3个相互使用服务的容器,一个PHP容器,一个Apache容器和一个MySQL容器。能在一个容器中建造所有3个容器吗?可以,但无法在同一容器中运行php-fpm,apache和mysqld,也无法安装单独的进程管理器(如runit或supervisor)。

状态分离

Docker将容器存储与应用程序分开,可以在数据卷容器中将持久性数据安装在主机中的容器外部。除非用例只是具有非持久性数据的容器,否则有可能使Docker容器的可移植性降低。这也是容器编排更容易支持无状态应用的根本原因。

镜像注册

Docker提供了一个公共和私有镜像注册,用户可以在其中推送和提取镜像。镜像用于组成应用程序的只读层。这使用户可以轻松共享和分发应用程序。

上图是Docker的架构图,我们看到Docker是如何提供容器的管理功能的。

Docker 守护进程负责容器声明周期的管理

Registry 提供容器镜像仓库的功能

Docker 守护进程负责从镜像仓库推/拉取容器的镜像

客户端程序负责和守护进程通信,发送相关的容器管理的命令

在Docker 1.11版之前,Docker Engine守护进程下载容器映像,启动容器进程,公开远程API并充当日志收集守护进程,所有这些都以集中化进程的身份以root身份运行。尽管这样的集中式体系结构便于部署,但是它没有遵循Unix进程和特权分离的最佳实践;此外,这使得Docker难以与Linux初始系统(如upstart和systemd)正确集成。

如下图所示,从1.11版开始,Docker守护程序不再处理容器本身的执行。而是现在由containerd处理。更准确地说,Docker守护程序将映像准备为开放容器镜像(OCI)捆绑包,并对容器进行API调用以启动OCI捆绑包。然后使用runC启动容器化容器。

那么ContainerD和RunC又分别是神马东东呢?我们继续探索。

6.ContainerD

好了,看了这么多的API选择之后,我们做一个小结。

系统间的API选项经过多年的发展,现阶段的主流是RESTful API,gRPC 和GraphQL。具体怎么选择,要结合你的业务上下文,我的推荐是:

对外提供的公开服务,首选RESTFul API,因为它非常成熟稳定和流行,语言和工具链的支持都很好。

如果你希望加速应用的客户端开发,GraphQL是个不错的选择,提供良好的性能和灵活性。

如果你的应用特别看重性能,而且主要是内部系统之间的交互,建议考虑gRPC。

<上一页  1  2  3  
声明: 本文由入驻维科号的作者撰写,观点仅代表作者本人,不代表OFweek立场。如有侵权或其他问题,请联系举报。

发表评论

0条评论,0人参与

请输入评论内容...

请输入评论/评论长度6~500个字

您提交的评论过于频繁,请输入验证码继续

暂无评论

暂无评论

云计算 猎头职位 更多
文章纠错
x
*文字标题:
*纠错内容:
联系邮箱:
*验 证 码:

粤公网安备 44030502002758号