検索
特集/連載

いまさら聞けない「仮想マシン」と「コンテナ」の違い 使い分け方は?仮想マシンとコンテナを徹底解説【第3回】

依然として多くのインフラで重要な役割を担っている仮想マシンと、クラウドネイティブな技術として台頭してきたコンテナ。両者の違いを明らかにし、どう使い分けるべきかを解説する。

Share
Tweet
LINE
Hatena

 アプリケーションの開発や更新を素早く行いたい、インフラの運用をより効率的にしたい、といったニーズが高まる中、改めて注目を集めている仮想化技術。物理サーバごとに分離された仮想環境を提供する仮想マシン(VM)が広く使われる一方で、「コンテナ」の仮想化技術も存在感を増している。

 仮想マシンとコンテナは、いずれも仮想化の一形態として語られることが多いが、両者の仕組みは大きく異なる。仮想化とコンテナの違い、そしていま求められている仮想化技術の在り方を押さえておこう。

いまさら聞けないコンテナは仮想マシンと何が違うか

 コンテナ化とは、アプリケーションとその実行に必要な環境(ソースコードや依存関係、設定など)を一つの単位としてパッケージ化し、他のアプリケーションとは分離した状態で実行できるようにする技術を指す。これにより、異なるOSやインフラ環境であっても、アプリケーションを安定して動作させやすくなる。

 仮想マシンとは異なり、コンテナはホストOS(物理サーバ上で稼働するOS)のカーネルを直接利用する。各コンテナは独立して動作するように見えるが、実際には同じホストOSのカーネルを共有している。その分だけ、独立したOSを持つ仮想マシンよりも軽量かつ高速に起動できるのがコンテナの特徴だ。

 コンテナには、アプリケーションの実行に必要なソースコードに加え、システムツール、ランタイム(実行環境)、ライブラリ(アプリケーションが利用す部品の集まり)、設定ファイルなどが含まれている。これらを1つにまとめてパッケージ化することで、単一のOS上でも複数のコンテナを並行して実行できるため、複数のアプリケーションを効率よく稼働させたい場面でよく使われる。

 コンテナは、マイクロサービスを基盤とする分散アプリケーションなど、クラウド環境での運用を前提とした「クラウドネイティブ」なアプリケーションに使われている。アプリケーションの可搬性(ポータビリティー)を高めたり、展開を簡素化したりする目的でもコンテナを活用するケースが広がっている。

 こうしたコンテナ技術を広く普及させるきっかけとなったのが、2013年に登場したLinuxベースのコンテナ管理ツール「Docker」だ。

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

 仮想マシンは、ホストマシン(物理サーバ)のCPUやメモリ、ストレージといったリソースを個別に割り当てて動作する。そのため、1台の仮想マシンがストレージやメモリなどを過剰に消費し、別のVMが十分なリソースを使えなくなるといった偏りが生じる可能性がある。こうした状況を防ぐには、リソースを適切に分配・制御する必要がある。仮想環境全体のリソースを抽象化し、バランスよく管理できるようにするための仮想化ソフトウェアがハイパーバイザーだ。

 コンテナは、仮想マシンに比べてオーバーヘッド(余分な処理負荷)が小さく、はるかに軽量だ。起動も速く、CPUやメモリといったリソースの消費も少ない。アプリケーションとその実行環境をまとめて持ち運べる特性もあるため、異なる実行環境への移行(移植)もしやすい。こうした特性から、マイクロサービスアーキテクチャなどの最新のアプリケーション設計に適している。

 ただし、コンテナはホストOSのカーネルを利用する仕組みであるため、Linuxで作ったコンテナはLinux上でしか動かせないなど、基本的に同じOS環境が必要になる。一方、仮想マシンは独自のOS(ゲストOS)を搭載しており、ホストマシンとは異なる種類のOSを実行することができる。仮想マシンはコンテナに比べて高い隔離性を持ち、これはセキュリティや安定性の確保がしやすいという利点につながる。

 こうした特性から、仮想マシンは、複数のアプリケーションを同時に稼働させたい場合や、機能が密接に結び付いた大規模なモノリシックアプリケーションを運用する場合に適している。特に、古いOSやミドルウェアに依存しており、他のシステムと混在させると不具合やセキュリティ上の問題が生じかねないレガシーアプリケーションにとっては、仮想マシンのように他の環境と完全に分離された実行基盤が有効だ。

仮想マシンとコンテナの併用

 仮想マシンとコンテナは、併用することでそれぞれの強みを生かすことができる。仮想マシンは高い隔離性をもたらし、コンテナは軽量かつ迅速なデプロイを実現する。コンテナだけでは補い切れないセキュリティ層を仮想マシンで補強することも可能だ。こうした構成により、最新のクラウドネイティブアプリケーションと、既存のレガシーアプリケーションの両方を同じ基盤で支える「ハイブリッドインフラ」が実現できる。

 このようなハイブリッド環境は、HCI(ハイパーコンバージドインフラ)製品でも採用が進んでいる。多くのHCI製品は、コンテナオーケストレーションツール「Kubernetes」に対応しており、コンテナ化したワークロード(アプリケーションやその処理タスク)を仮想マシンで実行できる。これにより、従来の仮想マシンベースのシステムと最新のクラウドネイティブなワークロードを、同じインフラで効率的に運用できるようになる。


 次回は代表的な仮想化製品を紹介する。

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る