仮想化道場

Dockerコンテナの実行環境に最適化されたRHEL Atomic Host

 昨年から急速に注目されてきたのが、コンテナ技術の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リソースが増え、コンテナの方がパフォーマンス的に有利といわれている。

Dockerは、モノリシックなサーバーから、マイクロサービスが集まったサーバーへと変化するためのインフラといえる
コンテナにより仮想化では得られなかったメリットが享受できる
Googleのサービスの多くは、コンテナで動作している

 ただしコンテナでは、ベースとなるOS基盤を共有する仕組み上、Linux上でWindowsのコンテナを動かすことはできないし、Linuxであっても、ディストリビューションが異なるLinuxや、同じディストリビューションでもバージョンが異なるLinuxの場合は、注意が必要になる。

 つまりコンテナは、同一バージョンのOS上で、異なるバージョンのフレームワーク(異なるPHPのバージョン、異なるJavaのバージョンなど)でしか動作しないアプリケーションを、フレームワークと一緒にコンテナ化することがメリットといえる。

 複数バージョンのPHPをインストールすると、システムの動作上トラブルになることが多い。このため、複数バージョンのPHPをうまく管理するソフトウェアが必要だった。しかしコンテナ技術を利用すれば、PHPを含めてアプリケーションをコンテナ化するため、異なる複数のコンテナの中にバージョンが異なるPHPがあっても、コンテナ間で悪影響を受けることはない。

 このように、アプリケーションとアプリケーションの実行環境をコンテナ化することで、簡単にアプリケーションのデプロイメントが可能になる。

 今までであれば、開発したアプリケーションを本番環境へデプロイしようとしても、フレームワークが異なったり、足りないミドルウェアがあったり、といった理由によって、本番環境でうまく動作しない、などということはよくあった。

 しかしDocker(コンテナ)を使用すれば、アプリケーションと一緒に実行環境(OSカーネルなどはOS基盤は除く)が一緒になっているため、Dockerファイルをコピーするだけで、アプリケーションが動作する環境ごとデプロイすることが可能になる。

DockerのWebサイト。さまざまなユーザーがDocker Hubに自作のコンテナを公開できる
Dockerのイメージ。Dockerは、アプリケーションや動作環境を1つのファイル(コンテナ)にしたものだ
Dockerが注目されてきたのは、クラウドサービスの一般化がある。PaaSは使いやすいが、既製品のため、個々のニーズには少しずつ不満が出る。こういった不便を解消するのがコンテナだ
Dockerはユーザーが必要するアプリケーションと実行環境をコンテナ化してくれる。これにより、セミオーダーのPaaSをユーザー自身の手で作り上げることができる
コンテナ技術は、新しいモノではなく、古くからある技術だ。Dockerは、古いコンテナ技術を使いやすくしたといえる

(山本 雅史)