株式会社ネットワールドのエンジニアがお届けする技術情報ブログです。
各製品のエキスパートたちが旬なトピックをご紹介します。

バルセロナより: Dockerとは? Containerとは? - その1

みなさん、こんにちは。無事に帰国することができました。前回の記事での予告の通り、各セッションで学んできた内容をお届けしたいと思っております。

今回お届けするのはDockerについてです。Dockerについてはバルセロナに同行してくれた当社が誇るスーパーエンジニア工藤さんが素晴らしいスライドを公開してくれています。

Fig134

工藤さんのスライドの行間を埋めるように話を進めていきたいと思います。

Dockerとは?

上の図を見ていただくと分かる通り、Docker(上の図では仮想コンテナ)は仮想化とは似て非なるものです。アプリケーション(上の図ではプロセス)をOSの上で隔離しますので、アプリケーションは隔離されますが、OS以下は隔離されません。このレベルでの隔離はVMwareの他のソリューションでいうとThinAppになりますが、ThinAppのように互換レイヤーを保持しているわけではないので、OSの違いを吸収して動作するということもありません。

Fig135

WindowsがDockerに対応するというアナウンスもなされましたが、現状のDockerはLinuxの上で実装されているため、Linuxのアプリケーションを隔離することしかできませんし、将来的にWindowsが対応する場合も、Windows上でアプリケーションを隔離する技術としての公開になるはずです。このようにOSの上で隔離を行う技術をContainerと呼びます。

仮想化とコンテナーはどう違うのか?

技術的にはかなり違うのですが、仮想化の4原則に当てはめるとコンテナーは若干中途半端な技術です。仮想化の4原則とは御存知の通り以下の4つです。

  1. カプセル化
  2. 分離
  3. 互換性
  4. ハードウェア非依存

1についてはバックアップイメージやスナップショットなどの実装ですので運用次第では十分と言えますが、2の分離については仮想化ほどの分離はされていません。互換レイヤーなく、ハードウェアの上でプロセスが分離されているだけです。3についてはハードウェアを完全に実装するものではないので、OS環境とアプリケーションで運用上で実装する必要があります。4についてもLinuxがある程度吸収してくれるとはいえ、やはり物理ハードウェアの特性を引きずってしまう可能性が否めません。こうした運用で回避しなくてはならないという中途半端さはもちろん、技術的にはContainerではvMotionやDRSといった技術を実装ができない事になります。これはvSphereユーザーに取っては大きな失望かもしれません。

なぜ 今Dockerが注目をあつめるのか?

Containerについては従来から実装されている技術で、特にまあたらしい技術ではありません。私がContainerに出会ったのは以前勤めていたUNIXベンダーでしたが、その数年前の時点ですでに幅広く使われており、数年の実績を持っていました。ここで一気に注目を集めたのはこのContainerにまつわる運用のめんどくささをDockerという会社が抜本的に変えたからといえるでしょう。もちろん、市場のデマンドに合致したということもあります。

Dockerはそれ自身がContainer技術であるような言われ方をされますが、実際にはContainerの先ほどでたような面倒くささを排除して自動化する技術とフレームワークです。「Docker流」にインフラを設計・運用すれば自動化がうまく働いて、スムーズに運用ができるようになるわけです。

Fig137コマンド1つでテンプレートからアプリケーション(コンテナ)を展開したり、イメージを取得したり、それを保存したり。非常に簡単な操作でアプリケーションを取り回すことが可能です。これ以外にVMwareでいうリンククローンに相当するような技術も搭載しており、金太郎飴のようなアプリケーションを大量に一気に構成することも可能です。

Fig138

便利なの?と書いてあるスライドを見て、うわっ、コマンド!と思った方、いらっしゃると思います。そうです。Dockerはコマンドを多用する、そしてLinux中心のフレームワークですので、IT管理者の方と言うよりは、開発者、そして開発者の方が運用も行うDevOps環境を想定しています。以下の図はEMC社のプレゼンテーションのスライドから借りてきましたが、最近のITは第3世代と第2世代に大きく二分化しており、Dockerはどちらかと言うと第3世代、vSphereは(これまでは)第2世代にフォーカスしたソリューションです。第3世代というよりは多少の語弊はあるものの、Web 2.0企業などという方がいいのかもしれません。FacebookGoogleなどのようなインフラという事もできると思います。それに対して第2世代はERPなどを利用する一般企業のインフラです。

第3世代はクラウド・モバイル時代のインフラで、アプリケーションが中心です。OSの1つ1つの稼働率を高めるよりも、分散アーキテクチャ(Hadoop等)でアプリケーションを実装し、アプリケーション1つ1つのインスタンス稼働率ははじめから諦めて、各インスタンスで障害が起こっても全体のアプリケーションの稼働に影響が出ないようなインフラです。というのも、この世代のインフラを採用する企業はアプリケーションによって収益を上げている企業が多く、アプリケーションの稼働率が死活問題だからです。

Fig136

ということもあって、第3世代のインフラを採用する企業ではOS毎(もしくは仮想マシン毎)の稼働率はさほど問題になりません。それよりも収益・そして競争力の源泉であるアプリケーションを頻繁にアップグレードしていくか、開発者のレベルで堅牢な運用ができるか?(まさにDevOps)が問題になります。

この第3世代のインフラにおける問題をvSphereとは違うアプローチで、開発者フレンドリーにうまく解決してくれたのがDockerというわけです。

次回はDockerと仮想マシンの違いをもう少し掘り下げていきます。

記事担当者: マーケティング本部 三好哲生 (@pernixdata_netw)