仮想化道場
Dockerコンテナの実行環境に最適化されたRHEL Atomic Host
(2015/5/4 06:00)
昨年から急速に注目されてきたのが、コンテナ技術のDockerだ。Dockerは、GoogleやAmazon Web Services(AWS)、IBMなどがサポートを表明している。さらに、MicrosoftがWindows Server上でDockerをサポートすると表明したほか(次期Windows Serverでサポート予定)、コンテナ技術を採用するDockerとはライバルと思われていたVMwareも、サポートを表明した。
Red Hatでは、昨年発表したRed Hat Enterprise Linux(以下、RHEL) 7.0において、Dockerを標準でサポートしている。ただしRHEL 7.0は、サーバーOSとしてさまざまな機能を持っているため、Dockerだけを動かすには必要以上のモジュールが搭載されてしまっている。そこで、Dockerの実行環境にフォーカスしたコンパクトな実行環境として、RHEL Atomic Host(以下、Atomic Host)が開発された。
今回は、このAtomic Hostについて説明する。
仮想化とコンテナ(Docker)の違いは?
一般的に仮想化というと、ハイパーバイザーを利用したサーバー仮想化を思い浮かべる人がほとんどだろう。これは、ハイパーバイザーにより、ハードウェアを抽象化するソフトウェアレイヤを導入する方式で、CPUのスケジューリング、実メモリの割り当て、I/O処理などは基本的にハイパーバイザーが行う。これにより、ハイパーバイザー上に複数の仮想マシンを作り、さまざまなOS環境を動かすことができる。
例えば、あるホストのハイパーバイザー上で、同じOSを複数の仮想マシン上で動かした場合でも、それぞれが個別に動作するため、仮想マシンの台数分OSが動作する。システム全体で見れば、同じOSが複数動作しているところが無駄といえる。
一方、コンテナ技術では、基盤としてのOSは1つだけだ。アプリケーションやアプリケーションが使用するシステムソフトなどをコンテナ化(パッケージ化)しているが、OSとしては1つの基盤を共有している。ハイパーバイザーによる仮想化のように、OSが複数動作することもなくなるため、システム全体としてアプリケーションに割り当てられるComputeリソースが増え、コンテナの方がパフォーマンス的に有利といわれている。
ただしコンテナでは、ベースとなるOS基盤を共有する仕組み上、Linux上でWindowsのコンテナを動かすことはできないし、Linuxであっても、ディストリビューションが異なるLinuxや、同じディストリビューションでもバージョンが異なるLinuxの場合は、注意が必要になる。
つまりコンテナは、同一バージョンのOS上で、異なるバージョンのフレームワーク(異なるPHPのバージョン、異なるJavaのバージョンなど)でしか動作しないアプリケーションを、フレームワークと一緒にコンテナ化することがメリットといえる。
複数バージョンのPHPをインストールすると、システムの動作上トラブルになることが多い。このため、複数バージョンのPHPをうまく管理するソフトウェアが必要だった。しかしコンテナ技術を利用すれば、PHPを含めてアプリケーションをコンテナ化するため、異なる複数のコンテナの中にバージョンが異なるPHPがあっても、コンテナ間で悪影響を受けることはない。
このように、アプリケーションとアプリケーションの実行環境をコンテナ化することで、簡単にアプリケーションのデプロイメントが可能になる。
今までであれば、開発したアプリケーションを本番環境へデプロイしようとしても、フレームワークが異なったり、足りないミドルウェアがあったり、といった理由によって、本番環境でうまく動作しない、などということはよくあった。
しかしDocker(コンテナ)を使用すれば、アプリケーションと一緒に実行環境(OSカーネルなどはOS基盤は除く)が一緒になっているため、Dockerファイルをコピーするだけで、アプリケーションが動作する環境ごとデプロイすることが可能になる。