投稿日: Sep 8, 2022

Seekable OCI (SOCI) は、AWS によってオープンソース化されたテクノロジーです。SOCI は、コンテナイメージの遅延読み込みを行うことで、コンテナをより高速に起動できるようにします。SOCI は、既存のコンテナイメージにあるファイルのインデックス (SOCI インデックス) を作成することによって機能します。このインデックスは、アーカイブ全体をダウンロードする前にコンテナイメージから個々のファイルを抽出できるようにし、コンテナを高速に起動するための重要な要素となっています。

コンテナの起動方法は、大抵の場合、コンテナーを起動する前にリモートコンテナレジストリからコンテナイメージ全体をダウンロードします。起動に必要なデータが少ない場合、すべてのデータをダウンロードするのは無駄が多くなります。事前調査によると、コンテナイメージのダウンロードはコンテナ起動時間の 76% を占めていますが、コンテナが有用な処理を開始するために必要なデータは平均でわずか 6.4% に過ぎません。

この問題に対しては、コンテナイメージのサイズを小さくする、コンテナイメージをローカルストレージにプリフェッチするなど、さまざまなソリューションがあります。遅延読み込みは、アプリケーションの起動と並行してレジストリからデータをダウンロードするアプローチです。コンテナイメージはレイヤーの順序付きリストとして保存され、ほとんどの場合、レイヤーは gzip 圧縮された tar ファイルとして保存されます。通常、gzip 圧縮された tar ファイルから個々のファイルを取得することはできません。一部のプロジェクトでは、形式を変換して遅延読み込みできるようになっています。そのようなプロジェクトの 1 つに stargz-snapshotter があります。これは既存の OCI イメージを取得し、目次が埋め込まれた新しい OCI イメージを構築するものです。SOCI では、stargz-snapshotter から設計原則の一部を借用しつつも、異なるアプローチを取りました。SOCI インデックスはコンテナイメージとは別に生成され、OCI Artifact としてレジストリに保存され、OCI Reference Types によってコンテナイメージにリンクバックされます。これは、コンテナイメージを変換する必要がなく、イメージダイジェストは変更されず、イメージの署名が有効なままであることを意味します。

オープンソースのビルドツールを使用して既存の OCI コンテナイメージの SOCI インデックスを作成できるほか、soci-snapshotter と呼ばれる remote snapshotter は、SOCI によってインデックス付けされたイメージを遅延読み込みできる containerd という機能を提供しています。SOCI と soci-snapshotter は Apache 2.0 でオープンソース化されています。GitHub で、このプロジェクトの詳細をご覧ください。当社は SOCI の改善とコンテナ起動の高速化について、コミュニティと協力して取り組んでいくことを楽しみにしています。