どちらも「1台のパソコンの中に、別環境を作る」技術
VM(仮想マシン)とコンテナは、どちらも、1台の物理的なパソコン(サーバー)の中に、独立した別のシステム環境を作り出すための技術です。しかし、その実現方法には大きな違いがあります。
VM(仮想マシン)とは
VMは、1台のパソコンの中に、まるごと独立した、別のコンピューターをそっくりそのまま再現する技術です。OS(基本ソフト)そのものを、それぞれの仮想マシンごとに個別に用意します。
コンテナとは
以前の記事で紹介したDockerに代表されるコンテナは、OSの根幹部分は元のパソコンのものを共有しつつ、アプリケーションを動かすために必要な部分だけを、軽量に分離して独立させる技術です。
「一戸建て」と「マンションの一室」に例えると
- VM(仮想マシン):それぞれが独立した「一戸建て」を、まるごと建てるイメージ。土台(OS)から個別に用意するため、必要なスペース(容量)も大きくなり、建てる(起動する)のにも時間がかかります
- コンテナ:1つの建物(元のOS)の中に、間仕切りをして複数の「部屋」を作るイメージ。建物の土台部分は共有するため、部屋(コンテナ)ごとの準備は軽量で、非常に素早く用意できます
それぞれのメリット・デメリット
VMのメリット・デメリット
- メリット:OSレベルで完全に独立しているため、隔離性(他への影響のなさ)が非常に高い
- デメリット:1つ1つが重く、起動に時間がかかり、多くのリソース(容量・処理能力)を必要とする
コンテナのメリット・デメリット
- メリット:非常に軽量で、起動が高速。1台のパソコンの中に、多数のコンテナを効率よく稼働させられる
- デメリット:OSの根幹部分を共有しているため、VMと比較すると隔離性はやや劣るとされる
使い分けの目安
強固な隔離性が求められる場面ではVM、開発環境の手軽な再現や、多数の環境を効率的に稼働させたい場面ではコンテナ、というように、目的に応じて使い分けられています。近年は、コンテナの手軽さが評価され、開発現場を中心に活用が広がっています。
「新しいから」で選ぶと失敗する
実務で感じるのは、「新しい技術だからコンテナにすればいい」というわけではないということです。コンテナは非常に便利ですが、システムによってはVMの方が運用しやすいケースもあります。例えば、既存システムがVM前提で安定している、運用担当者がコンテナに慣れていない、移行することで得られるメリットが小さい、古いシステムで変更箇所が多い、という場合です。逆に、複数の環境で同じアプリケーションを動かしたい場合などは、コンテナのメリットが非常に大きくなります。最初から「コンテナが正解」と決めるのではなく、「何を解決したくてコンテナを使うのか」を考えることが重要だと感じます。技術選定では、最新かどうかよりも、その企業が5年後も運用できるかを見るようにしています。
振り返ると
VMは「独立した家をまるごと用意する」技術、コンテナは「土台を共有しながら、部屋だけを分離する」技術です。それぞれの特性を理解し、目的に応じて選択されています。
関連記事:Kubernetesとは/サーバーレスとは