昨今、コンテナ技術が主流になって来ていますが、使用したことがないため、担当として任された際に対応できるよう、見識を深めたいと思います。
コンテナ周りの技術は、大きく分けると「作る」「動かす」「管理する」「クラウドで使う」というレイヤーに分かれています。
まず最初のレイヤーは、コンテナを作る・実行するための技術です。ここに当たるのがDockerです。Dockerは、アプリケーションとその実行環境をイメージとして作り、それをコンテナとして起動する機能を提供します。開発者が普段触る入口の技術であり、コンテナといえばまずDockerを指すことが多いです。ただし現在では、Docker自体というより、その内部で使われているcontainerdやCRI-Oといった「コンテナランタイム」が実際の実行を担っており、Kubernetes環境ではこちらが直接使われることも増えています。
次のレイヤーは、複数のコンテナをまとめて管理する技術です。ここに該当するのがKubernetesです。Dockerだけでもコンテナは動かせますが、実際のサービスでは複数のコンテナを同時に運用し、負荷に応じて増減させたり、障害時に自動復旧させたりする必要があります。Kubernetesはそうした運用を自動化する仕組みで、コンテナをどのサーバーで動かすか、何個動かすかといったことを全体的にコントロールします。いわば「コンテナのオーケストレーター(指揮者)」です。
さらにその上には、Kubernetesを含めたコンテナ基盤をクラウドで提供するサービスがあります。たとえばAWSのEKS、Google CloudのGKE、AzureのAKSなどです。これらはKubernetesを自分で構築・運用する手間を省き、クラウド上で簡単に使えるようにしたものです。インフラ管理をクラウドに任せつつ、コンテナ運用のメリットを活かせるのが特徴です。また、AWS Fargateのように、サーバー自体を意識せずにコンテナだけ実行できるサービスもあり、これはさらに抽象化された形といえます。
補足として、開発やローカル環境で複数コンテナをまとめて扱うためのツールもあります。たとえばDocker Composeは、複数のコンテナ(データベース、API、フロントエンドなど)を一括で起動・管理するための仕組みで、Kubernetesほど大規模ではないものの、開発環境では非常によく使われます。
このように整理すると、Dockerは「コンテナを作って動かすツール」、Kubernetesは「それを大規模に管理する仕組み」、EKSやGKEは「それをクラウドで簡単に使えるサービス」という関係になります。