Dockerコンテナ時代の第一章の終わり、そして第二章の展望など
2013年、Docker登場
Dockerが登場したのは2013年3月26日のことでした。 Dockerリリース 2010年に創業し2011年からPaaSを提供するクラウドベンダーだったdotCloudが3月、オープンソースのソフトウェアとして公開しました。 ●Opening docker - Docker Blog dotCloudからDockerへ そのDockerは登場当初から急速に注目されるようになり、その結果dotCloud社は社名をDockerに変更し、Dockerを同社のビジネスとして立ち上げるという大胆な発表を行います。2014年、Googleは毎週20億のコンテナを起動していた
2014年は、コンテナがIT業界の大きなトレンドとして認識された年でした。 Docker 0.9 2014年3月にリリースされたDocker 0.9では、それまで依存していたLXCから独自に実装したlibcontainerへ切り替えることで安定性が向上。 2014年4月には、Red HatがDocker専用の軽量OS﹁Red Hat Enterprise Linux Atomic Host﹂を発表。Dockerはニッチではなくメインストリームの技術であるという認識が広まり、日本でもDocker Meetupなどのイベントが開催されるようになりました。 ●今からでも間に合うDockerの基礎。コンテナとは何か、Dockerfileとは何か。Docker Meetup Tokyo #2 - Publickey Googleはすべてをコンテナ化していた こうしてコンテナへの注目度が国内外で高まる中、Googleはすでに全部のソフトウェアをコンテナ化しており、毎週20億個ものコンテナを起動していると発表し、多くのエンジニアを驚かせました。![Google and Containers](http://www.publickey1.jp/blog/14/gcontainer01.jpg)
2015年、コンテナ仕様は標準化へ
2月、Red HatはOpenShift V3でそれまでのアーキテクチャを捨てて、DockerとKubernetesをコアとすると発表。Kubernetesへの傾倒を明確にします。 ●DockerとKubernatesを核にしたPaaS基盤へと変わるOpenShift V3 - Publickey Open Container Initiativeスタート コンテナ実装のあり方についてやり合っていたDockerとCoreOSが一転、6月にマイクロソフト、Google、Red Hat、VMware、Amazon Web Servicesらと共同でコンテナの標準化団体﹁Open Container Initiative﹂︵発表時の名称はOpen Container Project﹂︶の発足を発表。それまでDockerやCoreOSなどそれぞれのベンダが独自に実装していたコンテナが、一気に標準化へ舵を切ります。![Open Container Initiative](http://www.publickey1.jp/blog/15/dcon07.jpg)
2016年、Swarm対Kubernetes
Docker for Mac/Windows登場 3月にはVirtualBoxなどが不要でOSネイティブの仮想化を用いた﹁Docker for Mac/Windows﹂が登場。 DockerにSwarmバンドルを発表 6月におこなわれたDockerCon 16では、Dockerにコンテナオーケストレーション機能のDocker Swarmを内蔵することを発表。このあたりから、SwarmとKubernetesを軸としたコンテナオーケストレーションツールの主導権争いが表面化してきます。 ●﹇速報﹈Docker、最新バージョンでDocker Engineにオーケストレーション機能を内蔵。外部ツール不要でクラスタ運用を実現。DockerCon 16 8月には発表通り、Docker Swarmを内蔵した﹁Docker 1.12﹂が登場。 Kubernetesが独自コンテナランタイム開発を表明 Kubernetes側は当然のことながら、こうしたDockerの動きを歓迎しませんでした。10月には、Kubernetesの開発陣が独自のコンテナランタイム﹁cri-o﹂を開発中であることを表明します。 ●Kubernetes、独自のコンテナランタイム﹁cri-o﹂開発中。コンテナランタイムのインターフェイスを標準化し、Dockerだけでなくどんなコンテナランタイムでも対応可能に - Publickey Dockerからcontainerdが分離 これをDocker側が警戒したのかどうかは不明ですが、12月にはDockerエンジンのコアランタイムを﹁containerd﹂として分離、独立したオープンソースプロジェクトとなります。 また、11月には日本人としては初めてのDockerメンテナとして、NTTの須田氏が就任しました。2017年、Kubernetesが事実上の標準に
そして今年、コンテナオーケストレーションツールをめぐる状況は大きく動きました。 Kubernetes優勢の状況へ 2月、CoreOSはKubernetesがコンテナオーケストレーションツールのデファクトになったとし、自社で開発していたオーケストレーションツール﹁fleet﹂の開発終了を発表します。 ●﹁Kubernetesはオープンソースのコンテナオーケストレーションのデファクトになった﹂と、CoreOSがfleetの開発を終了、代わりにKubernetes採用を発表 - Publickey この頃から、Kubernetesがコンテナオーケストレーションツールとして頭一つ抜け出した状況が見え始めます。 Kubernetes 1.6登場 3月に登場したKubernetes 1.6は、etcd3とgRPCを採用したことで大幅に性能向上。さらに名前空間の分離や物理ノードの考慮などの機能向上も果たしました。 Moby Project発表 4月、DockerCon 2017でDockerはMoby Projectを発表します。Moby Projectはさまざまなコンテナ関連のソフトウェアをコンポーネント化することで、目的ごとに特化したコンテナシステムを作ることができるフレームワークです。![Moby Project](http://www.publickey1.jp/2017/dockercon1711.gif)
![DockerCon EU 2017 fig4](http://www.publickey1.jp/2017/dockerconeu04.gif)
コンテナランタイムの多様化
こうして2017年末のコンテナの主な状況をまとめると、コンテナランタイムが標準化され、コンテナオーケストレーションツールの事実上の標準の座にKubernetesがつき、主要クラウドベンダはKubernetesのマネージドサービスを開始した、ということになるでしょう。 この状況から今後なにが起きるのかを少し考えてみます。ひとつは標準に沿ったうえでのコンテナランタイムの多様化ではないでしょうか。 実際にKubernetesは独自のコンテナランタイムであるcri-oをリリースしています。オラクルは、Rust言語で実装したより高速に起動するコンテナランタイムの﹁Railcar﹂をオープンソースで公開していますし、OpenStack Foundationは、軽量さと堅牢さを追求した﹁Kata Containers﹂の開発をスタートさせました。 コンテナがアプリケーションの基盤としてさまざまな用途で使われるようになるとすれば、その用途に合った特徴を備えたさまざまなコンテナランタイム実装が登場することは自然なことなのかもしれません。 とはいえ、現在のところコンテナ実装はcontainerdが事実上の標準となっています。そのcontainerdは今月、バージョン1.0に到達したばかりです。いましばらくこうした状況が続くとみられます。 ●事実上の標準コンテナランタイム﹁containerd﹂がバージョン1.0に到達 - PublickeyKubernetesによるマルチクラウド
AWS、Azure、Google Cloudなどの主要なクラウドによるマネージドなKubernetesのサービスがはじまったことも注目に値します。 しかもKubernetesの開発をホストしているCloud Native Computing Foundationはなかなかやり方が上手で、﹁Kubernetes適合認証プログラム﹂を開始し、独自のKubernetes実装などによるAPIの齟齬などが広まらないように手を打っています。 そうするとすぐに思いつくのが、複数の異なるクラウドをKubernetesのレイヤで抽象化する、というアイデアでしょう。 これまでクラウド間で仮想マシンを柔軟に移動させることは可能ではありましたが面倒であり、動的に行えるような柔軟性もありませんでした。 しかしどのクラウドも同じコンテナオーケストレーションツールのKubernetesと標準仕様のコンテナが使われているのであれば、これをKubernetesのレイヤで束ねてコンテナをクラウド間で柔軟に移動する、ということが可能になります。 少なくともDockerは昨年からDocker Datacenterで︵Kubernetesとは異なる実装で︶こうしたことを実現しようとしていました。今年、Kubernetesとの統合を発表した同社としては、あらためてKubernetesを用いた実装で実現しようとしてくると思われますし、おそらく他のベンダやオープンソースなどでも同様のソフトウェアが登場してくるのではないでしょうか。 これが機能するようになれば、ユーザーはKubernetesのオーケストレーション機能を用いてワークロードの種類や価格に合わせてクラウドを自由に使い分ける、といったことがやりやすくなります。 一方で、クラウドベンダにとって自社のクラウドがKubernetesで抽象化されてしまうのは、独自性や付加価値を失うことにつながってしまいます。 そこでクラウドベンダとしては、コンテナをベースにアプリケーションの開発、テスト、デプロイ、本番運用までの一連のライフサイクル全体でユーザーに使いやすくなるようなツールやサービスを構築することで、できるだけ競合他社のクラウドへワークロードが逃げないような施策を打つことでしょう。 その点で、AWSがAmazon EKSを発表すると同時に、それよりも使いやすいコンテナの実行環境として﹁AWS Fargate﹂を発表したのは、さすがによく考えられた戦略に沿ってサービスができているように見えます。ハイブリッドクラウドもKubernetesになるか?
ではオンプレミスでのKubernetesの展開はどうでしょうか? もしもオンプレミスでもKubernetesがある程度使われるようになるとすれば、前述のパブリッククラウド同士の連携と同様に、Kubernetesのレイヤでハイブリッドクラウドを構築するための基盤として展開されるものになると考えられます。 ただし、まだオンプレミスでのKubernetesの展開は未知数です。VMwareと関連会社のPivotalが、VMware環境上にKubernetes環境を展開する﹁Pivotal Container Service﹂︵PKS︶を今年の8月に発表していますので、動向を注目したいと思います。![VMworld Pivotal Container Service](http://www.publickey1.jp/2017/vmware_day202.gif)
一方、マイクロソフトはWindows上でのKubernetesについて目立った動きを見せていません。しかしWindows ServerでDocker対応を発表したように、おそらく何らかの発表を来年にはしてくるのではないでしょうか。
2018年はコンテナによるソリューションのフェーズへ
Kubernetesにはまだ、仮想ネットワークの構築やコンテナに適したストレージをどうするか、といった課題も残っています。来年にはこうした課題に対するソリューションも安定したものになってくると思われます。
とはいえ、2017年末でコンテナとコンテナオーケストレーションの基盤技術をめぐる競争はおおむね終結したように見えます。
2018年はその基盤を用いてどんな価値のあるソリューションを構築するか、そういう新たなフェーズへと入っていくのではないでしょうか。
(追記 2017/12/12:タイトルの「コンテナ」が海運のコンテナなどと区別がつきにくいことから、「Dockerコンテナ」にしました)
あわせて読みたい
サーバレスコンピューティング、もっとも利用されているのはAWS Lambdaで70%、Google Cloud Functionsが13%。CNCF調査
≪前の記事
コンテナの軽量さと仮想マシンの堅牢さを兼ね備えた新しいコンテナ実装「Kata Containers」、OpenStack Foundationが発表