发布于: Sep 8, 2022

可查找 OCI (SOCI) 是 AWS 提供的一项开源技术,该技术通过延迟加载容器映像使容器启动速度提升。SOCI 的工作原理是在现有的容器映像内创建文件的索引(SOCI 索引)。此索引是提升容器启动速度的一大关键助力,提供了在下载整个存档之前从容器映像中提取单个文件的能力。

大多数启动容器的方法都是在启动容器之前从远程容器注册表下载整个容器映像。在只需少量数据即可启动的情况下,等待所有数据是一种浪费。之前的研究显示,容器映像下载占容器启动时间的 76%,但容器开始执行有用工作平均只需要用到 6.4% 的数据。

这一问题有多种解决方案,包括减小容器映像的大小以及将容器映像预取到本地存储。延迟加载是一种在应用程序启动的同时从注册表下载数据的方法。容器映像存储为层的有序列表,层通常存储为采用 Gzip tar 压缩格式的文件。通常无法从采用 Gzip tar 压缩格式的文件中提取单个文件。某些项目通过格式转换启用延迟加载。stargz-snapshotter 就是这样一个项目,它采用现有的 OCI 映像并使用嵌入式内容表构建新的 OCI 映像。使用 SOCI,我们借鉴了 stargz-snapshotter 的一些设计原则,但采用的是另一种方法。SOCI 索引与容器映像分开生成,作为 OCI 构件存储在注册表中,并通过 OCI 引用类型链接回容器映像。这意味着无需转换容器映像,映像摘要不会发生变化,映像签名仍然有效。

开源生成工具用于为现有 OCI 容器映像创建 SOCI 索引,而被称为 soci-snapshotter 的远程 Snapshottercontainerd 提供由 SOCI 索引的延迟加载映像的能力。SOCI 和 soci-snapshotter 是 Apache 2.0 下的开源项目,您可以在 GitHub 上了解有关该项目的更多信息。我们期待就改进 SOCI 和加快容器启动速度与社区开展合作并互动。