Jump to section

コンテナと VM

URL をコピー

Linux® コンテナ仮想マシン (VM) は、さまざまな IT コンポーネントが組み合わさってシステムの他の部分から分離している、パッケージ化されたコンピューティング環境です。この 2 つの違いは、主に規模と可搬性です。

  • コンテナのサイズは通常、メガバイト単位です。パッケージに含まれるものはアプリケーションと実行に必要なすべてのファイルのみで、特定のタスクを実行する単一の機能 (マイクロサービスと呼ばれる) をパッケージ化するためによく使われます。コンテナは軽量で、オペレーティングシステム (OS) が共有されているので、複数の環境間での移行が非常に簡単です。
  • VM のサイズは通常、ギガバイト単位です。独自の OS を持つため、リソースを集中的に使用する複数の機能を一度に実行できます。多くのリソースを利用できるので、サーバー、OS、デスクトップ、データベース、およびネットワーク全体の抽象化、分割、複製、エミュレートが可能です。

こうした技術的な違いよりも大きな視点でこの 2 つを比べることは、先進的な IT プラクティスと従来の IT アーキテクチャを比較することであるとも言えます。

先進的な IT プラクティス (クラウドネイティブ開発、CI/CDDevOps):ワークロードを提供可能な最小単位 (通常は機能あるいはマイクロサービス) に分割することにより実現されます。これらの小さなユニットはコンテナにパッケージ化するのが最適です。これにより、複数のチームが、他のコンテナにパッケージ化されたコードを中断したり危険にさらしたりせずに、アプリケーションやサービスの各パーツに取り組むことができます。

従来の IT アーキテクチャ (モノリシックとレガシー) :ワークロードのあらゆる側面を単一の大きなファイルタイプに保持します。分割できないため、大規模な環境 (多くの場合、VM) 内で全体をパッケージ化する必要があります。かつては、VM 内でアプリケーション全体を構築して実行する方法が一般的でしたが、すべてのコードと依存関係を 1 カ所にまとめなくてはならないために VM のサイズが大きくなり、更新のプッシュ時に障害の連鎖やダウンタイムが発生しました。

その答えは、簡単に移行できる小さなインスタンス (コンテナ) が必要か、カスタム IT リソースを半永久的に割り当てる必要があるかで異なります。

コンテナは小さく、軽量なので、ベアメタルシステムだけでなく、パブリック、プライベート、ハイブリッド、およびマルチクラウド環境間でも、簡単に移行できます。また、コンテナは、今日のクラウドネイティブ・アプリケーションをデプロイするための理想的な環境でもあります。これは、パブリックプライベートハイブリッドマルチクラウド環境全体で一貫した開発と自動化された管理エクスペリエンスを提供するように設計されたマイクロサービスの集合体です。クラウドネイティブ・アプリケーションは、新しいアプリケーションの構築、既存アプリケーションの最適化、それらすべての接続のスピードアップを支援します。注意点は、コンテナが基盤となる OS に対応している必要があることです。VM と比較すると、コンテナは次の用途に最適です。

  • クラウドネイティブ・アプリケーションを構築する
  • マイクロサービスをパッケージ化する
  • DevOps または CI/CD プラクティスを導入する
  • 同じ OS を共有する多様な IT フットプリント全体でスケーラブルな IT プロジェクトを移行する

VM は、単一のコンテナよりもはるかに多くのオペレーションを実行できるので、従来より (そして現在も変わらず)、モノリシックなワークロードをパッケージ化する方法として活用されてきました。しかし、その豊かな機能は、OS、アプリケーション、ライブラリに依存するため、VM の可搬性は大幅に低下します。コンテナと比較すると、VM は次の用途に最適です。

  • 従来型、レガシー、モノリシックのワークロードを収容する
  • リスクの高い開発サイクルを分離する
  • インフラストラクチャのリソース (ネットワーク、サーバー、データなど) をプロビジョニングする
  • 別の OS 内で異なる OS を実行する (Linuxで Unix を実行するなど)

virtualization vs containers

仮想化

ハイパーバイザーと呼ばれるソフトウェアがリソースを物理マシンから分離して、VM 専用にパーティション化できるようにします。ユーザーが物理環境からの追加リソースを必要とする VM 命令を発行すると、ハイパーバイザーは要求を物理システムに中継し、変更をキャッシュします。VM の見た目と動作は物理サーバーに似ています。これは、アプリケーションの依存関係と OS フットプリントの大きさ (その多くは単一のアプリケーションやマイクロサービスの実行には不必要) という欠点を増大させる可能性があります。

コンテナ

コンテナには、マイクロサービスまたはアプリケーションと、それを実行するために必要なすべてのものが含まれています。コンテナ内のものはすべて、イメージと呼ばれる、すべてのライブラリと依存関係を含むコードベースのファイルに保存されます。イメージには RPM パッケージと構成ファイルが付属しているため、これらのファイルは Linux ディストリビューションのインストールと見なすことができます。コンテナは非常に小さいので、通常は数百ものコンテナが疎結合されます。そのため、コンテナのプロビジョニングと管理にはコンテナ・オーケストレーション・プラットフォーム (Red Hat OpenShiftKubernetes など) が使用されます。

Red Hat は、仮想化とコンテナ開発を長い間サポートしてきました。カーネルベースの仮想マシン (KVM)oVirt コミュニティが設立されて以来、当社はその両方に貢献してきました。また、Docker と Kubernetes のコードベースにとっては 2 番目に大きな貢献者です。また、これら 2 つのテクノロジーの未来にも投資しています。当社がコンテナネイティブの仮想化、KubeVirt、ハイパーコンバージド・インフラストラクチャに従事することによって、コンテナと VM が同じ IT システムの一部としてより適切に連携するようになってきています。

関連資料

記事

コンテナと VM

Linux コンテナと仮想マシン (VM) は、さまざまな IT コンポーネントが組み合わさってシステムの他の部分から分離している、パッケージ化されたコンピューティング環境です。

記事

コンテナ・オーケストレーションとは

コンテナ・オーケストレーションは、コンテナのデプロイメント、管理、スケーリング、ネットワーキングを自動化します。

記事

Linux コンテナとは

Linux コンテナとは、システムから分離された一連のプロセスであり、そのプロセスのサポートに必要なすべてのファイルを提供する個別のイメージから実行されます。

コンテナの詳細はこちら

製品

統合されたテスト済みのサービス一式を備えたエンタープライズ・アプリケーション・プラットフォームであり、ユーザーの選ぶインフラストラクチャを使ってアプリケーションを市場に投入するために活用できます。

リソース

トレーニング

無料のトレーニングコース

Running Containers with Red Hat Technical Overview

無料のトレーニングコース

Containers, Kubernetes and Red Hat OpenShift Technical Overview

無料のトレーニングコース

Developing Cloud-Native Applications with Microservices Architectures