ほとんどの人は知らないかもしれないが、実際のところ多くの人々は何年にもわたってコンテナを使ってきている。Googleは独自のオープンソースコンテナ技術「lmctfy」(Let Me Contain That For You:「あなたのために、それをコンテナに格納させてください」の意)を採用している。ユーザーが検索や「Gmail」「Googleドキュメント」といったGoogleの機能を使うたびに、新たなコンテナが作成されているのだ。
ただしDockerは、LXC上に構築されている。プログラムが関与する限り、Dockerも他のコンテナ技術と同様に、自身のファイルシステムやストレージ、CPU、RAMなどを管理する必要がある。コンテナとVMの重要な違いは、ハイパーバイザがデバイスすべてを抽象化するのに対し、コンテナはOSのカーネルだけを抽象化するという点にある。
つまり、ハイパーバイザであれば異なったOSやカーネルを使用できるものの、コンテナではそれができないということだ。例を挙げると、「Microsoft Azure」を使えば「Windows Server 2012」のインスタンスと「SUSE Linux Enterprise Server」のインスタンスの双方を同時に稼働させられる。ところがDockerの場合、すべてのコンテナは同じOSとカーネルを使用しなければならない。
その一方で、最低限のハードウェアで、できる限り多くのサーバアプリケーションインスタンスを稼働させたいというのであれば、さまざまなOSのVMを稼働させる必要性など考慮しなくてもよいはずだ。同じアプリケーションを複数動作させたいというのであれば、コンテナが第1選択肢となるはずだ。
これによってデータセンターやクラウドプロバイダーは年間数千万ドルにおよぶハードウェアコストや電力コストを削減できるようになる。各社がDockerの採用に向けて奔走しているのも不思議ではない。