Kubernetes と Docker はどのように異なりますか?

Docker は、従来の方法よりも迅速にアプリケーションを構築、テスト、デプロイできるようにするコンテナランタイムテクノロジーです。Docker は、コンテナと呼ばれる標準化されたユニットにソフトウェアをパッケージ化します。コンテナには、ライブラリ、システムツール、コードなど、ソフトウェアの実行に必要なすべてのものが含まれています。Kubernetes はコンテナオーケストレーションツールです。これを使用することで、コンテナシステムをスケールできるため、コンテナを大規模に管理、調整、およびスケジュールできます。

Kubernetes と Docker はどのような場面で使用されていますか?

Kubernetes と Docker はどちらもコンテナテクノロジーです。最新のアプリケーションは、マイクロサービス (各アプリケーションプロセスをサービスとして実行する独立したコンポーネント) で構成されています。各サービスは単一の機能を実行し、API と呼ばれる明確に定義されたインターフェイスを介して他のサービスと通信します。コンテナ化は、さまざまなプラットフォームでデプロイ可能なプログラムとしてマイクロサービスをパックするためのソフトウェアツールを提供します。

マイクロサービスについて読む »

コンテナ化について読む »

コンテナを作成する

Docker は、近年人気を博しているオープンソースのコンテナランタイムです。コンテナを簡単かつ効率的に作成するためのツールキットを提供します。デベロッパーはコマンドを実行して、システムライブラリ、ツール、コード、および各マイクロサービスが必要とする他のソフトウェア設定を含むコンテナイメージファイルを構築します。すべてのマイクロサービスには、独自の Docker イメージがあります。Docker イメージを使用して、任意の環境でマイクロサービスを実行できます。

コンテナを管理する

ほとんどのアプリケーションは、複数のマイクロサービスで構成されています。それらのいくつかは、異なるサーバーをまたいで実行される数千のマイクロサービスにスケールできます。マルチコンテナアプリケーションは、次のような管理上の新たな課題をもたらします。

  • 複数のコンテナをどのように調整すべきか?
  • コンテナをどのようにスケジュールすべきか?
  • コンテナをどのようにグループ化し、カタログ化すべきか?

デベロッパーは、Kubernetes などのコンテナオーケストレーションプラットフォームを使用して、これらの課題を解決します。Kubernetes は、コンテナを大規模に管理できるようにするオープンソーステクノロジーです。運用の複雑さに対処できるため、ワークロードをスケールし、複数のサーバーにまたがるコンテナのデプロイを管理できます。

主な相違点: Kubernetes とDocker

Kubernetes と Docker はどちらもオープンソースのコンテナテクノロジーです。ただし、コンテナ化されたアプリケーションを配布する際に、それらがどのように機能し、どのような役割を果たすかは根本的に異なります。Docker は、デベロッパーがコンテナイメージを作成および操作するために使用されます。Kubernetes は、複数のマイクロサービスを大規模に管理するために使用されます。各マイクロサービスは、複数のコンテナ自体で個別に構成されています。

運用担当

Docker という用語は、実際には、デベロッパーがコンテナ化されたアプリケーションを構築、共有、および実行するために使用する一連のツールを指しています。使用できるいくつかの Docker コマンドを次に示します。

  • Docker Build を使用してコンテナイメージを作成する
  • Docker Compose を使用してマルチコンテナアプリケーションを定義および実行する
  • GitHub でのコード共有と同様に、Docker Hub を使用してコンテナイメージを見つけて共有する

一方、Kubernetes はコンピューティングインスタンスのクラスターを管理することで機能します。利用可能なコンピューティングリソースと各コンテナのリソース要件に基づいて、クラスターで実行するようにコンテナをスケジュールします。コンテナはポッドという論理グループ内で実行され、ユーザーは 1 つまたは複数のコンテナをまとめて 1 つのポッドとして実行およびスケーリングできます。リソース要件に基づいて、Kubernetes クラスターで追加のポッドを自動的に開始できます。

コアテクノロジー

Docker Engine は、デベロッパーがアプリケーションの構築とコンテナ化に使用するコンポーネントです。プログラムが対話して指示するために使用できるインターフェイスを指定する API を提供します。同様に、Kubernetes コントロールプレーンソフトウェアは、コンテナポッドをいつ、どのような場面で実行するかを決定し、トラフィックルーティングを管理し、定義した使用率や他の指標に基づいてポッドをスケールします。

最大のメリット

Docker は、デベロッパーが、アプリケーションとサービスを提供するローカルコンテナを使用して標準化された環境で作業できるようにすることで、開発ライフサイクルを合理化します。そのコンテナベースのプラットフォームにより、移植性の高いワークロードが可能になります。他方、Kubernetes では、複雑なコンテナ化アプリケーションを定義し、サーバーのクラスター全体で大規模に実行できます。

Kubernetes または Docker を使用する場合

Docker と Kubernetes は、異なるユースケースで使用される 2 つの異なるテクノロジーです。Docker Desktop は、コンテナ開発を実行、編集、および管理するために使用されます。Kubernetes は、本番グレードのアプリケーションを大規模に実行するために使用されます。

相違点のまとめ: Kubernetes とDocker デスクトップ

 

特徴

Kubernetes

Docker

内容

コンテナオーケストレーションツール。

コンテナを作成して実行するためのコンテナテクノロジーのスタック。

使用

複数のサーバー間で複数のコンテナを調整します。

ライブラリとランタイムを含むアプリケーションをコンテナイメージにパッケージ化します。

主なメリット

コンテナ化された複雑なアプリケーションを大規模に定義して実行します。

アプリケーションオペレーションを標準化し、コードをより迅速に提供します。

AWS はコンテナ管理要件をどのようにサポートできますか?

AWS は、オンプレミスでもクラウドでも、基盤となるコンテナインフラストラクチャの管理を容易にするいくつかのコンテナサービスを提供しています。サーバーを管理することなく、コンテナオーケストレーションからコンテナの実行まで、すべてを行うことができます。いくつかの例を以下に示します。

Amazon Elastic Container Service

Amazon Elastic Container Service (Amazon ECS) は、コンテナ化されたアプリケーションのデプロイ、管理、スケールを容易にするフルマネージド型のコンテナオーケストレーションサービスです。Kubernetes を Amazon ECS に置き換えて、AWS クラウドで Docker コンテナを実行できます。

Kubernetes とAmazon ECS

Amazon ECS は、コンテナオーケストレーションツールと、基盤となるインフラストラクチャリソースを自動的にプロビジョニングするフルマネージドサービスの 2 つのソリューションを 1 つのサービスで提供します。対照的に、Kubernetes では、クラウドまたはオンプレミスでリソースをプロビジョニングする必要があります。

Amazon Elastic Kubernetes Service

Amazon Elastic Kubernetes Service (Amazon EKS) は、AWS クラウドおよびオンプレミスデータセンターで Kubernetes を実行するためのマネージド Kubernetes サービスです。クラウドでは、Amazon EKS は、コンテナのスケジューリング、アプリケーションの可用性の管理、クラスターデータの保存、および他の重要なタスクを担当する Kubernetes コントロールプレーンノードの可用性とスケーラビリティを自動的に管理します。

AWS での次のステップ

Kubernetes で構築を開始する

AWS での Kubernetes の開始方法を学ぶ

詳細 
Docker で構築を開始する

AWS での Docker の開始方法を学ぶ

詳細