コンテナ仮想化とは何か
コンテナ仮想化参考1とは、仮想化技術の一つで、アプリケーションとその動作環境をまとめて管理することができる技術です。従来の仮想化技術では、物理的なサーバー上のOS(ホストOS)の上に、仮想的なサーバーを構築し、その仮想サーバー上で独立したOS環境(ゲストOS)を実行します。一方で、コンテナ仮想化では、物理的なサーバー上のOS(ホストOS)上で、アプリケーションの動作環境(ユーザ空間)を分離して、サーバーリソースの分割を実現します。そのため、コンテナ仮想化は、従来の仮想化と比較してオーバーヘッドが小さく、アプリケーションをより効率的にパッケージングし動作させる技術として注目を集めています。
図1: 従来の仮想化とコンテナ仮想化の違い
コンテナ仮想化によるアプリケーション開発の高速化
コンテナ仮想化が一番期待されている領域は、アプリケーション開発の高速化です。コンテナ仮想化では、アプリケーションをミドルウエアなどの動作環境とあわせてパッケージングし、環境に依存せず動作させることが可能です。従来は、試験環境から本番環境に移行する際、アプリケーションの動作環境を本番環境に構築する作業が必要でした。しかし、コンテナ仮想化では、この構築作業を行うことなく、試験環境でコンテナ化したアプリケーションを、そのまま本番環境に移行して動作させることができます。そのため、コンテナ仮想化は、ワンストップなアプリケーションの管理を実現し、アプリケーション開発を加速する手段として注目を集めています。
特に、オープンソースのコンテナ管理ソフトウエアであるDocker参考2,参考3は、アプリケーション管理に必要な機能を備えており、多くの注目を集めています。
図2:コンテナを使った環境移行
インフラ改善への可能性
アプリケーション開発の効率化が注目されるコンテナ仮想化ですが、アプリケーションが動作するインフラにおいても、効率化を実現する非常に強力な技術として利用できます。
近年のITインフラは非常に複雑化しており、数々のインフラソフトウエアがさまざまな場所で稼動しています。特に分散型のソフトウエアが多く、管理すべきソフトウエアの種類や、ソフトウエアが稼動するノードが多いことが、運用における課題となっています。コンテナ仮想化は、これらのソフトウエアを設定ファイルや動作環境などとまとめてパッケージングし、効率的に管理する手段として期待されています。
また、コンテナは、アプリケーションの管理だけではなく、運用自動化のためのツールとしても期待されています。たとえば、物理サーバーの障害が発生したときのフェイルオーバーや、一部ソフトウエアのバージョンアップなどを、コンテナの別サーバーでの再起動や別バージョンのコンテナとの入れ替えによって、自動化することが可能です。
図3:コンテナによるフェイルオーバー・バージョンアップのイメージ
コンテナの今後
コンテナ仮想化は、今現在も大きな注目を集める分野であり、そのユースケースも広がっていくと考えられます。
アプリケーション開発の面では、コンテナの動作に特化したITインフラが近年登場しています。たとえば、Google Cloud PlatformのContainer Engine参考4や、Amazon Web ServiceのAmazon EC2 Container Service参考5は、コンテナの動作環境を提供するサービスで、利用者は仮想サーバーを意識せずにコンテナを動作させることができます。このようなITインフラが増えることで、実際のサーバーやOSを意識しないアプリケーション開発が増えていくと予想されます。
また、ITインフラ面では、運用ソフトウエアの多くがコンテナへの対応を進めています。これらのソフトウエアを使うことで、インフラのソフトウエアをすべてコンテナとして管理し、運用の効率化・自動化を実現することが可能になると考えられます。