2015年5月13日水曜日

コンテナーの世界!(1)
-Virtuozzo、Soralis、Linux(LXC)、そしてDocker- 

クラウドの世界にもコンテナー技術が押し寄せ始めている。
今や飛ぶ鳥を落とす勢いのDockerだ が、その技術を遡れば、IBMメインフレームのパーティションに始まる。ひとつのOSの上にパーティションを区切るこの方法は、Unix時代に適用構想が 持ち上がった。そしてUnix SystemⅤ Release 4(SVR4)とSun OSが統合されてSolarisとなり、2005年、Solaris 10でSolaris Containersが実装された。その後Linuxが登場、2008年、Linux 2.6.24でLXC(Linux Containers)として引き継がれ、2014年にはDocker 1.0 が登場した。

=コンテナーとは何か、そしてDocker!=
今さらながら、コンテナーとは何か整理してみようと思う。

◆ Parallels Virtuozzo Containers
VMwareやXenに代表される仮想化技術がハードウェアを隠ぺいして複数のOSを稼働させるのに対して、コンテナー技術はOSを隠ぺいして複数のアプリケーションを走らせる「OSレベルの仮想化(OS-Level Virtualization)」である。最初に実用化したのはSWsoft(現社名Parallels)という会社だ。2001年、OSにパッチを当てるVirtuozzo Containersをリリース。この版はLinuxとWindowsサーバ向けに独自技術のKSAL(Kernel Service Abstruct Layer)とVZFS(Virtuozzo File System)により、一つのOS上に完全にセキュアなコンテナー環境を作り出して、我々をあっと言わせた。この方式の最大の利点は処理効率にある。通常 の仮想化技術ではハードウェアが隠ぺいされているため、仮想化空間のGuest OSがIOドライバーをどう扱うかが課題となるが、VirtuozzoではHost OSのドライバーがそのまま使え、殆どネイティブモードと同じ処理速度が実現された。このため世界中のホスティング業者などが大量に導入。2005年にはそのオープンソース版OpenVZも登場したが、VMwareなどの普及で一進一退となった。2006年には状況打開のため、Virtuozzoの応用形として、Mac OS上でWindowsやLinuxなどクロスプラットフォームのアプリを実行するParallels Desktop for Macを発表した。Macの世界では今でもParallesが独走している。

◆ Sun Solaris Containers
次に、2005年に登場したのがSolaris Containersである。Parallesのコンテナー技術はOSにパッチの後付けタイプだ。しかし、SunのコンテナーはSolarisに組み込み方式で、区画されたパーティションをゾーンと呼ぶ。これらのゾーンは2つの種類がある。Solaris OS自身が乗るGlobal Zoneと個々のアプリが走るためにシステムリソースやセキュリティなどが遮蔽されたNon Global Zoneだ。このコンテナー技術はSunの他の製品稼働を保証し、扱い性も優れていた。

◆ Linux Containers(LXC) 
さらに時代が進んでLinux Containers(LXC)が登場した。LXCもSolaris Containersと類似の構造を採用し、Linuxのカーネルが乗るカーネルスペースとアプリなどのプロセスが走るコンテナー部ユーザスペースがある。カーネルスペースにはカーネルのみを搭載するので、コンテナー部に異なるLinuxディストリビューションを乗せることも論理的には可能だ。ユーザスペースのコンテナーにはプロセスが乗り、他のコンテナーと隔離される。このインターフェースとなるのがLXCだ。

 以上見てきたように、VirtuozzoやSoralis Container、LXCのコンテナー技術は同一OSをシェアする。それ故、個々のコンテナー内で使用するファイルやネットワーク、CPUなどリソース割り当てには工夫がいる。Virtuozzoでは各リソース毎のクォート管理機能を整備し、前述のVZFSは複数コンテナー間のファイルシェアリング機能も持つ。Solaris Containerでゾーン(コンテナー)が独立したOS環境を保持するための工夫が施され、ホスト名やIPアドレスなどを持つ仮想ネットワーク環境の整備、ファイルはGlobal Zone内に各Non Global Zoneの専用ディレクトリーが作られる。勿論、各ゾーン内でZFS(Zettabyte File System)の利用も可能だ。
 
◆ そしてDocker! 
LXCの構造はシンプルだ。ただその周りに十分な機能が揃っているわけではない 
Linuxだから勿論cgroupを使ったリソース制御は出来る。問題はどれほど容易かだ。Dockerの生い立ちはPaaSのdotCloudの内部プロジェクトとして始まった。そして2013年7月に独立。同年(2013年)3月リリースされたオープンソースの初期版ではLinuxカーネルの仮想化機能を利用する方法として、LXCがデフォルトとなり、他にLibvirtなど幾つかの方法があった。しかし0.9版になるとLXCがドロップし、代わって独自のドライバーのlibcontainerが標準となった(右下図参照)2014年6月、Docker 1.0が発表されると、Docker自身がコンテナー技術のプラットフォーム(Docker Engine)を目指し始めた。発表されたDocker Engineはクライアント/サーバー構成となり、各コンテナーを管理するのがDocker Servier、そのサーバーを操作するのはDocker Cliant。そして、このクライアントはRESTful APIによって多様なプログラムと連携が出来る。最新版は先月16日にリリースされたDocker 1.6だ。この版では先にリリースした分散環境向けのツール群が一部更新されて、Compose 1.2マルチコンテナのオーケストレーションツール)、Swarm 0.2コンテナーのクラスタリングツール)、Machine 0.2(クラウドやローカルマシンなどのプロビジョニング)、さらにコンテナー間認証アクセスはRegistry 2.0となった。

ワゴンに飛び乗れ!= 
今日、LinuxやWindowsの世界では仮想化技術がいやというほど普及して、汎用的に使われているが、それなりのオーバヘッドがある。ここが悩みだ。一方、コンテナー技術は同一OSのシェアなどの制限はあるがオーバーヘッドは大きく軽減される。コンテナーで先行していたParallelsが従来からWeb Hostingなどの業者に持てはやされたのは、こうした理由からである。そしてDocker人気がやってきた。考えてみればLinuxがこれだけ普及しているのだから、Linuxコンテナーが人気になるのは当り前である。元祖Linuxコンテナーの公式サイトLinuxContainers.orgにはLinuxカーネルのコンテナーインターフェースとなLXC、その上に構築されるユーザエクスペリエンスLXD、さらにリソース管理のCGManagerやファイル管理のLXCFSが揃いつつある。しかしながらその歩みはのろい。その間隙を突いたのがDockerだ。Dockerは独自技術はなく、オープンソースによるエコシステムと使い勝手の良さがウリであるだからこそ、このバンドワゴンに AmazonもMicrosoftも、GoogleやVMwareも飛び乗るのだろう。