【第1回】Docker/Kubernetesは何を解決するか?

Docker/Kubernetes入門【第1回】

こんにちは、汐留みずほです。

「Docker/Kubernetes入門」と題して、Docker/Kubernetesについてわかりやすくまとめていきたいと思います。よろしくお願いいたします。

Dockerが解決する課題

Kubernetesの話に入る前に、Dockerについてまとめておきたいと思います。

Dockerは、コンテナ型の仮想環境を作成・配布・実行するためのプラットフォームです。VMware等の仮想マシンと比較されることが多く、ハイパーバイザ上に仮想的なハードウェアを作成してその上でOSやソフトウェアを動かす仮想マシンと比較して、コンテナはホストOSのプロセスとして起動するため高速であるという説明がなされます。

Dockerのメリットとして挙げられる「仮想マシンと比較して高速である」ということですが、コンテナはDocker以前からありましたし、Docker自体も以前はLXCというコンテナ技術を使用していましたので、コンテナであることだけがDockerが大きく注目されることになったわけではなさそうです。

Dockerでは、コンテナ上で動作するアプリケーションの土台となる部分(ミドルウェアやソフトウェアパッケージ、各種設定情報)をコードとして管理します。コードとして管理されたアプリケーションの土台となる部分は、他のDocker環境にも全く同じ環境を作ることができます。コード化されたファイルを共有することで、どこでも誰でも同じ環境が作れること、作成した環境の配布が容易であることが、Dockerが注目されるようになった理由のひとつだと言えるでしょう。

環境をコード化して管理し、全く同じ環境を複数作ることができるメリットとして、以下が挙げられます。

  • 本番環境と同じ環境を開発環境として手元に作成することができる
  • 開発環境では動いていたが本番環境で動かなかったというトラブルを防止することができる
  • 複数人で開発している場合でも、全員が同じ環境で開発を進めることができる

このように、Dockerを活用することで安定して開発を進めることができるようになります。

Kubernetesが解決する課題

続いて、Kubernetesについてご説明します。kubernetesはコンテナのオーケストレーションツールと呼ばれるもので、Dockerを単体で稼働させる場合と比較して多くのメリットを享受することができるものです。

Kubernetesでは、コンテナが動作する基盤となるノードを、クラスタとして複数台まとめて管理することができるようになっています。稼働していたコンテナに障害が発生した場合自動修復したり、ノード自体に障害が発生した場合、そのノード上で稼働するコンテナを他のノードへ移動して稼働させたり、ある特定のコンテナに負荷が集中した場合に自動でスケーリングしたりすることができるようになります。

また、コンテナの可搬性もkubernetesでは重要なポイントです。Kubernetesは物理マシン/仮想マシンなどを自前で用意してクラスタを構築するほかに、AWS/Azure/GCPなどのクラウドプロバイダーが提供するマネージドサービスとして利用することができるようになっていますが、基本的に異なる環境であってもコンテナを移動させることができますし、操作するコマンドも統一されており、クラウドプロバイダーの中には、プライベートクラウドとパブリッククラウドで同じ環境を動かせることをメリットとして掲げているところもあります。

まとめ

このように、Dockerによって開発環境の改善につながり、さらにDockerにはない「本番環境で求められる機能」はKubernetesによって実現され、今日ではともに非常に注目される技術になりました。次回以降は「実際に操作して理解する」内容をお届けする予定です。