Trace Id is missing
メイン コンテンツへスキップ
Azure

Kubernetes vs. Docker

連携してより良い効果を発揮するコンテナー テクノロジを使用して、アプリのビルド、デリバリー、スケーリングをスピードアップしましょう。
 

Kubernetes vs. Docker の問題

Kubernetes と Docker の比較が話題になるとき、それは Kubernetes と Docker のどちらを使うべきか、という二者択一になりがちです。これはリンゴとアップル パイを比較するようなものであり、どちらか一方を選ぶべきという考えはよくある誤解です。

Kubernetes と Docker の違いは、"両立" の問題と考えると理解しやすくなります。実際には、どちらかを選ぶ必要はありません。Kubernetes と Docker は根本的に異なるテクノロジであり、連携させるとコンテナー化アプリのビルド、デリバリー、スケーリングに対して高い効果を発揮します。

Docker とコンテナー化の台頭

Docker は、アプリケーションのデプロイを自動化するためのオープンソース テクノロジであり、コンテナー ファイルの形式でもあります。アプリケーションはポータブルな自己充足型のコンテナーとしてデプロイされ、クラウドでもオンプレミスでも実行できます。よく似た名前を持つ Docker, Inc. は、オープンソースの Docker テクノロジの発展に努める企業の 1 つであり、Microsoft のようなクラウド プロバイダーと協力して、このテクノロジを Linux と Windows で実行できるようにしています。

環境を分離するという考えは新しいものではなく、他の種類のコンテナー化ソフトウェアも存在しますが、Docker は成長を続けてここ数年の間に標準のコンテナー形式となっています。Docker の特徴は Docker Engine で、これはランタイム環境です。これを使用すると、コンテナーのビルドと実行を任意の開発マシンで行うことができます。また、コンテナー イメージを Docker Hub や Azure Container Registry などのコンテナー レジストリ経由で保存または共有できます。

アプリケーションが拡大して複数のコンテナーにまたがり、複数のサーバーにデプロイされるようになると、その運用はさらに複雑になります。Docker はコンテナー化アプリのパッケージ化と配布のオープン標準ですが、複雑さは急激に増大する可能性があります。多数のコンテナーをどのように連携させてスケジュールするか? アプリ内のさまざまなコンテナーが互いに通信できるようにするには、どうすればよいか? 多数のコンテナー インスタンスをどのようにスケーリングするか? このような場合は、Kubernetes が役立ちます。

Kubernetes とコンテナー オーケストレーション

Kubernetes はオープンソースのオーケストレーション ソフトウェアであり、コンテナーをどこでどのように実行するかを制御するための API を提供しています。これを利用すると、Docker のコンテナーとワークロードを実行できます。また、複数のコンテナーのスケーリングが必要になり、複数のサーバーにデプロイするようなときの運用の複雑さへの対処にも役立ちます。

Kubernetes を使用すると、仮想マシンのクラスターをオーケストレーションして、コンテナーをこれらの仮想マシン上で実行するようにスケジュールすることができます。このスケジュールは、仮想マシン上で利用可能なコンピューティング リソースと各コンテナーのリソース要件に基づいて決定します。複数のコンテナーがポッドとしてグループ化され、これが Kubernetes の基本的な運用単位となります。これらのコンテナーとポッドは、開発者が望む状態になるまでスケーリングでき、開発者は自分のアプリを常時稼働できるようにコンテナーとポッドのライフサイクルを管理することができます。

Kubernetes と Docker の相違点

Kubernetes はオープンソースのオーケストレーション ソフトウェアであり、コンテナーをどこでどのように実行するかを制御するための API を提供しています。これを利用すると、Docker のコンテナーとワークロードを実行できます。また、複数のコンテナーのスケーリングが必要になり、複数のサーバーにデプロイするようなときの運用の複雑さへの対処にも役立ちます。

Kubernetes を使用すると、仮想マシンのクラスターをオーケストレーションして、コンテナーをこれらの仮想マシン上で実行するようにスケジュールすることができます。このスケジュールは、仮想マシン上で利用可能なコンピューティング リソースと各コンテナーのリソース要件に基づいて決定します。複数のコンテナーがポッドとしてグループ化され、これが Kubernetes の基本的な運用単位となります。これらのコンテナーとポッドは、開発者が望む状態になるまでスケーリングでき、開発者は自分のアプリを常時稼働できるようにコンテナーとポッドのライフサイクルを管理することができます。

Kubernetes と Docker――組み合わせるとさらに効果的

コンテナーによって実現するのは "コーディング 1 回でどこでも実行" ですが、Kubernetes を利用すると、すべてのコンテナー リソースを 1 つのコントロール プレーンからオーケストレーションして管理することが可能になります。このことは、コンテナーを実行するすべての Kubernetes ノード間でのネットワーキング、負荷分散、セキュリティ、スケーリングに役立ちます。Kubernetes には分離メカニズム (名前空間など) も組み込まれており、アクセス許可やステージング環境などを基準としてコンテナー リソースをグループ化することができます。このような構造を利用すると、IT 担当者が開発者にセルフサービスのリソース アクセスを許可することが簡単になり、開発者はきわめて複雑なマイクロサービス アーキテクチャ上で共同作業するときでも、アプリケーション全体を自分の開発環境の中でモックアップすることが不要になります。DevOps の実践にコンテナーと Kubernetes を組み合わせると、さらにマイクロサービス アーキテクチャのベースラインを確立することができ、クラウドネイティブ アプリケーションの高速デリバリーとスケーラブルなオーケストレーションが促進されます。

要するに、Kubernetes を Docker と共に使用すると次のことができます。

  • インフラストラクチャをさらに堅牢に、アプリの可用性をさらに高くします。一部のノードがオフラインになったとしても、アプリはオンラインのままです。
  • アプリケーションをさらにスケーラブルにします。アプリの負荷が増え始めて、スケールアウトしなければ良好なユーザー エクスペリエンスを提供できないような場合に、追加のコンテナーをスピンアップすることも、ノードを Kubernetes クラスターに追加することも簡単です。

Kubernetes と Docker は連携して動作します。Docker は、コンテナー化アプリケーションのパッケージと配布のオープン標準です。Docker を使用すると、コンテナーをビルドして実行することができ、コンテナー イメージを保存して共有することができます。Docker のビルドを Kubernetes クラスター上で実行するのは簡単ですが、Kubernetes 単独では完全なソリューションではありません。実稼働での Kubernetes を最適化するには、追加のツールとサービスを実装してセキュリティ、ガバナンス、ID、アクセスを管理するとともに、継続的インテグレーションと継続的デプロイ (CI/CD) ワークフローやその他の DevOps の手法を実践します。

実稼働での Kubernetes と Docker のソリューション アーキテクチャ

AKS を使用するマイクロサービスのソリューション アーキテクチャ図

AKS を使用するマイクロサービス

AKS を使用すると、マイクロサービス ベースのアーキテクチャのデプロイと管理をシンプルにすることができます。水平スケーリング、自己復旧、負荷分散、シークレット管理が AKS によって効率化されます。

AKS のためのセキュア DevOps のソリューション アーキテクチャ図

AKS のためのセキュア DevOps

DevOps と Kubernetes は、組み合わせるとさらに効果的です。セキュア DevOps を Kubernetes と共に Azure 上で実装すると、速度とセキュリティのバランスを取ることができ、コードの大規模なデリバリーをさらに速く行うことができます。

Kubernetes の強みを Azure で活用しましょう

コンテナー化アプリケーションのデプロイと管理は、Azure Kubernetes Service (AKS) を使用すると簡単です。AKS では、サーバーレス Kubernetes、統合された CI/CD エクスペリエンス、エンタープライズグレードのセキュリティとガバナンスが実現します。開発と運用のチームを単一のプラットフォーム上でひとつにまとめて、アプリケーションのビルド、デリバリー、スケーリングをすばやく、確実に行いましょう。

Kubernetes と Docker を始めましょう