最終更新:

【図解で比較】Docker vs 仮想マシン — コンテナとVMの違いを徹底解説


Docker vs 仮想マシンの構造比較 仮想マシン (VM) ハードウェア ハイパーバイザー ゲストOS App A Bins/Libs ゲストOS App B Bins/Libs ゲストOS App C Bins/Libs 各VMにOS丸ごと Docker(コンテナ) ハードウェア ホストOS(カーネル共有) Docker Engine App A Bins/Libs App B Bins/Libs App C Bins/Libs OSなし・軽量・高速 起動: 数十秒〜数分 / 数GB 起動: 1秒以内 / 数十MB
Docker vs 仮想マシンの構造比較
ひよこ ひよこ
最近「Docker」ってよく聞くけど、仮想マシンとは何が違うの?
ペンギン先生 ペンギン先生
いい質問だね。まず仮想マシンは、1台の物理サーバーの上に「まるごと別のパソコン」を再現する技術なんだ。OSもカーネルも全部入りで動かすから、完全に独立した環境が手に入るよ。
ひよこ ひよこ
まるごと別のパソコン…!それってすごく重そうなの?
ペンギン先生 ペンギン先生
そのとおり。VMは「ハイパーバイザー」という管理ソフトの上にゲストOSをまるっと載せるから、1台あたり数GBのメモリを使うし、起動にも数十秒〜数分かかるんだ。一方でDockerは「コンテナ」という仕組みで、ホストOSのカーネルを共有しながらアプリだけを隔離するよ。
ひよこ ひよこ
カーネルを共有するってことは、OSを何個も立ち上げなくていいってことなんだね!
ペンギン先生 ペンギン先生
そういうこと!だからDockerコンテナは数十MBくらいで済むし、起動も1秒以内なんだ。VMが「一戸建てを丸ごと建てる」なら、コンテナは「シェアハウスの個室を区切る」イメージだね。
ひよこ ひよこ
なるほど!でもシェアハウスだと隣の部屋の音が聞こえちゃうみたいに、セキュリティは大丈夫なの?
ペンギン先生 ペンギン先生
鋭いね。VMはハードウェアレベルで分離されてるから隔離性がとても高い。コンテナLinuxのnamespaceやcgroupsという仕組みで分離してるけど、カーネルを共有している分、VMほどの隔離強度はないんだ。だから本番環境で「信頼できないコード」を動かすなら、VMのほうが安全と言われるよ。
ひよこ ひよこ
じゃあ、どういうときにDockerを使って、どういうときにVMを使うの?
ペンギン先生 ペンギン先生
Dockerが得意なのは、開発環境の統一、CI/CDパイプラインマイクロサービスの運用だね。「同じ環境をチーム全員で共有したい」「デプロイを高速に繰り返したい」ときに最適だよ。VMは、異なるOSを動かしたいときや、強い隔離が必要なマルチテナント環境で活躍するんだ。
ひよこ ひよこ
開発はDockerセキュリティ重視はVMっていう感じなんだね。両方を組み合わせることもあるの?
ペンギン先生 ペンギン先生
もちろん!クラウドではVMの中でDockerを動かすのが一般的だよ。AWSのEC2(VM)の上でECS(コンテナ)を動かしたり、KubernetesのノードがVM上で動いていたりするんだ。両方の良いとこ取りができるんだね。
ひよこ ひよこ
ところで、コンテナセキュリティが弱いなら、それを強化する技術もあるの?
ペンギン先生 ペンギン先生
いいところに気づいたね!「コンテナエスケープ」というコンテナからホストに侵入される攻撃が実際に起きていて、業界でも課題になっているんだ。そこで登場したのがKata ContainersやAWSのFirecrackerだよ。これらは「軽量VM」の中でコンテナを動かすことで、コンテナの速さとVMの隔離性を両立させているんだ。
ひよこ ひよこ
軽量VMってことは、普通のVMより速いの?
ペンギン先生 ペンギン先生
Firecrackerは起動に125ミリ秒しかかからない超軽量なmicroVMなんだ。AWS Lambdaの裏側でも使われていて、何千ものファンクションを安全に隔離しながら高速に起動しているよ。コンテナ vs VMという二者択一じゃなくて、両方の技術が融合していく流れが今のトレンドだね。