Container

OCI

OCI,Open Container Initiative,是一个轻量级,开放的治理结构(项目),在 Linux 基金会的支持下成立,致力于围绕容器格式(image)和运行时(runtime)创建开放的行业标准。OCI 项目由 Docker,CoreOS(后来被 Red Hat 收购了,相应的席位被 Red Hat 继承)和容器行业中的其他领导者在 2015 年 6 月的时候启动。OCI 的技术委员会成员包括 Red Hat,Microsoft,Docker,Cruise,IBM,Google,Red Hat 和 SUSE,其中 Docker 公司有两名成员,且其中的一位是现任主席,具体的细节可以查看 OCI Technical Oversight Board

OCI中定义了Runtime Spec(容器运行时标准) 以及 Image Spec(容器镜像标准) 这两个标准。其中OCI 镜像可以通过工具转换为 bundle,OCI引擎通过识别bundle并运行容器。

Image Spec

OCI 容器镜像主要包括几块内容:

  • 文件系统:以layer保存的文件系统,每个layer保存了和上层之间变化的部分,layer应该保存哪些文件,怎么表示增加、修改和删除的文件等

  • config文件:保存了文件系统的层级信息(每个层级的 hash 值,以及历史信息),以及容器运行时需要的一些信息(比如环境变量、工作目录、命令参数、mount 列表),指定了镜像在某个特定平台和系统的配置。比较接近我们使用 docker inspect <image_id> 看到的内容

  • manifest文件:镜像的config文件索引,有哪些layer,额外的annotation信息,manifest文件中保存了很多和当前平台有关的信息

  • index文件:可选的文件,指向不同平台的manifest文件,这个文件能保证一个镜像可以跨平台使用,每个平台拥有不同的manifest文件,使用index作为索引

镜像规范的主要实现

  • docker

  • containerd

Runtime Spec

OCI 对容器 runtime 的标准主要是指定容器的运行状态,和 runtime 需要提供的命令。下图可以是容器状态转换图:

  • creating:使用 create 命令创建容器,这个过程称为创建中

  • created:容器创建出来,但是还没有运行,表示镜像和配置没有错误,容器能够运行在当前平台

  • running:容器的运行状态,里面的进程处于 up 状态,正在执行用户设定的任务

  • stopped:容器运行完成,或者运行出错,或者 stop 命令之后,容器处于暂停状态。这个状态,容器还有很多信息保存在平台中,并没有完全被删除

容器运行时规范的实现主要有:

  • runc: 是 docker 捐赠给 OCI 的一个符合标准的 runtime 实现,目前 docker、containerd 引擎内部也是基于 runc 构建的。

最后更新于