コンテナと仮想マシンの違い——OSを間借りするか、まるごと新築するか

「環境を分ける」ための道具として並べて語られがちなコンテナと仮想マシン。実は分け方の単位がまったく違います。シェアハウスと一戸建てにたとえながら、それぞれの得意分野を整理します。

「アプリを動かす環境を分けたい」という話になると、必ず候補に挙がるのがコンテナ仮想マシンです。 どちらも1台のサーバーの上に複数の環境を作れる点は同じなので、初めて触る人ほど混同しがちです。

先に違いを一言でまとめると、こうなります。

コンテナはOSを間借りする、仮想マシンはOSごと新築する。

同じ「環境を分ける」という目的でも、何を共有して何を独立させるかがまるで違います。この違いを押さえておくと、構築やトラブル対応の判断がぐっと楽になります。


コンテナは「シェアハウス」——OSを間借りする

コンテナを一言でたとえるなら、シェアハウスです。

シェアハウスでは建物そのものは1つで、電気・ガス・水道の契約もまとめて1本です。住人はそれぞれ個室の鍵を持ち、自分の荷物や生活空間をほかの住人と混ざらないように保っています。玄関や台所などの共用部分は使い回しても、個室の中まで踏み込まれることはありません。

コンテナも同じ考え方で動いています。

  1. サーバーにはホストOSが1つだけ動いている
  2. コンテナはそのOSのカーネルを間借りし、プロセスやファイルシステムだけを名前空間で区切って独立させる
  3. アプリごとに必要なファイルはコンテナのイメージにまとめておく
  4. 起動するときは新しいOSを立ち上げ直す必要がなく、プロセスを1つ増やす感覚で済む

このおかげでコンテナは、起動が数秒で終わり、1台のサーバーに何十個も詰め込めるという身軽さを持っています。開発環境と本番環境で「手元では動くのに本番で動かない」という事故も減らせます。

コンテナの欠点——建物を選ぶ

シェアハウスの住人が建物の設備から逃れられないように、コンテナもホストOSのカーネルからは逃れられません。Linux用に作ったコンテナは、Linuxカーネルの上でしか動かせません。Windowsで動かす製品もありますが、実際には内部でLinux環境を1つ用意して、その上でコンテナを動かしています。

シェアハウスの電気系統がまとめて落ちれば全部屋が停電するように、ホストOSのカーネルがクラッシュすれば、その上のコンテナは全部道連れになります。個室の鍵(名前空間)はあくまで論理的な区切りで、建物自体を分けているわけではありません。


仮想マシンは「一戸建て」——まるごと新築する

仮想マシンを一言でたとえるなら、一戸建てです。

一戸建てを建てるときは、電気・ガス・水道のメーターから区画まで、すべて新しく用意します。隣の家の設備トラブルに巻き込まれることはなく、水道管が壊れても影響は自分の家だけで収まります。そのぶん、着工から入居までは時間がかかります。

仮想マシンも同じで、仮想化の仕組みを使って1台の物理サーバーの上に、まるごと独立したコンピューターを作ります。

  • ハイパーバイザーと呼ばれるソフトが、CPUやメモリを仮想的な部品として仮想マシンに割り当てる
  • 仮想マシンはその部品の上に、ゲストOSを最初から起動する
  • ホストと異なるOS(例: LinuxのサーバーにWindowsの仮想マシン)を混在させることもできる

この仕組みにより仮想マシンは、ホストからもほかの仮想マシンからも隔離された、独立性の高い環境を作れます。1つの仮想マシンで障害が起きても、同じサーバー上のほかの仮想マシンには影響しにくくなっています。

仮想マシンの欠点——新築のぶん、重い

一戸建てを建てるのに時間がかかるように、仮想マシンもゲストOSの起動を待つ必要があり、立ち上がるまでに数十秒から数分かかります。

仮想マシン1つひとつがOS丸ごとのメモリやディスクを抱えるため、同じ物理サーバーに詰め込める数はコンテナよりずっと少なくなります。


比較表

特徴コンテナ仮想マシン
分ける単位OSのプロセス・ファイルシステムOSそのもの(ハードウェアごと)
起動時間数秒数十秒〜数分
1台に詰め込める数多い少ない
隔離の強さ論理的な区切り(カーネル共有)物理的に近い独立性
異なるOSの混在基本できない(ホストと同系統のカーネルが必要)できる
向いている用途Webアプリ、マイクロサービス、CI/CD異なるOSの共存、強い隔離が必要な基盤

どう使い分けるか

判断に迷ったら、まずコンテナで組んでみるのがよいです。起動が速く詰め込める数も多いので、Webアプリケーションやマイクロサービスのようにアプリ単位で環境を分けたい場面では、コンテナのほうが小回りが利きます。

一方で、次のような場面では仮想マシンを選びます。

  • 1台の物理サーバーの上でLinuxとWindowsを両方動かしたいとき
  • 契約者ごとにOSレベルで完全に隔離したい(強い隔離が求められるマルチテナント環境)とき
  • 古いOSやミドルウェアを、ホストの環境に手を入れずそのまま動かしたいとき

実務では、仮想マシンの中でさらにコンテナを動かす構成もよく使われています。仮想マシンで大きな区画(強い隔離)を作り、その中をコンテナで細かく分ける、いわば「一戸建ての中をさらにシェアハウスにする」やり方です。クラウド上の仮想マシンでコンテナを動かす構成は、まさにこれにあたります。


コンテナと仮想マシンのどちらかを選ぶ場面に出会ったら、まず「どこまで隔離したいか」を自分に問いかけてみてください。プロセスを分ければ十分ならコンテナ、OSごと分けたいなら仮想マシン。この基準さえ持っておけば、構成図を前にして迷う時間はぐっと減るはずです。