Container
最后更新于
这有帮助吗?
最后更新于
这有帮助吗?
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并运行容器。
OCI 容器镜像主要包括几块内容:
文件系统:以layer
保存的文件系统,每个layer
保存了和上层之间变化的部分,layer
应该保存哪些文件,怎么表示增加、修改和删除的文件等
config
文件:保存了文件系统的层级信息(每个层级的 hash 值,以及历史信息),以及容器运行时需要的一些信息(比如环境变量、工作目录、命令参数、mount 列表),指定了镜像在某个特定平台和系统的配置。比较接近我们使用 docker inspect <image_id>
看到的内容
manifest
文件:镜像的config
文件索引,有哪些layer
,额外的annotation
信息,manifest
文件中保存了很多和当前平台有关的信息
index
文件:可选的文件,指向不同平台的manifest
文件,这个文件能保证一个镜像可以跨平台使用,每个平台拥有不同的manifest
文件,使用index
作为索引
docker
containerd
OCI 对容器 runtime 的标准主要是指定容器的运行状态,和 runtime 需要提供的命令。下图可以是容器状态转换图:
creating
:使用 create 命令创建容器,这个过程称为创建中
created
:容器创建出来,但是还没有运行,表示镜像和配置没有错误,容器能够运行在当前平台
running
:容器的运行状态,里面的进程处于 up 状态,正在执行用户设定的任务
stopped
:容器运行完成,或者运行出错,或者 stop 命令之后,容器处于暂停状态。这个状态,容器还有很多信息保存在平台中,并没有完全被删除
容器运行时规范的实现主要有:
runc: 是 docker 捐赠给 OCI 的一个符合标准的 runtime 实现,目前 docker、containerd 引擎内部也是基于 runc 构建的。