データセンターやクラウドコンピューティングのIT業界にいるなら、この一年以上、一般的なコンテナ、特にDockerに関するニュースが絶え間なく流れているのを聞いてきたはずだ。Docker 1.0が2014年6月にリリースされて以来、その勢いはかつてないほどに達している。
これほど話題になっているのは、多くの企業が驚くべきスピードでDockerを採用しているからだ。2014年7月のオープンソースカンファレンス(OSCon)で、私はすでにサーバーアプリケーションを仮想マシン(VM)からコンテナに移行していた無数の企業に出会った。実際、Docker社のサービス&サポート担当バイスプレジデントであるJames Turnbull氏は、その会議で「大手銀行3行がDockerのベータ版を使い続けており、現在は本番環境でDockerを使用しています」と私に語った。これはどんな初期技術にとっても、非常に自信に満ちた動きであり、セキュリティ最優先の金融業界ではほぼ前代未聞のことだ。

同時に、Dockerというオープンソース技術は、Red HatやCanonicalといったLinux大手の寵児であるだけでなく、Microsoftなどのプロプライエタリソフトウェア企業もDockerを熱烈に受け入れている。
では、なぜ皆がコンテナとDockerを追い求めているのだろうか。James Bottomley氏(Parallelsのサーバー仮想化担当最高技術責任者であり、著名なLinuxカーネル開発者)は、「Hyper-V、KVM、Xenなどのハイパーバイザーは、いずれも『仮想化ハードウェアエミュレーション機構』に基づいています。つまり、システムに対する要求が非常に高いのです」と説明してくれた。
しかし、コンテナは共有のオペレーティングシステムを使用する。つまり、システムリソースの利用効率はハイパーバイザーよりもはるかに高い。コンテナはハードウェアを仮想化するのではなく、単一のLinuxインスタンス上に存在する。これは逆に、「役に立たない99.9%の仮想マシンの無駄を捨て去り、アプリケーションを含む小型で簡潔なカプセル型コンテナだけが残る」ことを意味する、とBottomley氏は述べている。
Bottomley氏によれば、完全にチューニングされたコンテナシステムを利用すれば、同じハードウェア上で、Xen仮想マシンやKVM仮想マシンを使用した場合よりも4~6倍多くのサーバーアプリケーションインスタンスを実行できるという。
なかなか良さそうに聞こえるだろう? 何しろ、サーバーでずっと多くのアプリケーションを実行できるのだから。では、なぜこれまで誰もやらなかったのか? 実は、誰かがやっていた。コンテナは実は古い概念なのである。
コンテナの歴史は、少なくとも2000年とFreeBSD Jailsまで遡ることができる。Oracle SolarisにもZonesという類似の概念がある。Parallels、Google、Dockerなどの企業は、OpenVZやLXC(Linuxコンテナ)といったオープンソースプロジェクトの開発に取り組み、コンテナをスムーズかつ安全に動作させることを目指してきた。
確かに、コンテナを知っている人はほとんどいないかもしれないが、ほとんどの人は何年もコンテナを使ってきた。Googleには、独自のオープンソースコンテナ技術であるlmctfy(Let Me Contain That For You、「あなたのプログラムを私に格納させてください」という意味)がある。検索、Gmail、Google Docksなど、Googleの何らかの機能を使うたびに、新しいコンテナが割り当てられているのだ。
しかし、DockerはLXCの上に構築されている。他のコンテナ技術と同様、そのプログラムに関して言えば、独自のファイルシステム、ストレージシステム、プロセッサ、メモリなどのコンポーネントを持つ。コンテナと仮想マシンの主な違いは、ハイパーバイザーがデバイス全体を抽象化するのに対し、コンテナはOSカーネルだけを抽象化するという点にある。
これは逆に、ハイパーバイザーにはできてコンテナにはできないことが一つあることを意味する。それは、異なるOSやカーネルを使うことだ。例えば、Microsoft Azureを使用して、Windows Server2012のインスタンスとSUSE Linux Enterprise Serverのインスタンスを同時に実行できる。Dockerの場合、すべてのコンテナが同じOSとカーネルを使用しなければならない。
一方、できるだけ少ないハードウェア上でできるだけ多くのサーバーアプリケーションインスタンスを実行したいだけなら、複数のOSの仮想マシンを実行することにはあまり関心がないかもしれない。同じアプリケーションの複数のコピーこそが必要なら、コンテナを気に入るだろう。
Dockerへの切り替えは、データセンターやクラウドコンピューティングサービスプロバイダーにとって、電力とハードウェアのコストを毎年数千万ドル節約できる見込みがある。だからこそ、彼らが我先にとDockerをできるだけ早く採用しているのも不思議ではない。
Dockerは、以前の技術にはなかったいくつかの新しい特徴をもたらした。第一に、従来の方法と比較して、Dockerはコンテナのデプロイと利用をより簡単かつ安全にする。さらに、DockerはCanonical、Google、Red Hat、Parallelsなど、コンテナ分野の巨人たちと協力して、主要なオープンソースコンポーネントであるlibcontainerを共同開発した。これにより、コンテナに切望されていた標準化がもたらされた。
一方、開発者はDockerを使ってあらゆるアプリケーションをパッケージ化、配信、実行できる。アプリケーションは軽量でポータブル、自己完結型のLXCコンテナとなり、どこでも実行できる。Bottomley氏が私に語ったように、「コンテナを使えば、すぐにアプリケーションの移植性が得られます」。
市場調査会社451 ResearchのシニアアナリストであるJay Lyman氏は次のように付け加えた。「企業組織は、アプリケーションとワークロードを、効率的かつ標準化された再現可能な方法で、より移植しやすく配布しやすくしようと努めていますが、それが難しい場合もあります。GitHubがソースコードの共有を通じてコラボレーションとイノベーションを促進しているように、Docker Hub、Official Repos、そして商用サポートも、アプリケーションのパッケージ化、デプロイ、管理の方法を改善することで、多くの企業がこの課題に取り組むのを支援しています。」
最後になりましたが、Dockerコンテナはクラウドへのデプロイが容易だ。Ben Lloyd Pearson氏がopensource.comで書いているように、「Dockerは特別な方法を採用しており、Puppet、Chef、Vagrant、Ansibleなど、ほとんどのDevOps(開発運用)アプリケーションに統合できる一方、単独で使用して開発環境を管理することもできます。主な売りは、通常これらのアプリケーションが実行する多くのタスクを簡素化することです。具体的には、Dockerを使えば、本番サーバーとまったく同じローカル開発環境を構築したり、同じホストから複数の開発環境(それぞれ独自のソフトウェア、OS、構成を持つ)を実行したり、新しいまたは異なるサーバーでプロジェクトをテストしたり、ローカルホスト環境に関係なく、誰もが同じ設定で同じプロジェクトに取り組むことができるようになります。」
要するに、Dockerがあなたのためにできることは次の通りだ。他の技術と比べて、同じハードウェア上でより多くのアプリケーションを実行できる。開発者がすぐに実行可能なコンテナ化アプリケーションを迅速に構築しやすくなる。アプリケーションの管理とデプロイのタスクを大幅に簡素化する。総じて、エンタープライズ向け技術としてDockerが一夜にして人気になった理由は理解できる。ただ、それが期待に応えてくれることを願うばかりだ。さもなければ、外には不安を抱えたCEOやCIOがたくさん出てくるだろう。
出典:http://cloud.51cto.com/art/201410/453718.htm