Open Container Initiative

Open Container Initiative（OCI）は、の一種である「コンテナ」のフォーマット・ランタイムの業界標準策定を目的として設立されたイニシアチブである。Linux Foundationプロジェクトの1つである。
概要.
OSレベル仮想化手法の1つとして、Dockerをはじめとするコンテナ仮想化技術がある。複数存在するコンテナ仮想化実装のオープン業界標準策定を目的として設立されたのがOpen Container Initiativeである。
OCIが策定した標準仕様は以下の2つである。
またOCIは上記仕様のリファレンス実装であるrunCを開発しており、これは高レベルのツールを開発する際のベースとなっている。
OCI Runtime Spec.
Container.
OCI RuntimeにおけるContainerは「『隔離とリソース制限を設定可能なプロセス実行』を提供する1つの環境」である。例えばcodice_1ランタイム上で生成されたContainerは他のコンテナからファイルシステムやプロセスが隔離され、利用可能なCPUリソース等に制限がかけられている。ゆえにこのコンテナ（環境）内で実行されるプロセスは隔離とリソース制限を得ることができる。
OCI Runtime SpecではこのContainerのライフサイクル等を定義している。
status.
OCI Containerはcodice_2, codice_3, codice_4, codice_5以下のいずれかの状態あるいはランタイムが拡張した状態にある。
Runtime.
OCIにおけるRuntimeはContainerの管理を司るプログラムである。Runtimeはbundleから設定ファイルを読み込み、それに基づいてコンテナを生成、コンテナ内でプロセスを起動し、その他のコンテナライフサイクル管理を実行する。
OCI Runtime Specに準拠した様々なコンテナランタイムが実装されている。
他にも様々なランタイムが開発された。
filesystem bundle.
OCIにおける filesystem bundle は、コンテナに必要な全ファイルが定められた形式で配置された1つのセットである。bundleは設定情報を含むcodice_6およびコンテナのrootファイルシステムから成る。Runtimeはコンテナidとfilesystem bundleからコンテナを生成する。
OCI Image.
OCI ImageはOCI Image Format Specificationによって定義されるコンテナイメージ仕様である。OCI Imageにはディレクトリ/ファイル情報と実行時設定が含まれており、OCI Imageに準拠したコンテナイメージをOCI Runtimeに準拠したコンテナランタイムへ渡すことでコンテナを実行できる。
OCI Imageは以下の4要素で構成される。
OCI Imageはファイルシステム情報をそのまま持つのではなく、changesetつまり元ファイルシステムに対する変更差分を用いて保有している（c.f. Git)。これにより元ファイルシステムにすべての変更履歴（layers）を適用することで完全なファイルシステムを生成できるようになっている。
OCI Runtimeでは、OCI Image layersから得られたファイルシステム実体とImage Configurationの変換で得られたcodice_6からfilesystem bundleを得ることでコンテナを生成する（image → bunble → container）。