コンテナ

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 SpecOCI Image Format Specificationコンテナイメージ(パッケージ)の形式を定義
Runtime SpecOCI Runtime Specificationコンテナをどう起動・管理するかを定義
Distribution SpecOCI 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・Docker・Kubernetes の関係図 開発者ツール層 Docker CLI Podman Buildah OCI Image を生成 OCI 標準仕様層 Image Spec Runtime Spec Distribution Spec 共通ルールを定義 実行・運用層 Kubernetes runc / crun containerd OCI Image を実行 OCIの共通仕様があるから、どの開発ツールで作っても、どの実行環境でも動く

ベンダーロックインとの比較

項目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が内部で使うコンテナ管理デーモン