1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

仮想化の進化:VMとコンテナの違いをシンプルに解説!

Last updated at Posted at 2025-02-21

はじめに

  • 前回の記事では、Immutable InfrastructureとIaC(Infrastructure as Code)の基本概念について解説しました。
    • 今回は、仮想化技術の中でもハードウェア仮想化コンテナ仮想化の違いを説明します。
  • いつものように、わかりやすさを優先して記載します。厳密な時系列などは目をつむって、お楽しみください。

仮想化って何?

さて、そもそも仮想化とは何なのか?
シンプルに言えば、「1つの物理マシンを、あたかも複数の独立したコンピュータのように見せる技術」 です。
なぜそんなことをするのか?理由は明白です。

  • ハードウェアのリソースを無駄なく使いたい
  • システムの柔軟性を向上させたい
  • 環境の再現性を高めたい

これを実現する方法として、大きく分けて ハードウェア仮想化コンテナ仮想化 の2種類があります。
次のセクションでは、それぞれの違いを詳しく見ていきましょう。

仮想化の基本アイデア

仮想化の本質はシンプルです。
「アプリケーションが見ている世界を、どこかで誤魔化してしまおう」 という発想です。

たとえば、アプリケーションが「このマシンは1つのCPUと8GBのメモリを持っている」と思っているとします。
でも、実際には、それは「仮想化ソフトウェア」が作り出した幻影かもしれません。
裏では、1台の物理マシンのリソースが分割されていたり、逆に束ねられていたりするのです。

この「誤魔化し」をどの層でやるか? です。

まず、一般的なコンピュータの基本構成を図示すると。

ノイマン型コンピュータの基本構成.png

こんな感じになります。このどこかのレイヤで横やりを入れて、アプリケーションをごまかすのが仮想化技術です。それぞれ見ていきましょう。

  • ハードウェア仮想化(VM)

OSのさらに下、ハードウェア層で誤魔化します。

ノイマン型コンピュータの基本構成とハイパーバイザー.png

先ほどの図のハードウェアのレイヤをHypervisorが 仮想マシンとして代替を提供します。Operaing Systemより上位の層はその幻の上で動作します。

Container-仮想化基盤.drawio.png

こちらをご覧いただくとよりイメージがつきやすいのではないでしょうか。実際には1セットの物理レイヤに、仮想マシンを提供しOSより上位の層をごまかすわけです。もちろん実際の物理レイヤには3台の仮想マシンを動作させるだけのコンピューティングリソースが必要になります。

  • コンテナ仮想化(OS統合)
    OSのレベルで誤魔化す方法です。コンテナエンジン(DockerやPodmanなど)が、アプリケーションの環境をカプセル化し、ホストOSのカーネルを共有1しながら動作する。

ノイマン型コンピュータの基本構成とコンテナエンジン.png

コンテナ仮想化では、ホストOSのカーネルのプロセス分離機能を用いながら、アプリケーションを分離した環境で動かすのがポイントです。それぞれのコンテナは独立した環境に見えますが、実際には物理レイヤの仮想化は一切行っていません。仮想マシンの起動⇒OSの起動⇒ミドルウェアの起動⇒アプリケーションと各レイヤー個別に起動する必要はなく、ホストOS上のでプロセスを起動するだけでよいため、VMよりも軽量かつ高速に動作します

いずれも、アプリケーションが「普通に動いている」と思っているだけで、実際の動作環境は全然違うものになっています。

この「見せかけの世界」を作るのが仮想化のアイデアなのです。

Hypervisor型の仮想化とコンテナ仮想化の特徴をいかにまとめます。

VMとコンテナの違い

項目 仮想マシン(VM) コンテナ
仮想化レイヤ ハードウェア層(Hypervisor) OSレイヤ(コンテナエンジン)
OSの管理 VMごとに独立したOS ホストOSを共有
起動時間 数分(OSの起動が必要) 数秒(軽量プロセス)
リソース効率 重い(OSごと動作) 軽い(カーネル共有)
分離性 高い(完全に独立) 中程度(ホストOSに依存)
適用例 Windows/Linuxの混在環境、完全な独立性が必要な場合 マイクロサービス、クラウドネイティブなアプリ

そもそも、仮想化ってなぜ必要になったのか?

考えてみてください。
仮想化とは、物理ハードウェアとアプリの間に抽象化レイヤーを挟み、より柔軟なシステム構築を可能にする技術 です。
一見すると、遅くなる・リソースを食う・管理が複雑になる などのデメリットもありますが、実際にはITインフラの進化によって不可欠な技術となっています。

なぜ仮想化は今や当たり前になったのか?
それは、コンピュータの進化によって「圧倒的なリソース」を扱えるようになったからです。


たった20年で、メモリが 1024倍 に?

例えば、1998年ごろ、私が初めて買ったWindows PCのメモリは たったの64MB
一方、今使っている自作PCのメモリは 64GB です。

実に1024倍! 当時のSolarisサーバー数台分のメモリが、今や 2万円弱 で手に入る時代になりました。

さらに、ちょっとサーバー製品を調べると…
4TBのメモリ を積めるマシンまである!

今や、スマートフォンですら 8GB以上のメモリを搭載する時代 です。

他のリソースに目をやると、CPUのコア数は当時1~2個が普通でしたが、今では16コア以上のプロセッサが一般的になり、
ストレージも**HDD→SSD(SATA)→SSD(NVMe)**へと進化し、速度は桁違いになっています。

総じて、コンピューティングリソースは高速化し、コストが下がり、大容量化しているのです。


ここまでリソースが増えたら、どうする?

でも、ちょっと考えてみてください。
そんな大容量メモリ、本当に1台のサーバーで使い切れる?

不可能とは言いません。でも、普通のアプリケーションなら そこまで要らない
「じゃあ、もっと小さいメモリを作ってくれ!」と思いますよね?

しかし、一般的なエンタープライズ用途では、技術進化の波に乗って大容量リソースが主流となり、小容量のリソースは、エッジコンピューティングや組み込みシステムなど、特定の用途に限定されつつあります。
その結果、市場にはより大きく、より速いリソースが供給され続けます。


そこで生まれたのが「仮想化」

こうなると、自然と出てくる欲求があります。

「せっかく大量のリソースがあるんだから、1台のサーバーで複数のサーバーの役割を担わせたい」

こうして生まれたのが仮想化技術です。
もともと仮想化技術はメインフレームの時代から存在しましたが、クラウドの台頭とともに、コスト削減と柔軟性の向上を目的として一般化しました。
もはや、選択肢ではなく「リソースを無駄にしないための必然」。
仮想化は、余ったリソースを最大限活用するために登場し、今やITの常識となりました。

まとめ & 次回予告

仮想化技術は、「物理リソースを効率的に使う」ための重要な技術であり、大きく ハードウェア仮想化(VM)コンテナ仮想化 の2種類に分かれます。

  • VM(ハードウェア仮想化) は、物理マシンの上に Hypervisor を挟み、独立したOSを持つ仮想マシンを動作させる方式。
  • コンテナ仮想化 は、ホストOSのカーネルを共有 しつつ、個々のアプリケーションを分離する方式。
  • VMは分離性が高く、異なるOSを扱えるが重い。コンテナは軽量で高速だが、ホストOSに依存する面がある。

なぜ仮想化は求められるのか?

仮想化が必要とされる背景には、以下のようなニーズがあります。

  • 物理リソースの有効活用
    かつてのサーバーは1台1アプリケーションが基本でしたが、リソースの余剰が多く、コストがかかりすぎる問題がありました。仮想化により、1台のサーバーで複数のワークロードを効率的に運用できます。

  • システムの柔軟性向上
    環境の分離が容易になり、テスト・本番環境の切り替えや、システムの拡張・縮小が迅速に行えます。

  • 環境の再現性向上
    VMやコンテナを活用することで、環境をコードとして管理でき、開発環境と本番環境の差異をなくす ことが可能になります。

  • クラウド時代のワークロード適応
    クラウドサービスでは、仮想マシン(IaaS)やコンテナ(CaaS)が標準的なワークロードとなっており、仮想化なしでは運用が難しくなっています。

近年、クラウドネイティブな開発では 「軽量・高速なコンテナ仮想化」 が主流となり、マイクロサービスCI/CD の環境に不可欠な技術となっています。


次回は…Container仮想化 × IaC(Infrastructure as Code)を深掘り!

ここまで仮想化の進化を見てきましたが、次回は 「コンテナ仮想化の実践的な活用」 を深掘りします。

  • コンテナの仕組みをもう少し詳しく(cgroups・namespaceなど)
  • IaC(Infrastructure as Code)とコンテナの親和性
  • コンテナ×IaCの実践例(Terraform, Kubernetes, Docker Compose)

仮想化の「誤魔化しのレイヤー」を理解したうえで、インフラをコードで制御するIaCの世界へ!
次回もお楽しみに! 🚀

  1. この説明には語弊があります。詳細は後述します。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?