This is the Trace Id: b6a831ed266d9c6e2b20ddd17e8f9fe9
メイン コンテンツへスキップ Azure について理解する カスタマー ゼロとして Microsoft すべての製品を表示 (200 以上) Microsoft Foundry Azure Copilot GitHub Copilot Azure Kubernetes Service (AKS) Azure Cosmos DB Azure Database for PostgreSQL Azure Arc Microsoft Fabric Azure での Linux virtual machines Foundry Models Foundry Agent Service Foundry IQ Foundry Tools Foundry Control Plane Foundry Control Plane の監視 Azure OpenAI in Foundry Models Foundry Tools での Azure 音声 Azure Machine Learning すべてのデータベースを表示 Azure Cosmos DB Azure DocumentDB Azure SQL Azure Database for PostgreSQL Azure マネージド再配布 Microsoft Fabric Azure Databricks Azure での Linux virtual machines Windows Server on Azure Azure Functions Azure Virtual Machine Scale Sets Azure API Management Azure Container Apps Azure Kubernetes Service (AKS) Azure Kubernetes Fleet Manager Azure Container Registry Azure Red Hat OpenShift Azure Container Instances Azure コンテナー ストレージ Azure Arc Azure Local Microsoft Defender for Cloud Azure Monitor Microsoft Sentinel Azure Migrate すべてのソリューションを表示 (40 以上) 中小規模企業のための使いやすいソリューション クラウド移行およびモダン化センター AI 向けデータ分析 Azure データベース AI アプリとエージェント Microsoft Marketplace Microsoft Sovereign Cloud AI アプリとエージェント Azure を利用した責任ある AI AI インフラストラクチャ AI 向けデータ分析 機械学習の運用 (MLOps) Azure でのロー コード アプリケーション開発 統合サービス サーバーレス コンピューティング DevOps 移行とモダン化センター .NET アプリ移行 Azure 上のデータベース Linux on Azure Oracle on Azure SAP on Microsoft Cloud 適応型クラウド ハイパフォーマンス コンピューティング (HPC) サービスとしてのインフラストラクチャ (IaaS) 回復性 Azure Essentials Frontier Accelerate for Azure FinOps on Azure Microsoft Marketplace Azure 価格の概要 Azure アカウントを作成する 無料の Azure サービス 柔軟な購入のオプション 料金計算ツール FinOps on Azure AI で ROI を最大化する Azure 節約プラン Azure 予約 Azure ハイブリッド特典 Virtual Machines Azure SQL Microsoft Foundry Microsoft Fabric Azure Kubernetes Service (AKS) Microsoft Defender for Cloud 詳細を見る ソフトウェア開発企業 Microsoft Marketplace パートナーを見つける Azure パートナー向けリソース Azure の利用を開始する お客様導入事例 アナリスト レポート、ホワイト ペーパー、e-Book ビデオ クラウド コンピューティングについての詳細情報 ドキュメント Azure portal の詳細 開発者向けリソース クイックスタート テンプレート スタートアップ企業向けリソース 開発者コミュニティ 学生 パートナー向け Azure ブログ イベントとウェビナー 学ぶ サポート 営業に問い合わせる Azure の利用を開始する サインイン

Kubernetes とDocker: 両者の違いは?

Docker と Kubernetes が機能するしくみ、両者の違いや、チームがアプリケーションを構築、展開、管理する中でそれぞれをどのような場合に使用するかを説明します。

Docker と Kubernetes とは何ですか?

Docker と Kubernetes は、チームでアプリケーション開発について考えるとき両方セットで話題になることが多いものですが、同じものではありません。Docker はアプリケーションのパッケージ化と実行に関するしくみに主眼を置いています。一方 Kubernetes はアプリケーションの使用が始まった後の管理に関するしくみに主眼を置いています。特にシステムが大規模化、複雑化していく場合です。

重要なポイント

  • Docker と Kubernetes は異なる問題への解決策としてよく同時に使用されるものであり、競合するテクノロジではありません。
  • Docker は、開発環境と運用環境の両方において、一貫してアプリケーションのパッケージ化と実行に主眼を置いています。
  • Kubernetes はシステムの成長に応じて可用性、調整、信頼性を取り扱うことでアプリケーションを大規模に管理します。
  • コンテナーは、マイクロサービス アーキテクチャや DevOps ワークフローを含めたモダンな開発手法をサポートします。
  • コンテナー テクノロジは、組織において、安全かつ移植可能でスケーラブルなクラウドネイティブ アプリケーションを構築するために使用されています。
  • Docker と Kubernetes の組み合わせは、アプリケーションのパッケージ化手法であったコンテナー テクノロジが進化してスケーラブルなマネージド インフラストラクチャになった結果の姿だといえます。

Kubernetes とDocker

開発者は、アプリケーションの構築と実行をコンテナー内で行うことがよくあります。このコンテキストにおけるコンテナーとは、アプリケーションとその実行に必要なライブラリ、依存関係、構成ファイルなどすべてを含んだパッケージを意味します。コンテナーは、ソフトウェアが開発環境、テスト環境、運用環境 (クラウド サーバー上を含む) で一貫した形で実行されるようにするための助けとなります。

Docker と Kubernetes は、どちらもこの分野で広く使用されているテクノロジです。Docker とKubernetes の違いを理解するための第一歩は、それぞれが何を目的として設計されているかを知ることです。

Docker と Kubernetes の違いとは?

Docker と Kubernetes はどちらもコンテナーベースの環境で使用されていますが、目的が異なります。

Docker の目的はコンテナ化です。アプリケーションとその依存関係を標準のコンテナーにパッケージ化することで、開発者のノート PC でも運用環境でも一貫した形で実行されるようにします。Docker は本質的にアプリケーション レベルで動作し、Docker を利用できる場所であれば、どこでもコンテナー イメージを作成することや、それらのコンテナーを確実に実行することができます。

Kubernetes はコンテナーのオーケストレーションを行うために設計されています。インフラストラクチャ レベルで運用され、複数のマシンからなるクラスター上でコンテナーの展開、スケーリング、保守を管理できます。Kubernetes は、分散アプリケーションが円滑に実行され続けるように、利用可能なリソースに基づいてコンテナーをスケジューリングし、アプリケーションの正常性を監視し、停止したコンテナーを再起動し、ネットワークを取り扱います。

要するに、Docker はコンテナーを準備および実行するものであり、Kubernetes は実行されたコンテナーを管理するものです。

両者の責任が補完的な関係であるため、Docker と Kubernetes はしばしば同時に使用されます。コンテナー イメージの構築は Docker で行われ、展開後は Kubernetes がそれらを引き継いで、環境全体のコンテナー群の調整と監視を行います。

Kubernetes は Docker 専用ではないことに注意してください。互換性がある他のランタイムで作成されたコンテナーについても、Kubernetes は標準のコンテナー ランタイム インターフェイスを介してオーケストレーションできます。この柔軟性により、Docker を直接使用していない環境でも、Kubernetes はコンテナ化されたワークロードを Docker なしで管理できます。

Docker と Kubernetes の利点とユース ケース

Docker と Kubernetes の利点とユース ケース

Kubernetes と Docker のどちらかを選ぶ、または両方を選ぶ判断の際、チームは通常、アプリケーションの複雑さ、展開スケールや、以後ワークロードを管理していくために必要な自動化の量などを考慮します。環境によっては単純なコンテナ化だけでも恩恵がある一方、多数のシステムを含めた横断的なオーケストレーションが必須である場合もあります。

Docker の利点

Docker の主要なテーマは、コンテナーの作成と実行です。アプリケーションのパッケージ化をシンプルにして、開発環境、テスト環境、運用環境のいずれでも同じように実行できるようにすることです。その主な利点は以下のとおりです。

  • 標準化されたアプリケーション パッケージ化。Docker では、1 つのアプリケーションとその依存関係をまとめて 1 つのコンテナー イメージにパッケージ化します。これにより、どこに展開してもアプリケーションを同じように実行させることができ、開発時とリリース時における環境関連の問題を軽減しやすくなります。
  • ローカル環境と運用環境の一貫性。開発者は、ローカルでのアプリケーション構築とテストにも、運用での実行にも、同じコンテナー イメージを使用できます。この一貫性により、チームが問題を早い段階で発見しやすくなり、開発から運用への引き継ぎを効率化しやすくなります。
  • 軽量で移植可能なコンテナー ランタイム。Docker コンテナーは起動が速く、従来の仮想マシンよりもリソースを使用しません。これにより、進化するアプリケーション開発への対応や迅速な反復に適しています。

これらは、ソフトウェアのパッケージ化と実行をシンプルにする能力であり、チームにおけるアプリケーション構築と出荷をより効率化するための助けになります。

Docker のユース ケース

  • アプリケーション開発とテスト。開発チームは、ソフトウェアの構築とテストのために、再現可能な環境を Docker を使用して作成します。アジャイルや DevOps ワークフローでは変更が頻繁に発生し、それらを迅速に検証する必要があるため、この手法が一般的に使われます。
  • マイクロサービスベースのアプリケーション。アプリケーションが小規模のサービスに分割されている場合、Docker を使って各サービスを独立的にパッケージ化することがよく行われます。そうすると、システム全体に影響を及ぼすことなくチームが各コンポーネントを開発、更新、展開できます。
  • 継続的インテグレーションと継続的デリバリー (CI/CD) パイプライン。Docker コンテナーは、継続的インテグレーションと継続的デリバリーのパイプラインで一般的に使用されています。自動化システムにより、コンテナー イメージの構築、テストの実行、アプリケーションの展開準備を一貫した、繰り返し可能な形で実行できます。

Kubernetes の利点

Kubernetes は展開後のコンテナーを、特に複数台のマシンにまたがる場合に管理できます。分散環境でアプリケーションの可用性と信頼性を維持するために役立つ自動化機能を追加します。その主な利点は以下のとおりです。

  • アプリケーションの需要に応じた自動スケーリング。Kubernetes はワークロードを監視し、実行するコンテナーの数を需要の変化に応じて調整します。これにより、トラフィックのスパイク時にも手作業での対応なしにパフォーマンスを維持しやすくなります。
  • コンテナーの交換による自己修復。コンテナーが失敗した場合や応答しなくなった場合には、Kubernetes が問題を検出して自動的にコンテナーを置き換えます。この継続的な監視により、個々のコンポーネントが失敗した場合にもアプリケーションの可用性を保ちやすくなります。
  • ローリング展開による更新プログラムの制御。Kubernetes は、定義されたシーケンスに従ってコンテナーを置き換えることで段階的に更新プログラムを導入します。アクティブなワークロードを中断させず、ダウンタイムを減らし、継続的なデリバリーをサポートします。

これらの能力は、インフラストラクチャ全体の中でワークロードのスケーリングや変更に対応しながらアプリケーションのスムーズな実行を維持するために役立ちます。

Kubernetes のユース ケース

  • 複数のサービスからなる分散アプリケーション。多数の相互接続されたコンポーネントで構成されるアプリケーションにおいては、システム間の調整が必要です。たとえば、eコマース プラットフォームでは、支払い、在庫、顧客アカウントの処理にそれぞれ別個のコンテナーを実行する場合があります。Kubernetes は、それらのサービス間の展開と相互通信を管理できます。
  • 高可用性が要求される運用システム。ライブのユーザー アクティビティをサポートするアプリケーションには、ダウンタイムを最小限に抑えるための自動化が必要です。ストリーミング プラットフォーム、金融サービス、コラボレーション ツールでは、ワークロードを監視して失敗に対応するために Kubernetes がよく使われています。
  • トラフィック パターンを予測できないワークロード。使用状況が変動するアプリケーションにおいては自動スケーリングが効果を発揮します。季節限定セール時のリテール サイトや、イベント リリース時のチケット プラットフォームでは、需要の変化に応じてリソースを調整するために Kubernetes がよく使用されています。

Kubernetes では、Docker に直接依存せずコンテナー オーケストレーションを行うこともできます。複数のコンテナー ランタイムをサポートしているため、互換性のあるテクノロジを使って構築されているコンテナ化されたワークロードであれば管理可能です。

Docker と Kubernetes の同時使用

Docker と Kubernetes の組み合わせは、アプリケーションが単一コンテナー展開の範囲を超え、環境全体の協調管理が必要になった場合によく使用されます。

CI/CD パイプラインにおいて、Docker は、アプリケーション コードと依存関係を一貫性のある実行環境としてパッケージ化する移植可能なコンテナーを提供します。Kubernetes は、それらのコンテナーを展開時に管理します。利用可能なインフラストラクチャ全体でワークロードをスケジューリングし、パフォーマンスを監視します。

また、クラウドネイティブ アプリケーションも、これら 2 つのテクノロジの連携を前提にして機能します。Docker を使ってアプリケーション コンポーネントをパッケージ化したコンテナーが、Kubernetes によるクラスターを横断したオーケストレーションの下で動作することにより、可用性が維持され、需要の変化に応じたスケーリングがサポートされます。

複数のシステムをまたいで複数のコンテナーが実行される分散アーキテクチャにおいては、管理の自動化が必要不可欠です。Docker はコンテナ化されたワークロードを展開向けに準備し、Kubernetes はそれらのワークロードの実行、通信、失敗からの回復をインフラストラクチャ全体にわたって管理します。

Kubernetes と Docker は、両者の組み合わせにより、アプリケーションのライフサイクル全体にわたる協調的なコンテナー管理をサポートします。

進化しつつあるコンテナー テクノロジの状況

コンテナー ライフサイクル内で Docker と Kubernetes は別々の段階をサポートしますが、それらの段階はつながっているため、モダンなアプリケーション アーキテクチャにおいては両者がしばしば同時に使用されます。

Docker は、アプリケーションとその依存関係をまとめて移植可能かつさまざまな環境で一貫した形で実行できるコンテナーとしてパッケージ化することに主眼を置いています。それを基盤にして、Kubernetes は、大規模なコンテナー管理と、分散システム内での展開、ネットワーク化、監視、回復の調整を行います。

この組み合わせは、アプリケーションの設計と運用のあり方が大局的に変化した状況を象徴するものといえます。クラウドネイティブ アーキテクチャでは、マイクロサービス、展開パイプラインの自動化や、需要の変化に適応できるインフラストラクチャの重要性が高まっています。

組織にハイブリッドおよびマルチクラウド戦略の採用が広がる状況において、コンテナーのパッケージ化が一貫性を、オーケストレーション プラットフォームがさまざまな環境での柔軟性を実現しています。Kubernetes は単一コンテナー ランタイムの範疇を超えて拡大し、1 つのツールによるアプローチに縛られないオープンな標準を使用することによるコンテナ化されたワークロードのオーケストレーション手段をチームに提供しています。

こうしたトレンドによって、クラウド プラットフォームがコンテナーベースのアプリケーション デリバリーをサポートするしくみが形成されてきました。たとえば、Microsoft Azure は、異なるコンテナーの成熟度レベルに応じて利用できるマネージド サービスを提供しています。Azure Kubernetes Service (AKS) のマネージド Kubernetes クラスターでは、チームがアプリケーションのデプロイと運用に集中でき、基盤となるインフラストラクチャを自力で管理する必要はありません。完全なオーケストレーションが必須でないシナリオの場合は、Azure Container Apps の組み込みスケーリングおよび管理機能を使うと、運用の複雑さの大部分を意識せずにコンテナ化されたアプリケーションを実行できます。

Docker と Kubernetes の組み合わせは、単純なアプリケーションのパッケージ化手法であったコンテナー テクノロジが進化して本格的なインフラストラクチャ管理機能を備えた結果の姿だといえます。分散アーキテクチャが当たり前の形態になってきている中、オーケストレーション プラットフォームやマネージド クラウド サービスは、スケーラブルで信頼性が高いコンテナーベース システムをサポートする上でますます中心的な役割を担っています。

グラデーション背景
リソース

開発者向けリソースを見る

学生およびプロフェッショナル向けの多彩なリソースで、最新の開発者テクノロジに関する情報をご覧ください。
コード ソフトウェアを表示した 3 台のモニターの前に座っている女性
Azure リソース

Azure リソース センターにアクセスする

無料の Azure トレーニングおよび認定プログラム、Azure の使い方動画、アナリスト レポート、電子書籍をご利用ください
自宅オフィスでノート PC を使っている男性
学生開発者向けリソース

テクノロジー業界のキャリアを順調にスタート

学生向けのツールとプログラムを使用して、クラウド テクノロジーについて学び、開発者スキルを養います。
会議室で、人々がグループでプレゼンテーションを見ながらノート PC を使っています
Azure のイベント

Azure のイベントおよびウェビナーの情報を見る

デジタル イベント、対面イベント、仮想トレーニングで、Azure のエキスパートや開発者と交流しましょう。
よくあるご質問

よく寄せられる質問

  • Docker と Kubernetes は担う役割が異なりますが、補完的な関係にあります。Docker はアプリケーションのパッケージ化と実行に主眼を置いています。一方 Kubernetes はアプリケーションが展開された後の管理、特にシステムが複雑化する場合に主眼を置いています。一言でいえば、Docker は一貫した形で実行できるようにアプリケーションを準備するものであり、Kubernetes はそれらを環境全体にわたって大規模に管理するものです。
  • Docker と Kubernetes は競合するテクノロジではないため、どちらか一方を選ぶというチームはほとんどありません。Docker はアプリケーションのライフサイクルの早い段階でパッケージ化と実行に使用されることが多いのに対し、Kubernetes は、後の段階で、運用環境においてそれらのアプリケーションを管理するために使用されます。何を選ぶのが最適かは、アプリケーションの複雑さ、スケール、運用ニーズによって異なります。
  • Kubernetes は Docker とは異なる機能を担うものであるため、Docker の代替にはなりません。Kubernetes は展開後のコンテナーをオーケストレーションする目的で設計されており、アプリケーションのパッケージ化や構築のためではありません。Kubernetes では他のランタイムを使って作成されたコンテナーの管理も可能ですが、開発とデリバリーのワークフローでは、現在も Docker のようなツールがコンテナー イメージの準備によく使用されています。
  • はい。Kubernetes なしで Docker を使用することは可能であり、特に、シンプルな環境では容易です。アプリケーションの開発、テスト、または本格的なオーケストレーションを必要としない小規模な展開についてチームが Docker を単独で使用することはよくあります。その場合には、Kubernetes クラスターの管理という複雑な要素を加えることなく、Docker によるシンプルな方法でアプリケーションをパッケージ化して実行できます。
日本語 (日本) コンシューマーの正常性のプライバシー Microsoft に問い合わせ プライバシー 特定商取引法に基づく表示 Cookie の管理 使用条件 商標 広告について