• 検索結果がありません。

Docker プラットフォームの未来

第 6 章 Docker が切り開くソフトウェア開発の未来 131

6.12 Docker プラットフォームの未来

Docker

の人気が高まるにつれて、

Docker

社がそのプラットフォームを拡大しようとして

いる点は注目に値します。

執筆時点では、アプリケーションとしての

Docker

がサポートしているのは

x86_64

プラッ トフォーム上の

Linux

だけです。

ARM

等の他のハードウェアアーキテクチャ上では利用でき

ませんし、

32bits

に対する対応も十分ではないようです*20

一方、

2014

10

月に「

Docker

社がマイクロソフト社と提携する」というニュースが発表

されました。「

Docker

とは(

Linux

)コンテナベースのソフトウェア」と捉えていると、この ニュースはショッキングというか「何アホ言ってんだ」という内容に見えます。

しかし、

Docker

によるマイクロサービスの世界観と、マイクロソフト社と

Docker

社の提

携は矛盾しないと筆者は考えます。

この提携に関して、執筆時点ではプレスリリース*21以上の情報があまりないのですが、

Windows Server

で動作するアプリケーションコンテナ配布も

Docker Hub

経由で行え、

Windows Server

上で

"docker pull"

といった各種コマンドを実行できるようになる、といっ た内容ではないかと筆者は解釈しています。

エンドユーザに提供する「マクロ」なサービスを考えた場合、個別のマイクロサービス用コ ンテナに期待されるのは、結合させたときのその「マクロサービス」の品質に与える、使用 する外部から見たコンテナそのものの性質です。たとえば「

SQL DB

サービスを提供するコ ンテナ」を考えたとします。そこで重要なのは中のデータが正しく扱われ、高速で、どうい う意味であれ「セキュア」であることです。そこで使用される

OS

CentOS

Windows

Server

かは、互換性が提供される限り重要ではなくなるかもしれません(その配置を受けも

つ、

Kubernetes

のようなコンテナスケジューラにとっては依然大事です)。

同等の機能を提供するコンテナへ切り替える選択肢が提供される状況は、マイクロサービ ス・アーキテクチャに基づくソフトウェア開発では歓迎されるでしょう。プロプライエタリな ソースコードを含むコンテナを

Docker Hub

で「売る」というエコシステムも、ユーザと販 売する企業に恩恵を与えるでしょう。ここにクラウド事業者が独自に提供する、データセン ター内限定のプロプライエタリ・マイクロコンテナがあったとしても、おかしくありません。

強いていえば、コンテナに基づく流通を見落とした業者が販売経路を失う程度です。

ただしそこに至るには、

Docker

がユーザに信用を担保する必要があります。たとえば

Docker 1.3

では、追加されたコンテナへの署名機能が追加されました。上記のようなコンテ

ナの「流通」を

Docker Hub

が担保する上では、このような機能は必要不可欠です。

ソフトウェアとしての

Docker

はオープンソースになっていますが、

Docker

社は企業です。

Docker

社がプラットフォームとして成功するには、単純にコンテナが勝手にアップロードさ

*20 たとえばhttps://github.com/docker/docker/issues/611

*21 http://weblogs.asp.net/scottgu/docker-and-microsoft-integrating-docker-with-windows-server-and-microsoft-azure

れてダウンロードされるだけでは足りません。

Docker

プラットフォームは、アプリケーショ ンをサンドボックス上で実行する選択肢を提供し、その販売すら仲立ちする、

OS

独立なプ ラットフォームを目指すかもしれません。現在見られるいくつかの諸機能と提携はそのよう な方向性を示唆しています。

もちろんこのプラットフォーム拡大をすべてのユーザが歓迎することは有り得ません。た とえばごく単純に単なる

VM

代替として

Linux

のコンテナ技術をを使用したい場合、

Docker

プラットフォームの増大し続ける複雑さは、逆に管理上の重荷になるはずです。

Docker

アプ リケーションがすべての運用局面で安定して使えると仮定すること自体にも無理が生まれて きます。

サーバサイドアプリケーションの開発に話を絞るとして、マイクロサービスに基づくアプ ローチが常によいわけではありません。開発スタイルを切り替えること自体にはコストが発 生しますし、細粒度化したことによる恩恵を受けられるかは個別のプロジェクトによります。

前述した筆者の例に登場するような大量のサンドボックス実行は自明に相性の良い稀有な プロジェクトです。開発者が成立させたい(マクロ)サービスの中で、このような小規模な

「マイクロサービス」に分解できるようなコンポーネントが自明に発見できて、それがサービ ス内に複数成立する必要性あるいは少なくともその意味があり、そのコンポーネントの廃棄や 再生成を行うことがマクロサービスを成立させる前提になっているのであれば、

Docker

コン テナを利用してマイクロサービス的に設計を行う有効性は高いでしょう。筆者など、

Docker

を見て飛び上がって喜んだほどです。同様の性質をもつソフトウェアスタックは、おおよそ

Docker

コンテナと合う「側面をもつ」とは思います。

そのような「自明」な分割が見いだせない状況では、より慎重な判断が必要です。そもそ も、分断された環境をまたぐソフトウェア開発を支援する技術は、結合したアプリケーション に対するそれと比べると、ひどく貧弱で未成熟です。現状では「複数の独立した環境向けの異 なるソフトを独立に開発してあとでくっつける」以上のものではありません。接合部を数学的 に検証するようなメカニズムの普及には時間がかかるでしょうし、そもそもこういった分野 は、現状の開発ではやや放置されがちな印象を筆者は持っています。

当座、コンポーネント間検証と調整は開発者が行うことになるのでしょう。しかし特に社内 開発というコンテクストであれば、この分離は単に無駄が発生しているだけのように感じるは ずです。マクロサービスを構成する個別のマイクロサービスに対して、担当者を個別に特定で き、それぞれが相互に物言いをできる体制になっていたりしない限り、モノリシックな設計に

して単一のビルドプロセスとしておくほうが、シンプルで迅速で、効果も高いはずです*22。 単なる並列・並行処理したいだけなら、まず落ち着いて、その分野特化した良い選択肢が ないかを考えたほうがよいでしょう。

Docker

がもつ良い性質は、既存の技術よりも特に複 数インスタンスの生成・破棄を伴う単一のユーザランドアプリケーションの実行に偏ってい ます。ハードウェアも含めて発達した処理機構をもつ仕組みが特定の分野で発達していれば、

Docker

コンテナを敢えて使う必要性は全くありません。

Kernel

GPU

のレベルでの支援が

前提となって発達している分野では、そもそもコンテナは使用できません。