Veröffentlicht am: Sep 8, 2022

Seekable OCI (SOCI) ist eine quelloffene Technologie von AWS, mit der Container schneller starten können, indem das Container-Image mit Lazy Loading geladen wird. Dafür erstellt SOCI einen Index (SOCI-Index) der Dateien in einem bestehenden Container-Image. Dieser Index ist ein wichtiges Hilfsmittel, um Container schneller zu starten. Er stellt die Fähigkeit zur Verfügung, eine einzelne Datei aus einem Container-Image zu extrahieren, bevor das gesamte Archiv heruntergeladen wird.

Bei den meisten Methoden zum Starten von Containern wird das gesamte Container-Image aus einer Container-Registry an einem Fernstandort heruntergeladen, bevor der Container gestartet wird. Das Warten auf die gesamten Daten ist verschwenderisch, wenn zum Starten nur eine kleine Datenmenge erforderlich ist. Frühere Forschungsergebnisse haben gezeigt, dass die Downloads von Container-Images 76 % der Container-Startzeit ausmachen, doch im Durchschnitt werden nur 6,4 % der Daten benötigt, damit der Container nützliche Arbeit verrichten kann.

Es gibt verschiedene Lösungen für dieses Problem, darunter die Reduzierung der Größe des Container-Images und den Vorabspeicherung von Container-Images im lokalen Speicher. Lazy Loading ist ein Ansatz, bei dem Daten parallel zum Anwendungsstart aus der Registry heruntergeladen werden. Container werden als geordnete Liste von Schichten gespeichert. Diese Schichten werden in der Regel im komprimierten Tar-Gzip-Format gespeichert. Normalerweise ist es nicht möglich, einzelne Dateien aus Tar-Gzip-Dateien abzurufen. Einige Projekte ermöglichen Lazy Loading durch eine Formatumwandlung. Eines dieser Projekte ist stargz-snapshotter, bei dem ein bestehendes OCI-Image als Vorlage genommen wird, um ein neues OCI-Image mit einem eingebetteten Inhaltsverzeichnis zu erstellen. Für SOCI haben wir einige der Designprinzipien aus stargz-snapshotter übernommen, uns jedoch für einen anderen Ansatz entschieden. Ein SOCI-Index wird getrennt vom Container-Image generiert und in der Registry als OCI-Artefakt gespeichert, das über OCI-Referenztypen wieder mit dem Container-Image verknüpft wird. Das bedeutet, dass Container-Images nicht umgewandelt werden müssen, die Aufnahme von Images gleich bleibt und Image-Signaturen ihre Gültigkeit behalten.

Ein quelloffenes Build-Tool wird zur Erstellung von SOCI-Indizes für bestehende OCI-Container-Images verwendet, und ein Remote-Snapshotter mit dem Namen soci-snapshotter stellt containerd die Fähigkeit zum Lazy Loading von Images zur Verfügung, die von SOCI indiziert wurden. SOCI und der soci-snapshotter sind quelloffen und unter Apache 2.0 lizenziert. Mehr über das Projekt erfahren Sie auf GitHub. Wir freuen uns, gemeinsam mit der Community an der Verbesserung von SOCI zu arbeiten und das Starten von Containern zu beschleunigen.