概要
コンテナと仮想マシン (VM) は、さまざまな IT コンポーネントを組み合わせてシステムの他の部分から分離する、コンピューティング環境のパッケージ化に対する 2 つのアプローチです。この 2 つの主な違いは分離されているコンポーネントの違いで、これにより、それぞれのアプローチで拡張性と可搬性が異なります。
コンテナとは
コンテナはソフトウェアの一単位で、この中に、アプリケーションの実行に必要なあらゆるコンポーネントと機能がまとめられています。先進的なアプリケーションはほとんどの場合、それぞれが特定の機能を実行する複数のコンテナで構成されています。通常、コンテナはメガバイト単位のサイズで、ハイパーバイザーは使用せず、一般的にはプロセスを分離するためのより高速でアジャイルな方法と認識されています。
コンテナの隆盛に大きく貢献した要因の一つが、可搬性です。たとえて言えばレゴ™ ブロックのように、個々のコンテナは簡単に交換したり、別の環境に移動させたりすることができます。アプリケーションと依存関係をコンテナにパッケージ化すると、開発者のノート PC、データセンター、クラウド、エッジなど、どこでも必要な場所にデプロイでき、またどこにデプロイしても完全に同じ動作をします。コンテナ化アプリケーションの構築、デプロイ、管理のためのオープンソース・プラットフォームである
Docker は、コンテナ技術がこれまで歩んできた進化の道のりで大きな役割を果たしました。
Red Hat のリソース
仮想マシンとは
仮想マシンは分離されたインスタンス内でオペレーティングシステムを実行して物理的なコンピュータをエミュレーションし、クラウド・コンピューティングにおいて極めて重要な役割を担います。一般的に、ハイパーバイザーが物理ホストと VM の間で軽量なソフトウェアレイヤーの働きをし、1 つのサーバー上で複数の VM がホストされます。このハイパーバイザーはリソースへのアクセスを効率的に管理するので、仮想マシンはそれぞれが別個のサーバーとして機能し、柔軟性とアジリティを提供することができます。
VM は集約とコスト削減を目的として 2000 年代に人気を博し、以来進化を続けてきました。VM を導入した組織では VM のデプロイが成熟し、集約だけでなく多様なユースケースで使用されるようになりました。そうしたユースケースには、アプリケーションへのオンデマンドでのリソース提供や、GPU のような高価なリソースへのアクセスの最適化などがあります。
VM は初期の多くのクラウドコンピューティング環境の基盤としても活用され、リソースの仮想化を促進し、マルチテナンシーと分離(複数の顧客が同じリソースを共有してそれぞれのシステムを実行すること) をサポートしました。
仮想マシンはそれ自身のオペレーティングシステムを持つため、リソースを集中的に使用する複数の機能を一度に実行できます。多くのリソースを利用できるので、サーバー、オペレーティングシステム、デスクトップ、データベース、およびネットワーク全体の抽象化、分割、複製、エミュレートが可能です。
クラウドネイティブと従来型の IT
こうした技術的な違いよりも大きな視点でこの 2 つを比べることは、先進的なクラウドネイティブの IT プラクティスと従来の IT アーキテクチャを比較することであるとも言えます。
先進的な IT プラクティス
(クラウドネイティブ開発、CI/CD、DevOps):ワークロードを提供可能な最小単位 (通常は機能あるいはマイクロサービス) に分割することにより実現されます。それぞれが分離して実行され、個別に開発、デプロイ、管理、スケーリングが行われます。
この小さい単位でのパッケージングに最適なのがコンテナです。コンテナを使うことにより、複数のチームがアプリケーションやサービスの別々のパーツで同時に作業を行うことができ、他のコンテナにパッケージされたコードへの割り込みや妨害を発生させることもありません。
従来の IT アーキテクチャ
(モノリシック、レガシー):ワークロードのすべての部分が緊密に絡み合い、より大きなアーキテクチャが存在していないと機能しません。それぞれの部分を分離することはできないので、大きな環境 (通常は VM) 内で全体をひとまとまりにしてパッケージする必要があります。
かつては、VM 内でアプリケーション全体を構築して実行する方法が一般的でしたが、すべてのコードと依存関係を 1 カ所にまとめなくてはならないために VM のサイズが大きくなり、更新のプッシュ時に障害の連鎖やダウンタイムが発生しました。
仕組み
仮想化
ハイパーバイザーと呼ばれるソフトウェアがリソースを物理マシンから分離させ、パーティション分割して各 VM が占有できるようにします。物理環境から追加のリソースを取得する必要のある VM 命令をユーザーが発行すると、ハイパーバイザーはその要求を物理システムに伝達して変更をキャッシュします。VM は物理サーバーと同じように見え、また同じように動作します。これは、アプリケーションの依存関係および OS フットプリントの増大 (このフットプリントの大部分は、1 つのアプリケーションやマイクロサービスを動作させるのに必要ではない) というデメリットを拡大させます。
コンテナ
コンテナに含まれるすべてのものは、コンテナイメージ (すべてのライブラリと依存関係を含んだファイル) を使用してパッケージ化して提供されます。コンテナイメージファイルはソフトウェアのインストールパッケージ (Linux の RPM など) とよく似ていますが、必要とするのは、アプリケーションの実行に使用する、互換性のあるカーネルとコンテナランタイムのみです。コンテナの作成に使用された OS や、コンテナ内のライブラリのソースが何であっても関係ありません。コンテナは極めて小さいので、通常は何百ものコンテナが疎結合されて動作します。そのため、コンテナのプロビジョニングと管理を行うためにコンテナ・オーケストレーション・プラットフォーム (Red Hat OpenShift や Kubernetes など) が使用されます。
どちらを使用すべきか
その答えは、場合によって異なります。簡単に移動できる小さなインスタンス (コンテナ) が必要なのか、それともカスタム IT リソースを半永続的に割り当てる必要があるのか。
考慮すべき要素としては他にも、アプリケーション・アーキテクチャ、開発手法、セキュリティ、規制要件などがあります。
コンテナは小さく、軽量なので、ベアメタルシステムだけでなく、パブリック、プライベート、ハイブリッド、およびマルチクラウド環境間でも、簡単にデプロイできます。また、組織は仮想マシンを中心に構築されたインフラストラクチャをすでに持っているので、VM 内でコンテナを実行することも極めて一般的です。これはコンテナの柔軟性を示す好例と言えるでしょう。
また、コンテナは、今日のクラウドネイティブ・アプリケーションをデプロイするための理想的な環境でもあります。これは、パブリック、プライベート、ハイブリッド、マルチクラウド環境全体で一貫した開発と自動化された管理エクスペリエンスを提供するように設計されたマイクロサービスの集合体です。クラウドネイティブ・アプリケーションは、新しいアプリケーションの構築、既存アプリケーションの最適化、それらすべての接続のスピードアップを支援します。
VM と比較すると、コンテナは次の用途に最適です。
- クラウドネイティブ・アプリケーションを構築する
- マイクロサービスをパッケージ化する
- アプリケーションを DevOps または CI/CD 手法に組み込む
- スケーラブルな IT プロジェクトを多様な IT フットプリント内で移動させる
コンテナと比較すると、VM は次の用途に最適です。
- 従来型、レガシー、モノリシックのワークロードを収容する
- リスクの高い開発サイクルを分離する
- インフラストラクチャのリソース (ネットワーク、サーバー、データなど) をプロビジョニングする
- 別の OS 内で異なる OS を実行する (Linux で Unix を実行するなど)
仮想マシンとコンテナのそれぞれでアプリケーションを実行している場合、Red Hat Service Interconnect を使用すると、異なる環境間でアプリケーションやサービスを接続できます。
ベアメタル、VM、コンテナの違い
仮想マシンとコンテナは、ベアメタルサーバーを含むさまざまな種類のインフラストラクチャにデプロイすることができます。
ベアメタルとは
「ベアメタル」とは、物理ハードウェアの上で動作し、動作するのにハイパーバイザー、仮想マシン、またはコンテナ化による補助を必要としないコンピュータまたはサーバーのことを言います。ベアメタルサーバーはハードウェアコンポーネントが他のユーザーと共有されず、全体が 1 つのテナント専用となるので、専用サーバーとも呼ばれています。
ベアメタルサーバーは大量のデータを低遅延で処理することができます。つまり、高速で高性能です。ベアメタルを使用する場合、ユーザーはサーバー・インフラストラクチャを完全に制御することができます。これは、ワークロードのニーズに合わせてオペレーティングシステムを選択し、ハードウェアとソフトウェアをファインチューニングできるということです。
ただし、ベアメタルのデプロイメントはパフォーマンスとハードウェアへの直接アクセスが重要な用途では優れた価値を発揮しますが、コンテナや仮想マシンと同レベルの柔軟性やリソース管理性はありません。
ベアメタルで VM をホストすることはできるか
できます。ハイパーバイザーと仮想化ソフトウェアを追加すれば、ベアメタルサーバーで仮想マシンをホストすることが可能です。
ベアメタルでコンテナをホストすることはできるか
できます。Docker、Kubernetes、Podman などのプラットフォームは、ベアメタルサーバーを含む多くのインフラストラクチャでコンテナを大規模に管理およびデプロイするのに役立つよう設計されています。
Red Hat を選ぶ理由
Red Hat® OpenShift® は、あらゆるアプリケーションと環境に対応するデプロイと消費の選択肢を備えた、単一のエンタープライズ対応コンテナベース・アプリケーション・プラットフォームです。Red Hat OpenShift を使用すると、どこででも、安全に、かつ大規模にすばやくアプリケーションを構築し、デプロイし、実行し、管理できます。Red Hat OpenShift の機能である
Red Hat OpenShift Virtualization により、IT チームは同じ Kubernetes プラットフォーム上でコンテナと仮想マシンを同時に実行できるようになるため、管理が単純化され、本稼働開始までの時間が短縮されます。
Red Hat OpenShift Virtualization は、オープンソース・プロジェクトの KVM と KubeVirt に基づいており、Red Hat の包括的な仮想化ソリューションに含まれます。仮想化移行ツールキットを使用すると、仮想マシンをすぐに移行できます。このツールキットは、移行の開始に必要なツールを提供するもので、簡単な数ステップで移行を完了できます。 大規模な移行から Day 2 オペレーションや修復に至るまで、Red Hat Ansible® Automation Platform によって自動化を活用し、デリバリーをスピードアップできます。Red Hat Advanced Cluster Management for Kubernetes を使用すれば、単一のコンソールから VM のセキュリティとパフォーマンスを監視できます。その他にも Red Hat は、ストレージ、バックアップと障害復旧、ネットワークのためのサポートオプションやパートナーとの統合を通じて、お客様がハイブリッドクラウド全体で仮想インフラストラクチャをスムーズかつ継続的に稼働できるように支援します。また準備ができた時点で、モダナイゼーションについてもサポート可能です。
Red Hat 公式ブログ
Red Hat のお客様、パートナー、およびコミュニティのエコシステムに関する最新の情報を入手しましょう。