VMとコンテナ技術は、仮想化の一例であり、コンピュータのハードウェアやソフトウェアをより有効に活用することを可能にします。実行単位自体は以前から存在していましたが、ここ数年の普及により、ITのあり方が大きく変わりました。それでも、VMはあらゆる規模のデータ拠点で広く採用されています.
施設やアプリをクラウドで運用するかどうか検討する際、各種AI技術にも精通する必要があります。今回は、これらツールの特徴や比較、そして貴社のデジタル移行を促進する方法について解説します.
コンテナは、内部のソースコードを動かすために必要な全てを含む小さなソフトウェアの束です。システムライブラリ、外部のサードパーティコードパッケージ、その他OSレベルのフレームワークなどが依存関係の例です。コンテナが依る機能は、OS自体より上位のスタックレイヤーに存在します。
ソフトウェアをどのプラットフォームでも一貫して動作させるために考案されました。環境を再現するのではなく、アプリをパッケージ化して実環境や仮想環境のどちらでも動かせるようにしています。これは、地球の大気を再現するのではなく、宇宙飛行士が宇宙服を着て未知の惑星を探索するようなものです。
軽量で高レベルなアプリに特化しており、独立した実行可能パッケージとしてすばやい更新と改善が可能です。
多くのコンテナランタイムは、ローカルストレージであらかじめ作成されたソフトウェアパッケージを提供しています。データベースやメッセージシステムなどの一般的なプログラムがすぐに利用でき、数秒でダウンロード・インストールできるため、開発時間を節約できます。
全てのパッケージが同じハードウェアを共有するため、コンテナ内の脆弱性がシステム全体に影響を及ぼす可能性があります。主要なコードパッケージランタイムには、既に構築されたコンテナライブラリが公開ディレクトリに置かれています。
これらの無料イメージには、脆弱性やハッキングの危険があるかもしれませんので、利用する前に十分検討してください。
Dockerはランタイム市場を支配しており、一般的なコンテナ化フリーソフトがホストされています。数秒でダウンロードし、ローカルで動作させることが可能です.
安全性が高いシステムで、利用者が明示的に許可した場合のみ安全でない機能を利用できます。他のコンテナランタイムで見られるクロスコンテナのセキュリティ問題にも対応しています.
オープンソースのコードパッケージランタイムで、システムレベルの機能を分離しています。Dockerの基盤としても機能し、ベンダーニュートラルなコンテナランタイムです.
OCI互換ランタイム向けにKubernetes Container Runtime Interface (CRI)を実装しており、Kubernetes向けにはDockerより軽量です.
VMは、CPU、ディスク、ネットワークなどの低レベルハードウェアを忠実に模倣する堅牢なソフトウェア群です。模倣されたハードウェアと連携する補助ソフトも含まれる場合があり、これらを組み合わせることでコンピュータシステムの完全なスナップショットが作成されます.
強力な実機を有効活用する必要性から、仮想マシンを作る技術が生まれました。ホスト上で一つのアプリ環境だけでは物理コンポーネントが十分でなかったため、現在は単一サーバで複数のOSを動かし、様々なシナリオを試すことができます.
各VMは他と独立して機能するため、共有ホスト上でも他のVMに影響を及ぼすことはありません。一台のVMに問題があっても、そのVMは隔離され、他へ拡散しません.
依存関係や設定はコンテナが一般的に静的ですが、仮想マシンは柔軟で段階的な改善が可能です。基本的なハードウェア情報を提供すれば、実質的に最低限のコンピュータとして機能します.
仮想マシンには手動でソフトウェアを導入でき、特定時点の設定をスナップショットとして保存することが可能です。これにより、以前の状態に戻したり、同じ設定の新規マシンを迅速に作成できます.
全スタックを含むため、VMの作成や再生成は手間がかかります。変更後に再生成して動作を確認するには多くの時間が必要です.
VMは大量のストレージを必要とし、容量が数ギガバイトに達することもあります。複数のVMを動かすと、ホストのディスク容量に支障をきたすことがあります.
Oracleが開発・維持するVirtualboxは、無料でオープンソースのx86エミュレーションシステムです。最も有名で広く使われるVMプラットフォームの一つで、サードパーティ製の多くのアプリでVMイメージの作成や共有が可能です.
x86ハードウェア仮想化の先駆成果に基づいて設立されたVMwareは上場企業です。多数のVMを展開・管理するハイパーバイザーが組み込まれており、操作性に優れたユーザーインターフェースでVMの管理が容易です。企業向けの仮想化プラットフォームとして頼りになる存在です.
ハードウェアエミュレーションにおいては、QEMUが最適な選択肢です。あらゆるハードウェアアーキテクチャに対応しており、コマンドラインでのみ操作します。グラフィカルなインターフェースはありませんが、その分高速なVMの代替手段として評価されています.
どちらもアプリの完全な分離を実現し、様々なプラットフォームでの展開を可能にしています。基盤インフラに直接関わる必要がないよう、仮想化や抽象化を行っています.
さらに、全ソフトウェア基盤を含む「イメージファイル」を作成でき、これを利用すれば、どの端末でも即時にアプリを展開・運用できます。ソフトウェアプロセスは拡張可能で、数千のアプリを同時に管理したり、システム構成の管理にも用いられます.
しかし、コンテナとVMは役割が異なり、アプリの展開環境に応じて使い分けられます.
コンテナはシステムを模倣し、ブロードキャスターOSをダウンロードすることなく、どのマシンでもアプリを動作させます。一方、VMは実際のハードウェアをシミュレートし、限られた資源をより効果的に活用できます。ここでは、コンテナとVMのさらなる違いをいくつか挙げます.
コンテナ技術は、独立して動作するマシン依存のないソフトウェアパッケージを作成します。アプリ固有のファイルであるコンテナイメージは開発者によって作成・展開され、コンピュータ上で変更はできません.
仮想マシン技術は、実際のデスクトップやノートパソコンに仮想化ソフトをインストールする手法です。ネットワークサーバがゲストVMを管理し、サーバから独立してゲストOSやそのアプリの設定を調整できます.
VMでは、データベースサーバがゲストOSとホストOSを接続します。ハイパーバイザーが資源の共有を管理し、デジタルで模擬されたデバイスが共有ハードウェア上で単独動作します.
コンテナはコンテナエンジンやランタイムを利用し、OSとコンテナ間でアプリに必要なシステム資源を提供・管理します。Dockerがオープンソースのコンテナエンジン分野で優勢です.
OSを含むため、仮想マシンのイメージは数GBに達することが多く、サーバやデータベース、デスクトップ、ネットワークの複製、分割、抽象化、模倣に多くの資源を必要とします。一方、コンテナのパッケージはMB単位で軽量に、アプリに必要な資源のみを含みます.
アプリの展開にあたり、VMとコンテナのどちらを選ぶか検討する際は、以下の点を考慮してください.
VMなら、開発者がアプリ環境を自由に設定できます。システムのフリーソフトを手動でインストールしたり、設定状態をスナップショットとして保存・復元することが可能で、ブレインストーミングや実験、各種パフォーマンステストに役立ちます.
コンテナは、最適な設定を選んだ後に静的に構成を定義します.
フルスタックの仮想マシンは設計や更新が難しく、設定の再生成や変更確認に時間を要します.
頻繁に新機能の構築、テスト、リリースを行うなら、コンテナの利用が適しています。高レベルなソフトを利用するため、変更や繰り返しが容易です.
オンプレミスのデータセンターでは、VMは大容量ストレージとハードウェアを必要とします。クラウドインスタンスは費用を抑えますが、全体インフラの移行は困難です.
コンテナはコンパクトでスケールしやすく、マイクロサービスにより、マイクロサービス単位でアプリを拡張できます。マイクロサービスは、明確なAPIで連携する小規模な独立サービスです.
これら補助技術の共通点と相違点は、下記の表にまとめられています.
Containers vs. VMs
Feature | VM | Container |
---|---|---|
Solitude | この機能はVMをホストや他のVMから完全に分離します。複数の企業が同一サーバやクラスターでプログラムを動かす場合など、厳重なセキュリティが必要な状況で役立ちます. | ホストや他のコンテナから最小限の分離を提供しますが、仮想マシンほどの保護はありません。より安全にするには、Hyper-isolation Vモードで各コンテナを小さなVM上で動かすことができます. |
OS | カーネルとOS全体を動かし、多くのシステム資源を使用します. | OSのユーザーモード部分のみを提供し、アプリに必要なサービスだけを含めるようカスタマイズ可能で、システム資源を節約します. |
Guest-compatibility | ほぼ全てのOSを動かすことができます. | ホストと同じOSバージョンで動作します. |
Deployment | PowerShellまたはSystem Center VM Managementで多数または単一のVMを起動できます. | Azure Kubernetes ServiceやDockerで多数のコンテナを展開します. |
OS upgrades | 各VMのOS更新が必要です。新しいOSは、VMのアップグレードまたは再構築を伴います。多数のVMがある場合、非常に手間がかかります. | コンテナのOSファイル更新は同様です:
|
Storage | 単一VM用にはVHDを、複数サーバの場合はSMBファイル共有を利用します. | Azure Disksは単一ノードのローカルストレージ、Azure Filesは共有ストレージに利用されます. |
Balancing | フェイルオーバークラスターにおいて、VMの負荷分散は実行中のVMを移動させます. | オーケストレータがクラスター内のノードでコンテナを起動・停止し、負荷と可用性を管理します. |
Fault-tolerant | VMは別のクラスターサーバにフェイルオーバーし、OSを再起動します. | クラスター内のノードが停止すると、オーケストレータが迅速に別のノードでコンテナを再作成します. |
Networking | 仮想ネットワークアダプタを使用します. | 仮想ネットワークアダプタの分離ビューを使用し、ホストのファイアウォールをコンテナと共有します. |
最新情報を購読