https://v.qq.com/x/page/y052121zhcn.html

Basic Knowledge

容器技术在最近几年都是一个非常热门的话题,目前越来越多的公司都提出基于容器的解决方案。


我个人认为容器是一个系统级轻量化的虚拟化技术。从字面上来说,容器是提供了一个资源隔离的空间。


容器技术和虚拟机技术相比,有一个很明显的天生优势,就是资源的节省。由于没有Guest OS,容器比虚拟机的启动速度更快,同时占用的资源更少。


但是根据我们对容器技术的了解,它并不是一个新技术,它有一个很长的历史。

容器技术百花齐放的时代,都有哪些标准化内容_java

如图可见,容器技术最早可以追溯到1979年很古老的chroot,但它一直没有像最近几年一样火爆起来。引领这一潮流的原因主要是2013年出现的Docker技术。


Docker为什么带动了容器技术的火爆呢?以前的容器技术并不适合在不同主机、不同平台的迁移,同时使用起来也不是那么方便,而Docker解决了这个问题。


The problem

随着越来越多的公司参与,每个厂商都提出自己的容器技术或容器解决方案,导致像热门的Docker、Rocket/rkt、OpenVZ/Odin以及Hyper都有自己的技术标准,不可避免地就会形成技术壁垒,从而致使整个容器生态看起来是碎片化的。我们的容器标准化就是想解决这一问题。


用户不知道应该通过怎样的标准来衡量哪一个技术厂商提供的容器技术是最好的。因为不同厂商依赖不同的系统和云平台,导致系统会被过度依赖到某一个厂商的云服务,用户想从一个厂商转移到另一个厂商会比较困难。


Goals of container standardization

容器标准化的目标就是要规范化容器技术,引导厂商向同一个方向发展容器技术,同时引导用户选择对自己更有利的容器技术。

OCI Introduction

OCI的全称是Open ContainerInitiative,它是在2015年6月22号发起的一个开源组织,目前在Linux Foundation下面运作。


OCI的主要目的是希望能够提供对容器的运行时或容器的格式提供统一标准,现在大概有47个厂商参与。


OCI社区的主要工作首先是创建一个运行时标准,同时负责接收管理和提高与标准相关的开源的project。


更多的关于OCI的介绍可以去http://www.opencontainers.org上进行了解。

容器技术百花齐放的时代,都有哪些标准化内容_java_02

上图是Docker运行一个container的基本流程,可简化为下图的几个概念。


容器技术百花齐放的时代,都有哪些标准化内容_java_03

首先是一个容器的运行需要一个bundle,bundle中包含了容器需要的根目录以及容器运行时需要的配置文件。然后通过一个runtime解析config配置文件的内容,挂载根目录生成container来运行配置文件中需要执行的程序。同时为了便于容器在不同的平台或架构上进行兼容性的转移,提出了一个容器image的标准,image和bundle之间能够进行互相转换。


基于image、runtime和bundle的概念,OCI社区目前主要管理以下五个开源项目。


runtime-spec:定义了容器运行所需要的runtime标准以及容器运行时的config配置文件需要哪些内容的标准。


image-spec:负责管理开源的容器镜像的标准。


runc:Runc是基于runtime-spec的一个runtime实现。通过Runc可以创建一个容器,是一个容器的运行工具。


runtime-tools:runtime-tools负责根据runtime-spec的标准来验证bundle是否符合runtime-spec的要求,以及验证runtime是否兼容runtime-spec。


image-tools:image-tools也是一个验证型工具。


Future Plans

对于runtime-spec和image-spec,目前根据社区的脚步,希望v1.0能够尽快发布。


对于runc的主要工作重点是支持cgroups v2的开发,希望完成对runtime-spec要求的一些配置的开发,尽快提升runc的品质。


runtime-tools未来的计划是完成Linuxcgroups配置的验证,完成对runtime validation的改造。还有一个重点就是完成输出的可读性。将来要完成runtime的兼容性工作。


目前image-tools的主要问题就是它的三个功能是分散的,我们想让它的结构像runtime-tools做个统一的阵容改造,同时也希望image-tools像runtime-tools能做跨平台的验证工作。