Nerdctl 原生支持 Nydus 加速镜像

本文介绍了Nerdctl如何支持Nydus镜像,包括Nydus镜像格式的优化和Nerdctl的改进,使得用户能够更好地利用Nydus的按需加载能力,提高容器启动效率。作者通过参与开源之夏项目,为Nerdctl添加了对Nydus镜像的拉取和转换功能,为云原生领域做出了贡献。

图片

文|李楠(GitHub ID : @loheagn)

北京航空航天大学 21 级研究生

云原生底层系统的开发和探索工作。

本文 6369 字 阅读 16 分钟

图片

OSPP 开源之夏是由中科院软件研究所“开源软件供应链点亮计划”发起并长期支持的一项暑期开源活动。旨在鼓励在校学生积极参与开源软件的开发维护、促进优秀开源软件社区的蓬勃发展、培养和发掘更多优秀的开发者。

这是去年(2022)的开源活动中,李楠同学参加 Nydus 容器开源生态集成课题的相关工作。

| 作者有话说 |

大家好!我是来自北京航空航天大学的 2021 级研究生李楠,对云原生技术很感兴趣,GitHub ID 是 @loheagn。在今年上半年,我参加了 Linux 基金会的春季实习,完成了 CNCF - Kubevela: Management of Terraform state 项目的工作,并因此培养了对开源工作的兴趣。在开源之夏 2022 开放题目后,我了解到了 Nydus 项目,感觉这是一个很酷的项目,由于我之前对容器和镜像的底层技术并不是很熟悉,觉得这是个很不错的学习机会。于是便尝试投递了简历申请,最终很幸运地通过了筛选,并在严松老师的帮助下顺利完成了题目。

PART. 1 项目背景

Nerdctl

Nerdctl 是一个对标 Docker CLI 和 Docker Compose 的、用于与 Containerd (当下最流行的容器运行时,Docker 的后端也是调用的 Containerd,通常作为守护进程出现) 交互的命令行工具。

用户可以像使用 Docker CLI 一样使用 Nerdctl 与 Containerd 进行交互,比如使用 nerdctl pull <image_name> 来拉取镜像、使用 nerdctl run <image_name> 来运行容器等等。

相比于 Containerd 本身提供的 CTR 工具,Nerdctl 默认提供了更友好的用户体验,并尽量保持其使用方式与 Docker 一致。对于从 Docker 迁移到 Containerd 的用户,往往只需要 alias docker=nerdctl 就可以与之前获得一致的使用体验。

OCI 镜像格式

OCI 镜像格式是 OCI (Open Container Initiative,开放容器计划) 的重要组成部分。它给出了一个厂商无关的镜像格式规范,即一个镜像应该包含哪些部分、每个部分的数据结构是如何的、这些各个部分应该以怎样的方式进行组织等等。

OCI 镜像格式脱胎于 Docker 镜像格式,它与 Docker 镜像格式有着非常类似的结构;但它比 Docker 镜像格式有更好的兼容性,并得到了各个厂商的普遍认同。

因此,在这里主要介绍一下 OCI 镜像格式的主要内容。

通常所说的镜像文件其实指的是一个包含了多个文件的“包”,“包”中的这些文件提供了启动一个容器所需要的所有需要信息,其中包括但不限于,容器所使用的文件系统等数据文件,镜像所适用的平台、数据完整性校验信息等配置文件。当我们使用 docker pull 或 nerdctl pull 从镜像中心拉取镜像时,其实就是在依次拉取该镜像所包含的这些文件。

例如,当我们使用 nerdctl pull 拉取一个 OCI 镜像时:

image.png

从 Log 中可以清晰地看到,Nerdctl 依次拉取了一个 index 文件、一个 manifest 文件、一个 config 文件和若干个 layer 数据文件。实际上,一个标准的 OCI 镜像通常就是由这几部分构成的。

其中,layer 文件一般是 tar 包或者压缩后的 tar 包,其包含着镜像具体的数据文件。这些 layer 文件会共同组成一个完整的文件系统(也就是从该镜像启动容器后,进入容器中看到的文件系统)

config 文件是一个 JSON 文件。其中包含镜像的一些配置信息,比如镜像时间、修改记录、环境变量、镜像的启动命令等等。

manifest 文件也是一个 JSON 文件。它可以看作是镜像文件的清单,即说明了该镜像包含了哪些 layer 文件和哪个 config 文件。

下面是一个 manifest 文件的典型例子:

{
  "schemaVersion": 2,
  "mediaType": "application/vnd.oci.image.manifest.v1+json",
  "config": {
    "mediaType": "application/vnd.oci.image.config.v1+json",
    "digest": "sha256:0584b370e957bf9d09e10f424859a02ab0fda255103f75b3f8c7d410a4e96ed5",
    "size": 7636
  },
  "layers": [
    {
      "mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
      "digest": "sha256:214ca5fb90323fe769c63a12af092f2572bf1c6b300263e09883909fc865d260",
      "size": 31379476
    },
    {
      "mediaType": "application/vnd.oci.image.layer.v1.tar+gzip",
      "digest": "sha256:50836501
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值