Open Container Initiative

Open Container Initiative（OCI）は、の一種である「コンテナ」のフォーマット・ランタイムの業界標準策定を目的として設立されたイニシアチブである。Linux Foundationプロジェクトの1つである。

概要 
OSレベル仮想化手法の1つとして、Dockerをはじめとするコンテナ仮想化技術がある。複数存在するコンテナ仮想化実装のオープン業界標準策定を目的として設立されたのがOpen Container Initiativeである。

OCIが策定した標準仕様は以下の2つである。

 Open Container Initiative Runtime Specification
 OCI Image Format Specification

またOCIは上記仕様のリファレンス実装であるrunCを開発しており、これは高レベルのツールを開発する際のベースとなっている。

OCI Runtime Spec

Container 
OCI RuntimeにおけるContainerは「『隔離とリソース制限を設定可能なプロセス実行』を提供する1つの環境」である。例えばruncランタイム上で生成されたContainerは他のコンテナからファイルシステムやプロセスが隔離され、利用可能なCPUリソース等に制限がかけられている。ゆえにこのコンテナ（環境）内で実行されるプロセスは隔離とリソース制限を得ることができる。

OCI Runtime SpecではこのContainerのライフサイクル等を定義している。

status 
OCI Containerはcreating, created, running, stopped以下のいずれかの状態あるいはランタイムが拡張した状態にある。

Runtime 
OCIにおけるRuntimeはContainerの管理を司るプログラムである。Runtimeはbundleから設定ファイルを読み込み、それに基づいてコンテナを生成、コンテナ内でプロセスを起動し、その他のコンテナライフサイクル管理を実行する。

OCI Runtime Specに準拠した様々なコンテナランタイムが実装されている。

runc: 広く利用されているリファレンス実装。containerd（を利用するDocker）やcri-oのランタイムとして利用されている
kata-runtime: 軽量VMで高い安全性を志向するKata Containersのランタイム
runsc: 高い安全性を志向するgVisorのランタイム

他にも様々なランタイムが開発された。

RailCar: Rustで実装されたOCI Runtime実装 (開発終了)

filesystem bundle 
OCIにおける filesystem bundle は、コンテナに必要な全ファイルが定められた形式で配置された1つのセットである。bundleは設定情報を含むconfig.jsonおよびコンテナのrootファイルシステムから成る。Runtimeはコンテナidとfilesystem bundleからコンテナを生成する。

OCI Image 
OCI ImageはOCI Image Format Specificationによって定義されるコンテナイメージ仕様である。OCI Imageにはディレクトリ/ファイル情報と実行時設定が含まれており、OCI Imageに準拠したコンテナイメージをOCI Runtimeに準拠したコンテナランタイムへ渡すことでコンテナを実行できる。

OCI Imageは以下の4要素で構成される。

 Manifest: コンテナイメージに含まれるlayersとconfigurationのハッシュ値等が記述されたJSONファイル（例）
 image index (任意)
 set of filesystem layers: ファイルシステムのchangesets (tar, tar.gz, tar.zstdとメタデータ)
 Configuration: アプリケーションの引数、環境変数等の設定情報が記述されたJSONファイル（例）

OCI Imageはファイルシステム情報をそのまま持つのではなく、changesetつまり元ファイルシステムに対する変更差分を用いて保有している（c.f. Git)。これにより元ファイルシステムにすべての変更履歴（layers）を適用することで完全なファイルシステムを生成できるようになっている。

OCI Runtimeでは、OCI Image layersから得られたファイルシステム実体とImage Configurationの変換で得られたconfig.jsonからfilesystem bundleを得ることでコンテナを生成する（image → bunble → container）。

脚注

外部リンク 
 
 

Linux
仮想化
フリーソフトウェアのプロジェクト