OCI(Open Container Initiative) おーしーあい
コンテナDockerKubernetesランタイムイメージ仕様標準化
OCIについて教えて
簡単に言うとこんな感じ!
コンテナの「規格統一団体」だよ! メーカーが違ってもコンセントの形が同じなら使えるように、どのツールで作ったコンテナでもどのエンジンでも動けるよう、共通のルールを決めてるんだ!
OCIとは
OCI(Open Container Initiative) は、コンテナ技術の仕様を業界横断で統一するために2015年に設立されたオープンな標準化団体です。Linux Foundation の傘下で運営されており、Docker・Microsoft・Google・Red Hat など主要なIT企業が参加しています。
コンテナとは、アプリケーションとその動作に必要なライブラリ・設定をまとめてパッケージ化した仕組みです。OCIが登場する以前は、Dockerが事実上の独自規格を持っており、「Dockerで作ったコンテナはDockerでしか動かせない」という状況が生まれていました。これがベンダーロックイン(特定企業への依存)のリスクとして問題視されていました。
OCIはその課題を解決するため、コンテナイメージの形式とコンテナの実行方法について共通仕様を定義しました。これにより、異なるメーカーのツールやクラウドサービス間でも、コンテナをそのまま持ち運んで動かせる互換性が確保されています。
OCIが定める3つの仕様
OCIは現在、以下の3つの主要な仕様を策定・管理しています。
| 仕様名 | 正式名称 | 役割 |
|---|---|---|
| Image Spec | OCI Image Format Specification | コンテナイメージ(パッケージ)の形式を定義 |
| Runtime Spec | OCI Runtime Specification | コンテナをどう起動・管理するかを定義 |
| Distribution Spec | OCI Distribution Specification | イメージをレジストリに保存・配布する方法を定義 |
料理で例えると
| OCI仕様 | 料理の世界での例え |
|---|---|
| Image Spec | レシピ本のフォーマット(材料・手順の書き方のルール) |
| Runtime Spec | 調理器具の操作マニュアル(どのコンロでも同じ手順で使えるルール) |
| Distribution Spec | レシピ本の流通・物流ルール(どの本屋でも同じ棚に並ぶルール) |
主要な実装例
【Image Spec の実装】
- Docker Image形式(現在はOCI準拠)
- Podman / Buildah
【Runtime Spec の実装(OCI Runtime)】
- runc(最も広く使われる標準実装)
- crun(C言語実装の軽量版)
- gVisor(Googleのセキュア実装)
- Kata Containers(VM型の強固な隔離)
【Distribution Spec の実装】
- Docker Hub
- GitHub Container Registry (ghcr.io)
- Amazon ECR / Google Artifact Registry
歴史と背景
- 2013年 — Docker社がコンテナ技術を一般公開。爆発的に普及するが、独自フォーマットが業界標準を占有
- 2015年6月 — DockerとCoreOSの主導でOCIが設立。Linux Foundation 傘下に置かれる。当初の参加企業はAWS・Google・Microsoft・Red Hatなど
- 2017年 — OCI Runtime Specification v1.0 および OCI Image Format Specification v1.0 が正式リリース
- 2019年 — Kubernetes が Docker 専用の内部インターフェースを廃止し、OCI準拠のCRI(Container Runtime Interface)に完全移行する方針を発表
- 2021年 — OCI Distribution Specification v1.0 がリリース。イメージのレジストリ間移行が標準化
- 2022年以降 — Kubernetes 1.24でDockerShimが削除され、OCI準拠のランタイムのみがサポートされる本格的なOCI時代へ
OCI・Docker・Kubernetes の関係
3つの概念がどう関係しているかを整理します。
ベンダーロックインとの比較
| 項目 | OCI標準化以前 | OCI標準化以後 |
|---|---|---|
| イメージの互換性 | Docker形式のみ | どのOCI準拠ツールでも使える |
| ランタイムの選択 | Docker Engine 固定 | runc / crun / gVisor など選択可 |
| クラウドの乗り換え | 再ビルドが必要なことも | OCI準拠なら原則そのまま移行可 |
| セキュリティ強化 | 選択肢が限られる | 用途に合わせたランタイム選択が可能 |
関連する規格・RFC
| 規格・番号 | 内容 |
|---|---|
| OCI Image Spec v1.1 | コンテナイメージのレイヤー構造・マニフェスト形式を定義 |
| OCI Runtime Spec v1.1 | コンテナ起動・停止・状態管理のインターフェースを定義 |
| OCI Distribution Spec v1.1 | イメージレジストリのHTTP API仕様を定義 |
| CRI(Container Runtime Interface) | KubernetesとOCIランタイムをつなぐインターフェース(Kubernetes側の仕様) |
関連用語
- コンテナ — アプリと動作環境をまとめてパッケージ化する技術
- Docker — コンテナを作成・管理する最も有名なツール
- Kubernetes — コンテナを大規模に管理・自動化するオーケストレーションツール
- コンテナレジストリ — コンテナイメージを保存・配布するリポジトリサービス
- runc — OCIランタイム仕様の標準リファレンス実装
- containerd — DockerやKubernetesが内部で使うコンテナ管理デーモン