容器化真正的本质是将分布式系统对主机、虚拟机的管理转而直接对分布式环境中大量的进程进行管理,简化了对应用运行时环境额外的管控开销,提升了系统的运行效率。
容器的内涵
- 容器包含两个内涵,一个是操作系统的隔离特性,一个是在容器内运行时的镜像物件。<b>本质还是对应用运行时全栈的抽象(应用本身的组成结构 + 运行时资源依赖)。</b>
- 其中对于操作系统的资源,包括存储、网络、进程命名空间等的隔离,是对应用享有完整运行时依赖(资源)的抽象,目的是为了让一个host上的os以及相关资源能够共享同时每个应用本身又能达到独享的效果,从这个维度看,难点在于对资源的抽象,迄今为止,这个抽象尚且没有哪个容器技术做到完全抽象,都存在一定共享的资源,比如存储。隔离性的抽象程度决定了镜像物件的形态。
- 容器另外一个内涵是镜像物件,是一个应用能够在主机操作系统之上运行时完全“自包含”的所有软件构件(应用自身、运行时平台如jvm、系统的库等),镜像“自包含”的程度决定了镜像本身的构成稳定性,如多个镜像共享一个基础镜像,那基础镜像的稳定性决定了所有依赖它的镜像的稳定性。通过一系列技术来驱动“自包含”镜像的达成是镜像的最佳实践目标之一。
运行时关注点面向应用、通过容器作为载体来实现
- 传统的运行时架构关注应用本身 + 运行时平台(如JVM)+ 系统平台(如Linux、存储、网络等等),为了让一个应用稳定可靠运行,关注点较多且分离。通过容器来对以上运行时平台和系统平台进行抽象承载,我们将应用和容器支撑服务(健康检查、存储策略等)合并,使我们只需要关注应用这一个中心点即可把控应用运行时所有的关注点,极大提升了效率。