1. 概要

この記事では、仮想マシンでLinuxを実行する場合とベアメタルで実行する場合の違いについて説明します。 両方のアプローチの長所と短所について説明します。

最後に、仮想化の代替としてのコンテナ化のテーマに触れます。

2. 仮想マシン上のLinux

仮想マシンは、実際のコンピュータシステムのハードウェアとソフトウェアを模倣するシステムソフトウェアであり、システムで直接実行したくない特定のソフトウェアを実行できるようにします。 たとえば、仮想マシンを使用すると、ネイティブハードウェアにインストールしなくてもLinuxディストリビューションを使用できます。

現在使用されている一般的な仮想マシンには、 Oracle VM VirtualBox Dell VMware Qemu Parallels Desktop 、およびMicrosoftHyperがあります。 -V

2.1. いいもの

仮想マシンは復元力があります。 これにより、古いハードウェア用に設計されたオペレーティングシステムを実行できます。 それだけでなく、新しいハードウェアで古いオペレーティングシステムを実行することもできます。 必要なハードウェアにアクセスできないソフトウェアテストで役立つ場合があります。 これにより、費用と労力が大幅に削減されます。

それとは別に、仮想マシンを使用すると、複数のLinuxディストリビューションを同時に実行できるため、インストールとメンテナンスのオーバーヘッドが削減されます。 したがって、効率とダウンタイムの削減を重視する場合、仮想環境は非常に信頼できる選択肢であることがわかります。

2.2. 悪い人

一部の仮想マシンには、あちこちでいくつかの機能が欠けている場合があります。 たとえば、VirtualBoxはそのままではUSB3.0をサポートしていません。 したがって、weは特定の機能用に追加の拡張機能をインストールする必要がある場合があります。 それとは別に、画面サイズ、色深度、誤った日付/時刻、およびハードウェアアクセラレーションに関する問題も発生する可能性があります。

古いAMDおよびIntelCPUの場合、仮想マシンはハードウェア仮想化と呼ばれるテクノロジーに依存しているため、仮想マシンの実行が問題になる可能性があります。 もちろん、一部の仮想マシンは引き続きソフトウェア仮想化で実行されますが、ユーザーエクスペリエンスは低下します。 それにもかかわらず、ほとんどすべての最新のCPUは、Intel-VTAMD-Vなどのハードウェア仮想化をサポートしています。

もう1つ注意すべき点は、ほとんどのワイヤレスデバイスはブリッジングをサポートしていないため、ゲストオペレーティングシステムでワイヤレスネットワークをセットアップできない可能性があることです。 ただし、ワイヤレスインターフェイスを機能させるための拡張機能と回避策があります。

2.3. ぶさいく

仮想マシンでのLinuxオペレーティングシステムの実行は、間接層が余分にあるため、非常に遅くなる可能性があります。 ソリッドステートドライブは確かに役立つ可能性がありますが、それでもベアメタルで実行するほどスムーズではありません。 したがって、仮想マシンは、ビデオゲームや集中的なディスクI/O操作を実行するための理想的なプラットフォームではありません。

仮想マシンで実行されているオペレーティングシステムは、ホストオペレーティングシステムによって異なります。 そのため、ホストオペレーティングシステムで問題が発生した場合は、ゲストオペレーティングシステムにも影響します。 ほとんどの場合、ゲストオペレーティングシステムに影響する問題はハードウェアに関連しています。 たとえば、マシンのメモリが不足し、未定義の動作が発生する可能性があります。

3. Linux on Native Hardware

3.1. ハードウェアサポート

ベアメタル上のLinuxには、より多くのハードウェアをサポートするという利点があります。 サードパーティのドライバをインストールしなくても、すぐに使用できる最新のハードウェアをサポートします。 それだけでなく、カーネルとファームウェアをダウングレードして、レガシーシステムもサポートすることができます。 したがって、仮想マシンが仮想化できない特定のPCIデバイスを簡単に使用できます

さらに、VMWareやVirtualboxなどの仮想マシンは、仮想ボリュームの作成を最大容量2 TBに制限します。これは、制限がないネイティブハードウェアとは対照的です。

3.2. Linuxサーバー

Linuxサーバーを作成する場合は、より多くの自由、セキュリティ、および安定性を可能にするため、ベアメタルにインストールします。 仮想マシン上のサーバーとしてのLinuxは完全に実現可能ですが、I/Oを集中的に使用する要求の処理に関してはパフォーマンスが大幅に低下します

3.3. ソフトウェア開発

Linuxを主要な開発プラットフォームとして使用することは、柔軟な環境と何千ものオープンソースソフトウェアパッケージの可用性により、非常にやりがいのあるものになる可能性があります。 スクリプトとオープンソースアドオンを使用して、心ゆくまで環境を構成できます。

一方、Linuxベースのシステム用のシステムソフトウェアを開発する場合は、実際のハードウェアで実行されているLinuxでテストする必要があります。 たとえば、ビデオゲームの開発と仮想マシンで実行されているLinuxでのテストは、ベアメタルでネイティブに実行されているLinuxと同じようには動作しません。

4. コンテナ化

場合によっては、1台のマシンで複数のサーバーを実行する必要があり、サーバーごとに適切な環境を提供する必要があります。 環境には、基本的なユーティリティ、依存関係、ライブラリ、実行可能ファイル、および環境変数が含まれます。 そのため、複数のサーバーを実行すると、インストールされているライブラリよりも新しいライブラリに依存する1つのサーバーなど、環境内で競合が発生する可能性があります。 そのため、メンテナンスには費用と時間がかかります。

前に見たように、仮想マシン内のLinuxサーバーは最適なソリューションではなく、複数の仮想マシン内の複数のLinuxサーバーは言うまでもありません。 この問題を解決するために、コンテナーを介してOSレベルの仮想化を実行できます

コンテナーは、サーバーまたはアプリケーションとその環境が必要な依存関係とともに存在するユーザースペースです。 アプリケーションをパッケージ化するプロセスは、コンテナ化として知られています。 つまり、コンテナは複数の分離されたユーザースペースを提供し、仮想マシンは完全なオペレーティングシステムを提供します。 コンテナ化を提供する一般的なプラットフォームには、 Docker Azure Container Registry Podmanなどがあります。

サーバーに複数の仮想マシンをインストールしなくても、単一のLinuxマシンで複数のコンテナーを実行できます。 したがって、マイクロサービスなどのサービス指向ソフトウェアの場合、コンテナーを使用することが効果的なソリューションです。

5. いつ何を使うの?

これまで見てきたように、各アプローチには異なるユースケースがあります。 それぞれのアプローチが最も理にかなっている最も一般的なユースケースを簡単に見ていきましょう。

5.1. Linux on Native Hardware

  • プライマリデスクトップオペレーティングシステム
  • サーバーの展開
  • ソフトウェアの開発とテスト
  • ゲームとメディアのエンコーディング
  • 組み込みシステム
  • ミッションクリティカルなシステム

5.2. 仮想マシンでのLinux

  • Linuxディストリビューションをテストするため
  • Androidなどの特定のLinuxベースのディストリビューションに固有のいくつかのソフトウェアアプリケーションを使用する
  • 古いオペレーティングシステムを使用する

5.3. コンテナ

  • マイクロサービス
  • 継続的インテグレーションとデプロイのためのDevOpsサポート

6. 結論

この記事では、仮想マシンとベアメタル上のLinuxの長所と短所について説明しました。 両方のアプローチを最大限に活用できるさまざまなユースケースを見てきました。 その後、仮想マシンが最適な選択ではない場合に、コンテナーを使用できる場所を確認しました。

最後に、それぞれのアプローチが賢明な解決策となるLinuxのユースケースをいくつか分類しました。