はじめに

コンテナとは? VM との違い

コンテナはホストのカーネルを共有したまま Linux Namespaces と cgroups でプロセスを隔離する仕組み。VM との違いと、何が得られるかを最初に押さえます。

コンテナとは? VM との違い diagram

コンテナは「軽い VM」ではなく「隔離されたプロセス」

コンテナを初めて触る人は「軽量な仮想マシン」と説明されがちですが、実体は異なります。

コンテナはホスト OS のカーネルを共有したまま動く、1 つ(または複数)のプロセスです。

  • VM: ハイパーバイザ上にゲスト OS のカーネルまで含めて積み上げる
  • コンテナ: ホストのカーネルをそのまま使い、プロセスから見える「世界」だけを切り替える

この違いが、起動時間・イメージサイズ・集約密度・隔離強度のすべてに影響します。

VM とコンテナの比較表

VM とコンテナの比較表 diagram

実務で「どちらを選ぶか」を考えるときの観点を一覧にまとめます。

観点 VM コンテナ
カーネル ゲスト専用 ホストと共有
起動時間 数十秒〜数分 ミリ秒〜数秒
イメージサイズ 数 GB 数十 MB 〜 数百 MB
1 ホストあたりの同時実行数 数〜数十 数百〜数千
隔離境界 ハードウェア仮想化(強い) カーネル名前空間(弱め)
異種 OS の同居 可能(Linux + Windows 等) ホストと同じカーネル系のみ

隔離強度が必要な領域(マルチテナントで他社と同一ホストに乗る等)は VM や軽量 VM(Firecracker、Kata Containers)を、開発環境や自社のマイクロサービスはコンテナを、という住み分けが一般的です。

よくある誤解

はじめに整理しておくと、後の学習で混乱しにくくなります。

  • 「コンテナ = Docker」ではない。Docker は最初に普及したランタイムで、今は containerd / runc / Podman / CRI-O など複数の実装がある
  • コンテナはホストカーネルを共有するので、ホストが Linux でなければ Linux コンテナはそのままでは動かない。macOS / Windows では裏で軽量 Linux VM を起動している
  • コンテナ間の隔離は VM ほど強くないので、信頼できないコードを同じカーネルで走らせる用途には向かない(マルチテナント SaaS の分離境界には VM か gVisor / Kata を併用するのが一般的)
  • 「コンテナ = 不変」ではない。書き込み可能な層があるので中で変更は可能だが、再現性のため変更は Dockerfile に書くのが原則

関連トピック