なぜDockerが注目されているのか

仮想化技術のおさらい

コンピュータ上にコンピュータを作る――これが仮想化技術です。その応用がクラウド技術で、今回取り上げるDockerは専門用語で言えば、OS上のコンテナ技術の1つです。これらの技術がスゴイところは、コンピュータの処理能力を細かく分割できる、そしてそれらを抽象的に扱うことができて、計算機資源の効率化が図られるということにあります。

身近な仮想マシンJavaVM

1995年に発表されて、もう定番中の定番となったプログラミング言語のJava。Javaはその実行環境があれば、どのOS上でも同じ動作をすることができるので、とても普及しました。Javaの実体は、JavaVM(Java仮想マシン)です。これがなければJavaのプログラムは動きません。仮想マシンとは何かと言えば、コンピュータそれ自身を作り上げたソフトウェアです。

OSの上にOSを載せる

OSの上で別OSを動かす、これも最近ではごくあたりまえになってきました。いろいろな製品があります。個人利用されているものとしては、Mac上でWindowsやLinuxをデスクトップ上で動作できるParallesがあります(いろいろなWebブラウザで動作確認をするWebデザイナー・プログラマに人気があります⁠⁠。そして無料のOracle VM VirtualboxやVMware Workstation Playerなども皆さん気軽に使っています。

昔はCPUもメモリも貧弱で1つのコンピュータで1つのOSを動かすのが精一杯だったのですが、今はマルチコアCPU、さらにメモリもGB単位で使うことができます。結果として複数のOSを1つのコンピュータで動かすことも可能になってきました。OSも1つのソフトウェアですから、アプリと思えばたしかにOSの上でOSが動くのもアリですね。

ハイパーバイザで仮想化

さて、では1つのOSの上で複数のOSを同時に何個も動かすことができたらどんなにスゴイでしょう。しばらく前よく言われていたのが、サーバOSの処理機能は40%も使われていない、いうものです。その余った処理能力を有効活用しようというのが、クラウドの始まりです。それを実現するのがハイパーバイザです。理論的にはOSが動く環境さえあれば何個でもOSがOSの上でも動くはずですが、それぞれのOSをまとめて管理するソフトウェアが必要です。それがハイパーバイザです。MicrosoftではHyper-V、VMwareではVMware ESXi、CitrixではXen(XenSource)などが使われてきました。さらにOSSのクラウド管理ソフトのOpenStackがありますが紙幅の都合で割愛します。

コンテナ技術の発想

たとえばWebサーバの場合は通信機能が主であって他の機能は要りません。必要な機能のみ稼働することができれば、すごく便利じゃないか、という発想が生まれました。Dockerはその考え方をベースにしています。Linux環境にDockerをインストールすれば、各種アプリケーションを単独で、ユーザからはあたかもサーバ上で動いているかのように見せる使い方ができるのです。さらに、Webサーバアプリも言うなればファイルの集まりです。設定ファイルさえあれば何度でも作り上げられます。そのために作られたのがDockerfileというしくみです。これらを扱う共通リポジトリ環境としてDockerHubもあります。これらをひとまとめにしてインストール作業もボタン1つで可能になります。

クラウド=データセンターの効率化が勝負を決める

すでにGoogle社では全部のソフトウェアをコンテナに乗せており、毎週20億個ものコンテナを起動しているという話もあります。未使用のコンピュータ資源をアクティブに入れ替えながら使うことでサーバの効率化ができます。少ないサーバ台数でたくさんのWebサービスを動かすことできるので、コストも削減できます。これがDockerが流行る理由です。

その他詳細な情報やしくみは本書を参照ください。