深入理解 OCI 和 CRI它们之间的关系

一、OCI (Open Container Initiative / 开放容器倡议)

1. 是什么?

OCI 是一个由 Linux 基金会在 2015 年主导成立的治理委员会和项目。它的诞生背景是,当时 Docker 公司如日中天,几乎成为了容器的代名词。为了避免容器技术被单一厂商(Docker)锁定,并促进容器生态的健康发展,多家行业巨头(包括 Google, Red Hat, IBM, Microsoft, Amazon 等)联合发起了 OCI。

核心目标: 制定容器格式的开放行业标准。让任何人都可以基于这些标准来创建符合规范的容器工具,从而实现不同工具之间的互操作性。

你可以把 OCI 想象成**“容器世界的 ISO 国际标准化组织”**。它不生产任何软件,只负责制定“规则”。

2. 核心规范

OCI 主要发布了两个关键的规范(Specification),它们构成了现代容器技术的基石:

a. 运行时规范
  • 定义了什么? 定义了一个**“解压后的、可运行的容器文件系统包”** 应该是什么样子,以及如何运行它。
  • 核心内容:它规定了一个**config.json** 文件。这个文件是 OCI 运行时规范的灵魂,它描述了运行一个容器所需的所有元数据,包括:
    • 进程信息:要运行的命令、参数、环境变量、工作目录。
    • 根文件系统:指向容器根目录的路径。
    • 用户:以哪个用户身份运行进程。
    • 资源限制:CPU、内存的 cgroups 配置。
    • 安全配置:Linux capabilities、seccomp 规则、namespaces 配置。
    • 挂载点:需要挂载的 proc, sysfs, devpts 等伪文件系统。
  • 作用:任何一个符合 OCI Runtime 规范的工具(称为 OCI Runtime),只要拿到这个 config.json 和对应的文件系统,就能以完全相同的方式启动这个容器。这实现了运行时的标准化
  • 著名实现
    • runc:这是 OCI Runtime 规范的参考实现,也是目前使用最广泛的容器运行时。它由 Docker 贡献出来,现在是 CNCF 的毕业项目。Docker, containerd, CRI-O 底层默认都是用 runc 来实际启动容器的。
    • crun:一个用 C 语言编写的、更轻量级的 OCI Runtime。
    • kata-runtime:一个基于轻量级虚拟机的 OCI Runtime,提供了更强的安全隔离。
b. 镜像规范
  • 定义了什么? 定义了如何创建和打包一个标准的、可移植的容器镜像
  • 核心内容:它规定了一个 OCI 镜像由以下几部分组成:
    • 文件系统层:镜像不是单一的巨大文件,而是由一系列只读的文件系统层 组成。每一层代表了对上一层所做的变更(添加、删除、修改文件)。这种分层设计使得镜像构建、存储和分发都非常高效(可以复用层)。
    • 清单:一个 JSON 文件,可以理解为镜像的“总目录”或“清单”。它引用了镜像的配置文件和所有相关的文件系统层
    • <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值