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