TL

コンテナと仮想マシンの違い

1台のサーバーを“分けて使う”2つの方式。仮想マシンはOSごと仮想化して強く隔離し、コンテナはOSカーネルを共有して軽く速く動かす。

中級コンテナ仮想マシンDocker仮想化最終更新: 2026-06-04
TL;DR要点だけ先に
  • 1.VM は OS ごと仮想化:ハイパーバイザの上に各VMが独自カーネルを持ち、隔離は強いが重い。
  • 2.コンテナは カーネル共有:プロセスを隔離するだけなので軽量・高速起動だが、分離レベルはVMより弱い。
  • 3.使い分け:アプリの大量配置・CI/CDはコンテナ、強い隔離や別OSが要る所はVM。両者は併用が普通。

なぜ「分けたい」のか

1台のサーバーに複数のアプリをそのまま同居させると、ライブラリのバージョンが衝突したり、片方の暴走が全体を巻き込んだりします。そこで「独立した箱」に分けて、依存関係・設定・障害を箱の中に閉じ込めたい——これが仮想化やコンテナ化の出発点です。

分け方には大きく2系統あります。OS の下(ハードウェア層)で分けるのが VMOS の上(プロセス層)で分けるのがコンテナです。

仮想マシン:OSごと仮想化する

VM は ハイパーバイザ(仮想化ソフト)が物理マシンを分割し、それぞれの上に ゲストOS を丸ごと 動かします。各VMは独自のカーネル・独自のメモリ空間を持つ、いわば「箱の中の1台のPC」です。

  • ハイパーバイザが CPU・メモリ・ディスクを仮想的に切り出す
  • 各VMに 独立したゲストOS(カーネル込み) が載る
  • ホストとは別の OS を動かせる(Linux ホスト上で Windows VM など)
  • 隔離が強い:カーネルごと分かれているので、相互干渉が起きにくい

→ 代わりに、OS を何個も起動するぶん メモリ・ディスクを多く消費し、起動も分単位になりがちです。

ハイパーバイザには2種類ある

物理ハードに直接載る Type 1(ベアメタル型:ESXi, Hyper-V, KVM) と、既存OSの上のアプリとして動く Type 2(ホスト型:VirtualBox, VMware Workstation) があります。クラウドのVM(EC2 等)は性能重視で Type 1 が主流です。

コンテナ:カーネルを共有する

コンテナは ホストOSのカーネルをそのまま借りて、アプリとその依存物だけを隔離された空間で動かします。新しい OS を起動するのではなく、1つのプロセス群を「壁で囲う」 イメージです。

その壁を作っているのは、主に Linux カーネルの2つの機能です。

  • namespace:プロセスID・ネットワーク・ファイルシステムなどの 見え方を分離(コンテナからは自分専用の世界に見える)
  • cgroups:CPU・メモリなどの 使用量を制限(1つのコンテナが資源を食い尽くさないように)

ゲストOSを持たないぶん 数十MB〜と軽く、起動は秒〜ミリ秒。同じホストに何十個も詰め込めます。仕組みやコマンドは /devops/tools/docker/ が代表例です。

“コンテナは軽量なVM”ではない

見た目が似ているので混同されがちですが、コンテナは VMの軽量版ではありません。VMはカーネルごと別、コンテナはカーネル共有——分離の仕組みが根本的に違います。「軽い箱」という比喩は便利ですが、隔離の強さまで同じだと思い込むと事故のもとです。

イメージ:箱の“設計図”

コンテナの実体は実行中のプロセスですが、その元になる イメージ が再現性のカギです。イメージは「アプリ+依存ライブラリ+最小限のファイル群」を固めた 読み取り専用のテンプレートで、これを起動するとコンテナになります。

  • Dockerfile(設計図)→ ビルド → イメージ(テンプレート)→ 実行 → コンテナ(実体)
  • イメージは レイヤ構造:差分だけを重ねるのでキャッシュが効き、配布も差分転送で速い
  • 同じイメージなら どこでも同じように動く(「自分の環境では動く」問題を減らす)
# イメージをビルドして実行するだけ
docker build -t myapp:1.0 .
docker run -p 8080:80 myapp:1.0

VMにもイメージ(VMテンプレート/AMI 等)はありますが、OS丸ごとなのでサイズはGB級。コンテナイメージのアプリ単位の小ささ・差分の速さが、CI/CD や大量デプロイと相性が良い理由です。

比較表

観点仮想マシン (VM)コンテナ
分離する層ハードウェア層(ハイパーバイザ)プロセス層(カーネル共有)
OS / カーネルVMごとに独自のゲストOSホストのカーネルを共有
起動速度分単位(OS起動が必要)秒〜ミリ秒
サイズGB級(OS込み)数十MB〜(アプリ+依存)
隔離の強さ強い(カーネルごと分離)VMより弱い(共有カーネル)
別OSを動かす可能(Linux上でWindows等)原則ホストと同系カーネルのみ
向く用途強い隔離・レガシー・別OSアプリの大量配置・CI/CD・マイクロサービス

つまずきポイント

“どちらか”ではなく“重ねて”使う

実務では二者択一ではありません。クラウドのVMの中でコンテナを大量に動かす のが定番構成です。VMで強い隔離とインフラ境界を確保しつつ、その上でコンテナの軽さと可搬性を享受します。Kubernetes クラスタの各ノードがまさにこの形です。

つまずきやすい点を整理します。

  • 隔離の過信:コンテナはカーネルを共有するため、カーネルの脆弱性を突かれるとホストや他コンテナに波及し得ます。マルチテナントで強い隔離が要るなら、VMや軽量VM技術(Firecracker, Kata Containers 等)を検討します。
  • 「コンテナ=Linux」ではない:Windows コンテナも存在しますが、Linux コンテナは Linux カーネル上、Windows コンテナは Windows カーネル上 が原則。Windows/Mac の Docker は内部で Linux VM を動かして橋渡ししています(だから手元では“VMの上のコンテナ”になっている)。
  • 状態の持ち方:コンテナは使い捨て(イミュータブル)前提が基本。データはコンテナ内に貯めず、ボリュームや外部DBへ。この考え方は /devops/immutable-infra/ と地続きです。
“軽いから何でもコンテナ”の罠

カーネルに深く依存するもの(特殊なドライバ、別系統のOS、強い規制で完全隔離が必須なワークロード)は、無理にコンテナ化せず VMのままが正解なこともあります。軽さだけで選ばず、必要な 隔離レベル から逆算しましょう。

どっちを選ぶ?

  • アプリを素早く・大量に・同じ環境で動かしたい(マイクロサービス、CI/CD、スケール)→ コンテナ
  • 強い隔離・別OS・カーネル依存が必要(マルチテナント基盤、レガシー、規制対応)→ VM
  • 両方の良いとこ取り(堅いインフラ境界の上に軽い箱)→ VMの上でコンテナ(実務の主流)

DevOps/インフラ Article

コンテナと仮想マシンの違いを実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

コンテナ

比較で見る軸

難易度: intermediate / カテゴリ: DevOps/インフラ / タグ数: 4

導入後に効く点

コンテナは カーネル共有:プロセスを隔離するだけなので軽量・高速起動だが、分離レベルはVMより弱い。

先に潰すリスク

用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。

数字・仕様の読み方
難易度
intermediate
カテゴリ
DevOps/インフラ
タグ数
4

判断チェックリスト

  • 自社の用途が「コンテナ / 仮想マシン」に近いか確認する。
  • 強みである「VM は OS ごと仮想化:ハイパーバイザの上に各VMが独自カーネルを持ち、隔離は強いが重い。」が本当に評価軸になるか確認する。
  • 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

コンテナ仮想マシンDocker仮想化コンテナ仮想マシンDocker仮想化
参考: 公式情報