「Windows ServerがDockerを採用する」とはどういうことなのか
昨日、マイクロソフトがDockerと提携し、次期Windows ServerでDockerを採用すると発表したニュースは大きな反響がありました。
DockerはすでにAmazonクラウド、Google Cloud Platform、Microsoft Azureといった主要なクラウドでサポートされており、Red HatやCoreOSなどがDocker専用のOSの開発に取り組むなど、いまクラウドでもっとも注目されているテクノロジーの1つです。
そのDockerをWindowsが採用するとは一体どういうことなのでしょうか。ここでは推測を交えた解説をしたいと思います。
Docker Engineの3つの特長
Dockerは、Linux OSにコンテナ機能を提供する「Docker Engine」と、Dockerイメージを共有できる「Docker Hub」の2つから構成されています。ここではWindows Serverに実装されるというDocker Engineを中心に見ていきましょう。
Docker EngineはLinux上でコンテナ型仮想化を実現するソフトウェアです。おもな特長は3つあります。
- 軽量なコンテナ型仮想化
- コピーオンライトのファイルシステム
- Dockerファイル
Dockerで実現するコンテナ型仮想化は、一般的なサーバ仮想化よりも軽量なのが特長です。一般的なサーバ仮想化では、仮想マシンを起動したあとでOSが立ち上がるので、利用できるまでにそれなりの時間がかかります。一方でDockerが実現するコンテナ型仮想化は、OSのうえに分離されたユーザー空間としてのコンテナを用意するため、コンテナを非常に迅速に提供できます。
コピーオンライトのファイルシステム(AUFS)はDockerの大きな特長の1つです。あるDockerコンテナのイメージをカスタマイズして新しいDockerイメージを作るとき、基のDockerイメージの持つファイルはリードオンリーにし、差分だけをファイルシステムに保存していきます。これにより、既存のDockerイメージを基に新しいDockerイメージを迅速に作り出したり、呼び出すことができるわけです。
Dockerファイルは、コンテナの内容をコードとして記述できます。基のDockerイメージを指定し、導入するアプリケーションを指定し、ネットワーク構成や環境変数なども設定できます。インフラをコードとして記述できる技術です。
Dockerはこうした機能によって、例えば開発者が自分のノートPC上で構築したLinux環境とアプリケーションで動作確認をしたら、そのままそれをDockerイメージにしてクラウドのサーバ上へ持って行って動かす、といったことが迅速にできるのです。
Dockerイメージを用いることで、いちいちOSやアプリケーションを再インストールをする必要がなく確実に同じソフトウェア環境を再現できます。しかもそれを迅速に実行できて、既存のDockerイメージの再利用も可能といった点が、Dockerの利点です。
次期Windows Serverで実現
さて、このDocker EngineをWindows Serverでも実現しようというのが、今回のマイクロソフトの発表です。そして現時点でWindows Serverには、前述のDockerの3つの特長を1つも備えていません。つまりマイクロソフトはいま、このDocker Engineの機能をWindows Server上で実現すべく開発を進めているところなのです。
発表の中でターゲットとなるのは「next release of Windows Server」と表現されているため、おそらく少し前にWindows 10と合わせてテクニカルプレビューが公開された、いわゆるWindows Server 10(正式名称は未定)で実装されるものと思われます。
コンテナ、ファイルシステムなどを独自実装か
今回の発表を注意深く読むと、マイクロソフトはWindows ServerにDocker Engineを「移植する」という表現は使っていません。下記はスコット・ガスリー氏のブログから引用します。
Microsoft and Docker are integrating the open-source Docker Engine with the next release of Windows Server. This release of Windows Server will include new container isolation technology,
マイクロソフトとDockerはオープンソースのDockerエンジンを次のリリースのWindows Serverに統合している。このリリースのWindows Serverは、新しいコンテナ分離技術を備えるだろう。
もともとLinuxのさまざまな技術をベースにして作られたDocker Engineを、そのままWindows Serverへ移植するのは容易ではないはずです。とするとおそらくマイクロソフトはDockerの実装を参考にしつつ、Windows Serverに独自にコンテナ機能としてのユーザー空間の分離やネットワーク機能の分離を実装するでしょうし、コピーオンライトのファイルシステムも、そしてDockerファイルの仕組みも実装するのでしょう。
LinuxのDockerイメージがWindows Serverで動作するわけではない
また、Windows Server上でLinuxで生成したDockerイメージが動作することはないでしょう。Docker EngineはあくまでもLinuxに対してユーザー空間の分離やコピーオンライトのファイルシステムなどを提供するものであり、コンテナ上のアプリケーションはLinux OSのAPIを呼び出します。
今回の発表には、Windows ServerにLinux APIが実装されることまでは書かれていないので、Windows Server上のコンテナにLinuxで作ったイメージをロードすることはできるのかもしれませんが、それが動作することはないはずです。
つまりWindows Server版のDocker Engineとは、Linux版のDockerイメージが使えるわけではないけれど、同様にWindows Server版のコンテナ機能を備え、コピーオンライト機能を備え、Dockerファイルで構成できて、Windows版のDockerイメージを生成したり読み込んだりできる、というものになるでしょう。
安定性やエコシステムが課題か
Docker Engineの基盤となったLinuxのさまざまな技術は、数年にわたって実装が改善され続けてきました。現在Docker Engineはバージョン1.0に達しているとはいえ、まだ本番環境で使うには十分な実績やツールが揃っていないと考えられています。それだけでなく、Dockerを使うにはそれ以外にも運用ツールや監視ツールなどのさまざまな周辺環境の充実が待たれています。
マイクロソフトがDockerを実装したWindows Serverをリリースするのは、早くても来年中盤以降でしょう。そしてその時点では、現在のDockerと同じくまだ十分な実績がない状態です。さらに、いま開発されているさまざまなDockerの関連ツールはすべてLinux版のDocker Engineを対象としているため、それらがそのままWindows Server版Docker Engineでも使えるかどうかは未知数です(マイクロソフトは対応するべく努力するでしょうけれど)。
それらを考えると、Windows ServerでDocker Engineが本格的に使い始められるのは1年以上先のことになるはずです。
とはいえ、ここまで来ればDockerのブームも本物でしょう。おそらく現在のクラウドで仮想化技術を使うのが当たり前のように、これからのクラウド環境ではDockerを用いるのが当たり前になるのではないでしょうか。
あわせて読みたい
「クラウドでオラクルは勝ち残っていきますよ」、エリソン氏直属のチーフコーポレートアーキテクトに、OpenStack採用とクラウド戦略を聞く
≪前の記事
[速報]マイクロソフトがDockerと提携、次期Windows ServerでDockerを採用と発表。Microsoft AzureではDocker Hubとの統合も