Docker/Kubernetesはなぜ生まれ⁠なぜ広まったのか

今や当たり前に使われるようになったコンテナ技術は、何を目的に生まれたのでしょうか。そして、活用の鍵はどこにあるのでしょうか。コンテナ技術を代表するツールであるDocker/Kubernetesがたどった経緯を振り返りながら解説していきます。

Dockerはなぜ生まれたか

Dockerは「隔離された環境=コンテナ」をひとつの単位として扱い、コンテナ内でのプロセスの実行やコンテナ/コンテナイメージの管理などを一貫した操作で行えるツールです。コンテナイメージにはアプリケーションの実行に必要なファイルがまとまっており、コンテナとしての実行時にはOSからCPUやメモリが割り当てられます。これにより、可搬性の高さ、環境の再現の容易さ、デプロイのすばやさなどのメリットが生まれました。

こうしたアイデアは、クラウドサービスプロバイダであるdotCloud社(のちにDocker社に改称)で開発されたdcというツールがもとになっています。このdcをGo言語によって実装しなおし、2013年にOSSとして公開されたのがDockerです。その後競合するコンテナ実行環境などの登場もあり、2015年から2017年にかけてコンテナの標準仕様が定められました。こうした標準化されたしくみのなかで、Dockerをとりまくエコシステムは現在も進化しつづけています。

Kubernetesはなぜ生まれたか

さて、Dockerの登場により細かな単位での環境の管理が容易になりました。しかし実際のサービスを運用するにあたっては、複数のコンテナを組み合わせ、クラスタとして管理する必要があります。こうした「コンテナオーケストレーション」のための代表的なツールがKubernetesです。これにより、クラスタのスケーリングや障害の自動修復、クラスタ間での通信の管理などが可能になるわけです。

Kubernetesのもととなったのは、2000年ごろからGoogle社内で利用されていたBorgと呼ばれるオーケストレーションツールです。このBorgのアーキテクチャをDockerコンテナの管理に適用し、2014年にOSSとして公開されたのがKubernetesです。早い段階でのGoogle Cloud Platformでのサポートなどさまざまな要因が重なり、現在ではコンテナオーケストレーションのための事実上の標準ツールとなっています。

Docker/Kubernetes活用のポイント

ここまで見てきたとおり、Docker/Kubernetesによって柔軟で堅牢なシステムをすばやく構築し運用することが可能になりました。

ただし、これらのメリットを最大限享受するためには特有のノウハウが必要です。たとえば、高速なビルド・デプロイを実現するためには、コンテナイメージを作る際に工夫が必要です。また、システムのあるべき姿を宣言的に示すことでクラスタの自律性を高められますが、そのためにもKubernetesへの理解が必要になってきます。そんなノウハウを知るためにおすすめしたいのがみんなのDocker/Kubernetesです。

本書の構成を紹介しましょう。まず第1部では、本稿で見てきたような歴史をひもときながらコンテナ技術の概要を復習します。続く第2部では、上記のような実践的な知識やそのために役立つツールを紹介します。いずれもゼットラボのエンジニアによる濃い内容となっています。そして第3部では、freee、Wantedly、CyberAgent、サイボウズという有名企業におけるDocker/Kubernetes活用の舞台裏を、こちらも現場のエンジニアが紹介していきます。

最新のノウハウが詰まった本書を片手に、Docker/Kubernetesを最大限に活用していきましょう!