仮想化道場
新しい仮想化「Docker」を搭載したRed Hat Enterprise Linux 7
(2014/9/5 06:00)
日本国内では7月に正式発表されたRed Hat Enterprise Linux(RHEL) 7は、新しい仮想化システムのDocker、Windows環境との相互運用性、スケーラブルなファイルシステムといったの3つが、大きな機能強化となっている。
RHEL 6に比べるとOSカーネルのチューニングが進み、同じハードウェアでも、RHEL 7では10~20%の性能アップ(サーバーサイドJAVAでは25%の性能アップ)を果たしている。ただRHEL 6がリリースされたときのように、サポートCPU数やメモリのスケーラビリティが劇的に向上した、といったことはない(サポートCPU数は、RHEL 6の4096から最大5120へと、拡張自体はされている。サポートメモリ容量はRHEL 6と同じく64TB)。これは、RHEL 6で現在のサーバー環境において十分な拡張が行われたからだろう。このため、RHEL 7では、RHEL 6のOSカーネルをよりチューンして、パフォーマンス向上やバグフィックスに注力したのだといえる。
アプリケーションのコンテナ化を行うDocker
RHEL 7で搭載されたDockerは、LinuxのKVMやXen、WindowsのHyper-V、VMwareのESXiなどのハイパーバイザーとは違った方式で仮想化を行う。
Dockerは、アプリケーションをカプセル化(コンテナ化)し、ほかのOS上で動作しているアプリケーションと切り離して動作させることができる。具体的には、アプリケーションだけでなく、アプリケーションフレームワークやシステムソフトウェア、ライブラリのバージョンなど、アプリケーションを動作させるためのソフトウェアの依存関係をまるごとコンテナ化する。
これによって、例えば、異なるバージョンのPHPとアプリケーションをコンテナ化し、1つのOS環境で複数のPHPバージョンを動かす、といったことが可能になるのだ。
また、アプリケーションフレームワークやアプリケーション自体をコンテナ化されるので、デプロイメントが非常に簡単になっている。例えば、開発環境で動作しているコンテナイメージを実行環境にコピーすれば、すぐにでもアプリケーションを動かすことができる。
コンテナイメージにアプリケーションの動作環境がすべてインストールされているのだから、ライブラリの依存関係やバージョンの差などで動作しないということはなくなる。加えて、コンテナそれぞれにコンテナIDが付与されており、コンテナIDが異なれば別のコンテナとして動作する。このため、コンテナにインストールされたアプリケーションのパラメータを細かく変更して、最も最適な動作環境をチューニングすることもできるだろう。
一方でDockerでは、ハイパーバイザー型の仮想化とは異なり、OS部分はホストOSをそのまま利用する。コンテナの中にOSがないため、コンテナで動作するアプリケーションのパフォーマンスも高いし(ハイパーバイザーを用いた仮想化のように、仮想マシンでOSが動作しないのでオーバーヘッドが小さい)、アプリケーションとその周辺部しかコンテナ化されないことから、コンテナのサイズも小さい。
ただし、OSはホストOSが唯一の存在となっていることから、ホストOSと異なる種類のOSや、同種のOSでも複数のバージョンを動かすことはできない。またコンテナ化を行うDockerはLinux OSのカーネルと深くかかわるため、Linux OSでしか動作しない。
Red Hatでは今回、RHEL 7にDockerを搭載したが、Dockerでコンテナ化されたイメージを動作させるには、ホストOSがフルファンクションのRHELでなくてもいい。
このため、Dockerイメージの動作にチューニングしたRed Hat Enterprise Linux Atomic Host(Atomic Host)というRHELのエディションを提供する予定にしている。Atomic Hostは、Dockerコンテナだけを動かすことにチューニングされたRHELといえる。
これを使えば、フルファンクションのRHEL 7上でDockerコンテナを動かすよりもオーバーヘッドが小さく、RHEL 7より多くの数のDockerコンテナを、満足のいくパフォーマンスで動かせるだろう。