概要
Linux® コンテナと仮想マシン (VM) は、さまざまな IT コンポーネントが組み合わさってシステムの他の部分から分離している、パッケージ化されたコンピューティング環境です。この 2 つの違いは、主に規模と可搬性です。
- コンテナのサイズは通常、メガバイト単位です。パッケージに含まれるものはアプリケーションと実行に必要なすべてのファイルのみで、特定のタスクを実行する単一の機能 (マイクロサービスと呼ばれる) をパッケージ化するためによく使われます。コンテナは軽量で、オペレーティングシステム (OS) が共有されているので、複数の環境間での移行が非常に簡単です。
- VM のサイズは通常、ギガバイト単位です。独自の OS を持つため、リソースを集中的に使用する複数の機能を一度に実行できます。多くのリソースを利用できるので、サーバー、OS、デスクトップ、データベース、およびネットワーク全体の抽象化、分割、複製、エミュレートが可能です。
こうした技術的な違いよりも大きな視点でこの 2 つを比べることは、先進的な IT プラクティスと従来の IT アーキテクチャを比較することであるとも言えます。
従来の IT アーキテクチャ (モノリシックとレガシー) :ワークロードのあらゆる側面を単一の大きなファイルタイプに保持します。分割できないため、大規模な環境 (多くの場合、VM) 内で全体をパッケージ化する必要があります。かつては、VM 内でアプリケーション全体を構築して実行する方法が一般的でしたが、すべてのコードと依存関係を 1 カ所にまとめなくてはならないために VM のサイズが大きくなり、更新のプッシュ時に障害の連鎖やダウンタイムが発生しました。
どちらを使用すべきか
その答えは、簡単に移行できる小さなインスタンス (コンテナ) が必要か、カスタム IT リソースを半永久的に割り当てる必要があるかで異なります。
コンテナは小さく、軽量なので、ベアメタルシステムだけでなく、パブリック、プライベート、ハイブリッド、およびマルチクラウド環境間でも、簡単に移行できます。また、コンテナは、今日のクラウドネイティブ・アプリケーションをデプロイするための理想的な環境でもあります。これは、パブリック、プライベート、ハイブリッド、マルチクラウド環境全体で一貫した開発と自動化された管理エクスペリエンスを提供するように設計されたマイクロサービスの集合体です。クラウドネイティブ・アプリケーションは、新しいアプリケーションの構築、既存アプリケーションの最適化、それらすべての接続のスピードアップを支援します。注意点は、コンテナが基盤となる OS に対応している必要があることです。VM と比較すると、コンテナは次の用途に最適です。
- クラウドネイティブ・アプリケーションを構築する
- マイクロサービスをパッケージ化する
- DevOps または CI/CD プラクティスを導入する
- 同じ OS を共有する多様な IT フットプリント全体でスケーラブルな IT プロジェクトを移行する
VM は、単一のコンテナよりもはるかに多くのオペレーションを実行できるので、従来より (そして現在も変わらず)、モノリシックなワークロードをパッケージ化する方法として活用されてきました。しかし、その豊かな機能は、OS、アプリケーション、ライブラリに依存するため、VM の可搬性は大幅に低下します。コンテナと比較すると、VM は次の用途に最適です。
- 従来型、レガシー、モノリシックのワークロードを収容する
- リスクの高い開発サイクルを分離する
- インフラストラクチャのリソース (ネットワーク、サーバー、データなど) をプロビジョニングする
- 別の OS 内で異なる OS を実行する (Linuxで Unix を実行するなど)
仮想化
ハイパーバイザーと呼ばれるソフトウェアがリソースを物理マシンから分離して、VM 専用にパーティション化できるようにします。ユーザーが物理環境からの追加リソースを必要とする VM 命令を発行すると、ハイパーバイザーは要求を物理システムに中継し、変更をキャッシュします。VM の見た目と動作は物理サーバーに似ています。これは、アプリケーションの依存関係と OS フットプリントの大きさ (その多くは単一のアプリケーションやマイクロサービスの実行には不必要) という欠点を増大させる可能性があります。
コンテナ
コンテナには、マイクロサービスまたはアプリケーションと、それを実行するために必要なすべてのものが含まれています。コンテナ内のものはすべて、イメージと呼ばれる、すべてのライブラリと依存関係を含むコードベースのファイルに保存されます。イメージには RPM パッケージと構成ファイルが付属しているため、これらのファイルは Linux ディストリビューションのインストールと見なすことができます。コンテナは非常に小さいので、通常は数百ものコンテナが疎結合されます。そのため、コンテナのプロビジョニングと管理にはコンテナ・オーケストレーション・プラットフォーム (Red Hat OpenShift や Kubernetes など) が使用されます。
Red Hat を選ぶ理由
Red Hat は、仮想化とコンテナ開発を長い間サポートしてきました。カーネルベースの仮想マシン (KVM) と oVirt コミュニティが設立されて以来、当社はその両方に貢献してきました。また、Docker と Kubernetes のコードベースにとっては 2 番目に大きな貢献者です。また、これら 2 つのテクノロジーの未来にも投資しています。当社がコンテナネイティブの仮想化、KubeVirt、ハイパーコンバージド・インフラストラクチャに従事することによって、コンテナと VM が同じ IT システムの一部としてより適切に連携するようになってきています。