コンテナ型仮想化は、サーバー仮想化技術の1つです。
少々乱暴な例えかもしれませんが、貨物に使われるコンテナをイメージするとわかりやすいかもしれません。
例えば、船にたくさんのコンテナを積むようなイメージで、色々なコンテナ(様々なアプリケーションを搭載したサービス)を船、貨物等の環境(サーバー・クラウド)に積み込むことができるようなイメージです。
具体的に、コンテナ型仮想化とはどんなものか見ていきましょう。
目次
1. コンテナ型仮想化とは
コンテナ型仮想化とは、仮想化技術の1つで、ホストOS上で「コンテナ」といわれるアプリケーションの実行環境を構築できます。従来の仮想化技術の1つハイパーバイザー型よりも、少ないコンピューティングリソースで仮想化環境を構築できます。
違いは、OS部分にあります。現在、主流であるハイパーバイザー型とコンテナ型の構造の違いを図にしてみました。
コンテナ型では、コンテナにOSが搭載されておらずホストOS上の環境を共有します。
ハイパーバイザー型は、各仮想マシンにOSが搭載され、独立してアプリケーションが実行されます。
【それぞれの要点のまとめ】
■コンテナ型は、システム資源の負担は小さく、可搬性は高いが、OSは限られる
■ハイパーバイザー型は、システム資源の負担が大きく、可搬性は低いが、自由度が高い
2. コンテナ型仮想化のメリット
コンテナ型を活用したほうがいいケースは、クラウド環境で様々なサービスを展開しているような組織です。サービス用のアプリケーションを開発・展開・改善が容易なためです。主な3つのメリットが上げられます。
2.1 アプリケーション(サービス)の起動・再起動が高速
上図で示しているように、各コンテナにはゲストOSは不要です。そのためサーバー起動の際にOSを立ち上げる必要がありません。ハイパーバイザー型だとサーバーを起動するときにゲストOSを立ち上げないといけないので、起動速度はコンテナ型に劣ります。
2.2 システム全体の動作や処理が高速
ハードウェアやホストOSへ直接アクセスしているため、ハイパーバイザー型に比べて早く処理ができます。
2.3 環境構築が容易
全く同じ環境を複数容易することができ、どこでも起動可能なので、環境構築や管理工数を削減することができます。
例えば、オンプレミス環境のベアメタルサーバーや仮想マシン、様々なパブリッククラウドなど、場所を選ばずアプリケーションを稼働させることができます。
3. コンテナ型仮想化のデメリット
分かりやすい判断基準は、物理的に異なるサーバーを稼働させるのと同じイメージで仮想化を行いたい場合は、ハイパーバイザー型を活用したほうがよいケースといえます。各アプリケーションを完全に別環境で稼働させる必要がある場合です。
3.1 ホストOS環境に依存し、異なるOSは利用できない
コンテナ型仮想化では、ホストOS環境に依存するため、ホストOS環境での実行しかできません。多くのコンテナ型仮想化環境はLinuxベースのため、LinuxのホストOS環境で、Windowsを起動することはできません。異なるOSでアプリケーションを稼働させたい場合はハイパーバイザー型にメリットがあります。
3.2 カスタマイズ性はハイパーバイザー型より低い
コンテナ型では、各コンテナが完全に独立した環境ではないため、他のコンテナの影響を受ける可能性があります。ハイパーバイザー型では、ハードウェアのリソースを個別に割り当てられ、別個のOSを持つ存在なので、実質的に本物の物理マシンのように振る舞います。そのためコンテナ型よりも高度で柔軟なカスタマイズが可能です。
4 コンテナ型仮想化の製品の最新動向
Windows以外のOSの世界、特にオープンソース系Linux などは以前から、コンテナ型仮想化技術自体は存在していましたが、クラウド化が普及するにつれて、コンテナ型仮想化技術の動向に注目が集まるようになっています。
4.1 コンテナ型仮想化といえば Docker
Dockerとは、docker社が開発しているLinuxベースのコンテナ型仮想化の1つです。オープンソースソフトウェアとして公開されていて、コンテナ型仮想化としては、事実上のデファクトスタンダードと呼ばれています。
4.2 Windows もコンテナ型仮想化を実装
マイクロソフト社は2020年9月末、AzureのPaaSの1つである「App Service」で、Windowsコンテナの正式サポートを発表しました。同サービスのLinuxコンテナ正式対応は2017年でした。
Dockerの技術は、Linuxプラットフォーム向けに登場し、発展してきたものですのでLinuxが大きく先行しているのが現状です。Windowsコンテナは実行サイズが大きい等、色々課題はあるようです。
現時点でWindowsコンテナを利用できるということは、Windowsベースのアプリケーションを、コードの変更なし(または最小限の変更)でコンテナ化できる選択肢ができたということです。
4.3 今後、仮想化の選択肢として普及の可能性
コンテナ型仮想化は、最近になってクラウドサービスの普及を背景に、注目、採用されるようになってきました。そのため、オープンソースであることで技術情報が開示されていますが、まだ実績が少ないことや、関連資料等も英語ベースのものが中心であることなど、日本市場での普及や技術者の育成などには課題がありそうです。また、エンタープライズ向けシステムや大規模クラウドシステムでの活用が中心のようです。今後の普及、展開に注目していきたいと思います。
5. コンテナ型仮想化の活用例
5.1 アプリケーション開発の高速化
コンテナ型仮想化を活用してメリットを享受できるのは、クラウド環境でのシステム開発や運用を担当している方々です。
コンテナ型仮想化は、アプリケーションをミドルウエアなどの動作環境とあわせてパッケージングして環境に依存せず動作させることが可能です。
従来は、テスト環境から本番環境に移行する際、アプリケーションの動作環境を本番環境に構築する作業が必要でしたが、コンテナ仮想化では、この構築作業を行うことなく、テスト環境でコンテナ化したアプリケーションを、そのまま本番環境に移行して動作させることができます。
そのため、コンテナ仮想化は、ワンストップなアプリケーションの管理を実現し、アプリケーション開発を加速する手段として注目を集めています。
5.2 アプリケーション動作環境インフラの効率化
ITインフラは複雑化しており、数々のインフラがさまざまな場所で稼動しており、管理すべきソフトウエアの種類や、ソフトウエアが稼動するノードが多いことが、運用上の課題になっています。コンテナ仮想化は、これらのソフトウエアを設定ファイルや動作環境などとまとめてパッケージングし、効率的に管理する手段としても期待されています。
また、アプリケーションの管理だけではなく、運用自動化のためのツールとしても期待されています。
たとえば、物理サーバーの障害が発生したときのフェイルオーバーや、一部ソフトウエアのバージョンアップ作業など、コンテナの別サーバーでの再起動や別バージョンのコンテナとの入れ替えによって、自動化することが可能なためです。
6. まとめ
コンテナ型仮想化は、システム資源の負担は小さく可搬性は高いが、OSが限られます。
一方、ハイパーバイザー型仮想化では、システム資源の負担が大きく可搬性は低いが、自由度が高いといえます。
コンテナ型仮想化のメリット・デメリットを理解して、効率化が図れそうなところで利用していくことが大切でしょう。
コンテナ型仮想化の理解の手助けになれば幸いです。
コメント