1. 序章
仮想化とコンテナ化は、コンピューターシステムでアプリケーションをホストするために最も頻繁に使用される2つのメカニズムです。 仮想化では、仮想マシンの概念を基本単位として使用します。 一方、コンテナ化はコンテナの概念を使用します。 これらのテクノロジーはどちらも重要な役割を果たし、長所と短所があります。
この記事では、これらのテクノロジーの両方を紹介し、いくつかの特性を比較します。
2. 仮想化
仮想化は、コンピューターリソースのソフトウェアベースまたは仮想バージョンを作成するのに役立ちます。 これらのコンピューターリソースには、コンピューティングデバイス、ストレージ、ネットワーク、サーバー、さらにはアプリケーションが含まれます。
これにより、組織は単一の物理コンピューターまたはサーバーを複数の仮想マシン(VM)に分割できます。 その後、各VMは独立して対話し、単一のコンピューターのリソースを共有しながら、さまざまなオペレーティングシステムまたはアプリケーションを実行できます。
2.1. 仮想化はどのように機能しますか?
ハイパーバイザーソフトウェアは、v irtualizationを容易にします。 ハイパーバイザーは、オペレーティングシステムの上にあります。 ただし、ハードウェアに直接インストールするハイパーバイザーを使用することもできます。 ハイパーバイザーは物理リソースを取得し、仮想環境がそれらを使用できるようにそれらを分割します。
ユーザーまたはプログラムが物理環境からの追加リソースを必要とする命令をVMに発行すると、ハイパーバイザーは要求を物理システムに中継し、変更をキャッシュします。 ハイパーバイザーには、タイプ1(ベアメタル)とタイプ2(ホスト)の2種類があります。
仮想化の主な機能は、同じハードウェア上でさまざまなオペレーティングシステムを実行できることです。 各仮想マシンのオペレーティングシステム(ゲストOS)は、ブートストラップ、カーネルのロードなど、必要なすべての起動アクティビティを実行します。 ただし、各ゲストOSは、基盤となるOSへのフルアクセスを取得しないように、高度なセキュリティ対策によって制御されます。
3. コンテナ化
コンテナ化は、仮想化の軽量な代替手段です。 これには、独自の動作環境を備えたコンテナにアプリケーションをカプセル化することが含まれます。 したがって、コンテナは仮想マシンごとにOSをインストールする代わりに、ホストOSを使用します。
3.1. コンテナ化はどのように機能しますか?
各コンテナは、ホストOS上で実行されるソフトウェアの実行可能パッケージです。 ホストは同時に多くのコンテナをサポートできます。 たとえば、マイクロサービスアーキテクチャ環境では、すべてのコンテナが、他の人がアクセスできない最小限のリソース分離プロセスで実行されるため、この設定は機能します。
前の図は、コンテナー化されたアーキテクチャーのレイアウトを示しています。 コンテナは、多層ケーキの最上層と見なすことができます。
- レイヤーの最下部には、CPU、ディスクストレージ、ネットワークインターフェイスなどの物理インフラストラクチャがあります
- その上に、ホストOSとそのカーネルがあります。 カーネルは、OSのソフトウェアとハードウェアリソースの間のブリッジとして機能します
- コンテナエンジンとその最小限のゲストOSは、ホストOSの上にあります
- 最上部には、バイナリ、各アプリケーションのライブラリ、および分離されたユーザースペースで実行されるアプリがあります。
コンテナ化はcgroupsと呼ばれるLinux機能から進化しました。これは、オペレーティングシステムプロセスのリソース使用量を分離および制御するための機能です。
たとえば、CPUとRAMの量、またはプロセスがLinuxカーネル内でアクセスできるスレッドの数を定義します。 cgroups は後にLinuxContainers(LXC)になり、ルーティングテーブルやファイルシステムなどのコンポーネントの名前空間を分離するためのより高度な機能を備えています。
4. 比較
さまざまな側面での仮想化とコンテナ化の比較を要約してみましょう。
領域 | 仮想化 | コンテナ化 |
---|---|---|
隔離 | ホストオペレーティングシステムおよび他のVMからの完全な分離を提供します | 通常、ホストや他のコンテナからの軽量な分離を提供しますが、VMほど強力なセキュリティ境界は提供しません |
オペレーティング·システム | カーネルを含む完全なオペレーティングシステムを実行するため、CPU、メモリ、ストレージなどのより多くのシステムリソースが必要になります | オペレーティングシステムのユーザーモード部分を実行し、より少ないシステムリソースを使用して、アプリに必要なサービスのみを含めるように調整できます |
ゲストの互換性 | 仮想マシン内のほぼすべてのオペレーティングシステムを実行します | ホストと同じオペレーティングシステムバージョンで実行されます |
展開 | ハイパーバイザーソフトウェアを使用して個々のVMを展開する | Docker を使用して個々のコンテナーをデプロイするか、Kubernetesなどのオーケストレーターを使用して複数のコンテナーをデプロイします |
永続的なストレージ | 単一のVMのローカルストレージには仮想ハードディスク(VHD)を使用し、複数のサーバーで共有されるストレージにはサーバーメッセージブロック(SMB)ファイル共有を使用します | 単一ノードのローカルストレージにはローカルディスクを使用し、複数のノードまたはサーバーで共有されるストレージにはSMBを使用します |
負荷分散 | 仮想マシンの負荷分散は、フェールオーバークラスター内の他のサーバーでVMを実行することによって行われます。 | オーケストレーターは、クラスターノード上のコンテナーを自動的に開始または停止して、負荷と可用性の変更を管理できます。 |
ネットワーキング | 仮想ネットワークアダプタを使用します | 仮想ネットワークアダプターの分離ビューを使用します。 したがって、仮想化が少し少なくなります |
5. 結論
このチュートリアルでは、仮想化とコンテナ化について説明しました。
最初に、仮想化を紹介し、それがどのように機能するかについて説明しました。 次に、コンテナ化の概念に移り、その仕組みの概要を説明しました。
仮想化とコンテナ化のいくつかの側面を比較して、記事を締めくくりました。