Dockerとは(2)
無駄の少ないインフラ環境を実現する、コンテナ仮想化技術
Dockerのしくみを理解するうえでの基礎知識として知っておきたい技術が「コンテナ仮想化技術」です。
仮想化技術はいくつかの種類がありますので、代表的なものを説明します。
ホスト型仮想化
ハードウエアの上にベースとなるホストOSをインストールし、ホストOSに仮想化ソフトをインストールします。その仮想化ソフトの上でゲストOSを動作させる仮想化です。
仮想化ソフトは、Oracle社のVirtualBoxやVMWare社のVMWarePlayerなどがあります。仮想化ソフトをインストールして手軽に仮想環境が構築できるため開発環境の構築などによく使われています。しかし、ホストOSのうえでゲストOSを動かしますので、どうしてもオーバーヘッドが大きくなります。オーバーヘッドとは、仮想化を行うために必要になる、無駄なCPUリソース/ディスク容量/メモリ使用量などのことです。
ハイパーバイザー型仮想化
ハードウエア上に仮想化を専門に行うミドルウエアである「ハイパーバイザー」を配置し、ハードウエアと仮想環境を制御します。代表的なハイパーバイザー型には、Microsoft社のHyper-VやCitrix社のXen Serveなどがあります。クラウドサービスであるAmazon Web Servicesの仮想サーバ機能を提供する「EC2」は、Xenをベースに構築されています。
ホストOSが無くハードウエアを直接制御するため、リソースを効率よく使用できます。ただし、仮想環境ごとに別のOSが動作しますので、仮想環境の起動にかかるオーバーヘッドは大きくなります。ハイパーバイザー型はファームウエアとして実装されているものも多く、製品や技術によってさまざまな方式があります。
コンテナ型仮想化
ホスト型仮想化、ハイバーバイザー型仮想化のようにOSやハイバーバイザーの上で、さらにOSを複数動かすと、それだけでどうしても多くのリソースを必要とします。そこで、ホストOS上に論理的な区画(コンテナ)を作り、アプリケーションを動作させるのに必要なライブラリやアプリケーションなどをコンテナ内に閉じ込め、あたかも個別のサーバのように使うことができるようにしたものが、コンテナ型仮想化です。OSのリソースを論理的に分割し、複数のコンテナで共有して使います。コンテナ型仮想化はオーバーヘッドが少ないため、軽量で高速に動作するのが特徴です。
コンテナ仮想化技術の歴史は古く、FreeBSDというオープンソースUNIXでの「FreeBSD Jails」や、Sun Microsystems社(現Oracle社)の商用UNIXであるSolarisの「Solaris Containers」などがあります。
Dockerはコンテナ仮想化技術を使っているので、他の仮想化に比べると非常に軽量/高速で動作するという特徴があります。そのため、利用したリソースの量で課金がきまるIaaSなどのクラウドサービスでは、システム稼働にかかるコストを抑えることができます。
多くのベンダー/ツールがDockerをサポート! Dockerの相互接続性(インターオペイラビリティ)
Dockerは、GoogleやAmazonなどのクラウドベンダーはじめ、Red Hat社/Microsoft社/IBMなどの多くの業務システム開発を支えてきた大手ベンダーや、広く利用されているオープンソースなどがサポートしています。
さまざまな組織やシステムと連携してつかうことができるソフトウエアの特性のことを、「相互接続性(インターオペイラビリティ)」と言います。
たとえば、商用Linuxである「Red Hat Enterprise Linux7」はDockerを標準搭載しています。また、AWS(Amazon Web Services)では「Amazon EC2 Container Service」でDockerをサポートしています。また、Dockerはオープンソースの継続的インテグレーションツールである「Jenkins」と連携してテストを自動化することもできます。
さらに、コンテナ統合管理のためのKubernetes(クーベルネイティス) というフレームワークを、Googleがオープンソースとして公開しました。KubernetesのプロジェクトにはDocker社だけでなく、Microsoft社やRed Hat社やIBMなどが参加する予定です。
業務システムの中には、大規模でミッションクリティカルなものも多くあります。大規模システムのインフラ構築/運用の最大の難しさは、なんといっても複数システム間の連携です。複雑に入り組んだシステムを安定稼働させるためには、高い技術力だけでなく、多くの労力もともないます。Dockerは、本番環境での運用という面では、まだまだ検討すべきところも多くあります。しかしながら高い相互接続性をもつDockerは、今後ベンダーなどのサポートにより業務システムへの導入のしきいを下げていくと思われます。