コンテナ管理のオープンソースソフトウエア(OSS)である「Docker」が、IT業界における新しい「台風の目」になり始めている。IBM、マイクロソフト、レッドハット、ヴイエムウェア、グーグル、アマゾン・ウェブ・サービスといった米国の名だたる大手ITベンダーが、開発元である米ドッカーと相次ぎ提携し、Dockerを自社の製品やサービスに取り込もうと躍起になっているからだ。

 Dockerで実現できるのは、サーバーの論理分割であり、これは「VMware vSphere」などの「サーバー仮想化」と変わらない。技術的な視点で見ると、サーバー仮想化が論理分割の単位として「仮想マシン(VM)」を使うのに対して、Dockerでは仮想的なOS環境である「コンテナ」を使うことが、両者の違いということになる。

 コンテナとはLinux OSがOSの中に仮想的に作り出したOS環境だ。コンテナごとに独立したファイルシステムやプロセスの名前空間、ネットワーク設定、CPUやメモリーの使用上限などが割り当てられている。ユーザーはコンテナにミドルウエアやアプリケーションを自由にインストール可能であり、コンテナ上のプログラムは他のコンテナから隔離された状態で動く。

 サーバー仮想化で使用する仮想マシンは、「ハイパーバイザー」が物理マシン上に作り出した仮想的なマシンであり、この上のプログラムの命令やI/Oは、ハイパーバイザーによる変換を経てサーバーで実行される。この変換作業が仮想マシンの性能ボトルネックになっている。一方のコンテナでは、プログラムの命令やI/OはOS上で直接処理されるため、変換によるオーバーヘットは発生しない。コンテナの起動時間も、仮想マシンに比べて短い。これらがDockerが使うコンテナと、サーバー仮想化が使う仮想マシンの違いであるとされている。

 しかし記者は、Dockerとサーバー仮想化には、もっと重要な違いがあると考えている。それは、従来のサーバー仮想化が運用担当者を主なターゲットとしているのに対して、Dockerはアプリケーション開発者をターゲットとしていることだ。開発者をターゲットにしたDockerがIT業界で話題となっていること自体が、注目に値するとすら考えている。

 Dockerは、アプリケーション開発者の使い勝手を高めるために、開発者が慣れ親しんだ手法や概念を豊富に取り込んでいる。ポイントは大きく三つある。一つは「Infrastructure as Code」と呼ぶ「コードによってITインフラをコントロールする」という概念を採用したこと。二つめは、ソースコード管理では当たり前である「バージョン管理」を、コンテナの管理にも持ち込んだこと。三つめは、「リポジトリサーバー」を中心としたワークフローを実現していることだ。

「コード」ですべてをコントロールするDocker

 一つめのInfrastructure as Codeを説明しよう。Dockerでは「Dockerファイル」というコード(テキストファイル)を記述することで、コンテナのディスク内容である「Dockerイメージ」を更新する。ユーザーは、Dockerイメージに追加するソフトやその設定情報(環境変数)などをDockerファイルに記述する。すると「Dockerエンジン」がDockerファイルの内容を基に、Dockerイメージを更新するという仕組みだ。これによりOSのコマンド画面からコマンドを入力する必要はない。