山奥にこもってでもいない限り、ソフトウェア開発者が「Docker」や、それに類するコンテナ化技術について語っているのを耳にしたことがあるはずだ。しかし、部門や会社の運営に責任を持つ立場にある人であれば、こういった技術に疑問を抱いているかもしれない。また、Dockerやコンテナの正体、あるいは既存の仮想インフラやクラウドインフラにもたらされる価値を完全に把握していないかもしれない。
この技術の重要性を的確に説明する、あるいは正しく理解してもらうために、そもそも何故このようなものが必要になったのかを一歩下がった視点から見てみたい。
近代的なIT時代が幕を開けた頃、すなわちクライアントサーバ型アーキテクチャなどまだ存在しておらず、PCやIntelのx86プラットフォームといった製品が産声をあげるよりもはるか昔、われわれの目の前にはマルチユーザー機能を搭載したメインフレームやミニコンピュータといった物理マシンがあるだけだった。
このような物理マシンのリソースを効率的に使用し、システムを分け合って使用した顧客それぞれから相応の金額を徴収するために、「タイムシェアリング」という考え方が生み出された。この中央集権化されたコンピューティングパラダイムは多くの点で、50年後に生み出される近代的クラウドの萌芽(ほうが)とも言えるものであった。
1970年代の初めにIBMは「VM/370」というOSを発表し、メインフレームのハードウェアとソフトウェアを区画化できる、つまり切り出せるようにした。こうすることでOSの複数のインスタンス、すなわち仮想マシン(VM)をそれぞれ独立した環境上で稼働させ、個々のユーザーが固有のアプリケーション群を実行できるようにしたわけだ。
メインフレームは、VMのおかげでより効率的に、そしてより容易に管理できるようになった。
その後、仮想化技術はIntelのアーキテクチャに取り込まれ、PCへと普及していった。この技術は当初、1992年にリリースされた「OS/2 2.0」のDOS/Windowsサブシステムを実装するといった互換性の確保のために用いられた。
そして1999年に、VMwareは初めての製品となる「VMware for Linux Version 1.0」を発表した。これにより、当時はまだネイティブアプリケーションの品ぞろえが少なかったデスクトップ版Linux上で「Microsoft Windows」やWindows用のアプリケーションを稼働させられるようになった。VMwareの対象ユーザーにはソフトウェア開発者も含まれており、同社の製品を使用することで彼らは自らの環境とは切り離された環境で開発作業を遂行できるようになった。つまり、開発環境のVMがクラッシュしたとしても、OS全体に悪影響が及んだりはしないというわけだ。
2000年代におけるクライアントサーバモデルの急速な普及とともに、仮想化技術はサーバにも浸透していった。データセンターはサーバであふれかえっていたのだ。