ナビゲーションをスキップする

Kubernetes と Docker

連携させることでより適切に動作するコンテナー テクノロジを使用して、アプリをよりすばやく作成、配布、スケーリングしましょう。

Kubernetes と Docker の比較の質問

Kubernetes とDocker の比較についての議論は多くの場合、Kubernetes と Docker のどちらを使用すべきか、ということに収まります。これはリンゴとアップル パイを比較するようなもので、どちらかを選べばよいということではありません。

Kubernetes と Docker の違いは、\"どちらも使用する\" という考えに基づくと簡単に理解できます。事実、どちらかを選ぶ必要はありません。Kubernetes と Docker は根本的に異なるテクノロジで、一緒に使用することでコンテナー化したアプリの作成、配布、スケーリングを適切に行うことができます。

Docker とコンテナリゼーションの台頭

Docker はオープンソース テクノロジ (およびコンテナーのファイル形式) で、クラウドまたはオンプレミスで実行できる、ポータブルで独立型のコンテナーとして、アプリケーションのデプロイを自動化することができます。Docker, Inc., (Docker と同じような名前ですが) は、Microsoft のようなクラウド プロバイダーと共同で、Linux や Windows 上で実行できるオープンソースの Docker テクノロジを強化しています。

環境を分離するという考えは新しいものではなく、さまざまな種類のコンテナリゼーション ソフトウェアがある中で、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 は併用すると、より効果的です。Azure で Kubernetes を併用してセキュリティで保護された DevOps を実装すると、速度とセキュリティのバランスを取ることができ、規模に合わせてコードを高速に提供できます。

Azure で Kubernetes の長所を活用

Azure Kubernetes Service (AKS) を使用すると、コンテナー化されたアプリケーションのデプロイと管理が簡単になります。AKS では、サーバーレスの Kubernetes、統合された CI/CD エクスペリエンス、企業向け仕様のセキュリティとガバナンスが提供されます。開発チームと運用チームを単一のプラットフォーム上で統合し、迅速かつ確実にアプリケーションをビルド、デリバリー、スケーリングします。

Kubernetes と Docker の概要