この記事を読むのに必要な時間:およそ 1 分
仮想化技術のおさらい
コンピュータ上にコンピュータを作る――これが仮想化技術です。その応用がクラウド技術で,今回取り上げる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が流行る理由です。
その他詳細な情報やしくみは本書を参照ください。