KubernetesとDockerの違いを理解することは、クラウドネイティブとDevOpsにおいて最も重要なトピックの1つです。KubernetesとDockerは、確かに会話の中に一緒に出てきますが、実際のところ、これらは必ずしも互いに比較されるべきではありません。実際に、KubernetesとDockerは互いに直接競合しているわけではありません。むしろ、相互に補完および連動する2つのテクノロジと考えることができます。
KubernetesとDockerのどちらが必要な状況にあるのかについて知るには、KubernetesとDockerのどこが同じで、どこが違うかを理解することが重要です。
Dockerは、アプリケーション・コンテナ用のオープンソース・プラットフォームです。このコンセプトに馴染みがない方に向けて説明すると、コンテナとは、必要なすべてのコードと依存関係を実行可能な形式に詰め込んだスタンドアロン型のパッケージング形式のことです。実世界で例えるなら、コンテナは机のすべての部品、ブラケット、ネジ(もちろん、六角レンチも)が含まれたIKEAのパッケージに似ていますが、すべての部品が含まれていることに加えて、コンテナを実行すると机ができます。
Dockerは、軽量で標準化された形式であるため、アプリケーション開発者によく使用されます。これらの特性により、開発者は柔軟性とスケーラビリティを発揮しながら、構築、テスト、およびデプロイすることができます。
IT業界では、Dockerにはもう1つの意味があります。それは、Docker, Inc.と呼ばれる実際に存在する会社です。この会社は、プラットフォーム内で動作するツールを開発しています。名前が同じであるため、この違いを心に留めておくことが重要です。
Dockerが単一のコンテナであるなら、Kubernetesは多数のコンテナを一度に管理するためのツールです。(会社ではなくプラットフォームとしての)Dockerと同様に、Kubernetesもオープンソース・プラットフォームですが、2,300人以上の貢献者を抱えるプロジェクトとして、Cloud Native Computing Foundationによって管理されています。Kubernetesは、クラウドのオペレーティング・システムのように機能し、IT部門が大規模に処理できるように、仮想マシンやクラウドの管理を合理化および簡略化します。
Kubernetesで何を行うことができるかKubernetesは、ただコンテナ規模で機能するというだけで、ローカルシステムに見られるあらゆる種類のシステム管理と同様に機能します。プロビジョニング、更新、スケジュール、削除、および一般的なヘルスモニタリングは、すべてKubernetesの範ちゅうにあります。IKEAの例えに戻ると、コンテナが単一の机なら、Kubernetesは、IKEAの倉庫にあるパッケージングされた机、椅子、その他の家具の注文、配送、ステータスチェックなどを行う施設マネージャのようなものです。
DockerとKubernetesの話でよく忘れられているのは、コンテナランタイムの定義です。コンテナランタイムとは何でしょうか。簡単に言えば、コンテナを動かすエンジンです。IKEAの例えに戻ると、コンテナランタイムは箱の中にある組み立て説明書です。これは単純である場合があり、それらのいわゆる低レベル・コンテナ・ランタイムでは、実行管理が処理されます。より複雑な状況では、高レベル・コンテナ・ランタイムによって、API統合、イメージ形式、イメージ管理に関する指示が提供されることもあります。この用語は、微妙な違いがありますが、Dockerとほとんど同じ意味で使われることがあります。
Kubernetesは、コンテナ・ランタイム・インタフェース(CRI)と呼ばれるAPIを実行します。このAPIは、各コンテナランタイムを連結し、パッケージを実行します。もう一度、IKEAの例えに戻ると、KubernetesのCRIは、パッケージ(コンテナ)に同梱された組み立て説明書(コンテナランタイム)を読む人です。
Docker以外にもコンテナランタイムはあります。その他に以下の2つのコンテナランタイムがよく使用されます。
Containerd:Containerdは、Dockerプロジェクトの一環として始まりました。ただし、その目的は、Dockerの柔軟性を向上させ、モジュール化することでした。このため、開発者は、Containerdを独自のプロジェクトとして区別することにしました。Containerdは、レジストリからのイメージのプルや、イメージの管理、低レベルランタイムとの統合によるコンテナプロセスの実行など、高レベル・コンテナ・ランタイム・ニーズに対応します。
CRI-O:CRI-Oは、Dockerに代わる別のオープンソース・コンテナ・ランタイムです。Kubernetesコンテナ・ランタイム・インタフェース(CRI)を実装し、Open Container Initiative標準と互換性のあるランタイムを有効にします。
CRI-OとContainerdはどちらも、CRIによって提供されている仕様を使用しているため、Kubernetesと完全に互換性があります。
DockerとKubernetesはよく比較されますが、実際のところ、2つは互いに直接競合しているわけではありません。この記事全体で使用されているIKEAの例えでも、それらがどのように関連しており、それらがなぜ現代的なIT管理を行ううえで重要であるかは示されていますが、競合するとは少しも示されていません。むしろ、それらはクラウドネイティブ・エコシステムの一部をなしています。Dockerコンテナは、Kubernetesで管理できるものの1つで、KubernetesのメリットはDockerコンテナのボリュームを簡単に拡張できることです。
したがって、「DockerとKubernetesのどちらを選ぶか?」という問題ではありません。むしろ、ITディレクタが主に検討すべきことは、管理と運用の観点から、KubernetesとDockerをどのように一緒に使用するかということです。
KubernetesとDockerは、互いに連動するように構築されています。必ずしもKubernetesを使用してDockerデプロイメントを管理する必要はありませんが、複数のインスタンスのデプロイメントを管理する必要がある場合は、有効なコンビとなります。同じアプリケーションの複数のデプロイメントを使用する場合や、スケーリングが必要な場合は、特にそう言えます。Kubernetesオーケストレーション・システムのオープンソースな性質のため、複数のサーバーにまたがる複雑さを管理するプラットフォームについて、継続的にサポートを受けることができます。
Kubernetesから、オンデマンド・リクエストに対応しつつ、パッチや更新のバッチ処理、問題の大規模な監視といった機能を使用して、多数のDockerパッケージをデプロイおよび管理できます。Kubernetesにより、IT部門は次のことを行うことができます。
Oracle Cloud Infrastructureは、最新のクラウド・ネイティブ・アプリケーションを高速化および構築するための多数のサービスを提供しています。特に、Dockerイメージを管理および分析するKubernetes EngineとContainer Registryは、堅牢な無料(付属)ツールで、管理を合理化し、パフォーマンスを向上させることができます。Oracle Cloudの無料トライアルでKubernetesにアクセスし、ご自分でお確かめください。
2020年3月に一般公開を中止したイタリアにあるポンペイ考古公園では、再開に向けた計画で、ソーシャル・ディスタンスを確保するために人流を管理および制御する方法を必要としていました。OCI Kubernetes EngineやOracle Container Registryなど、クラウドネイティブなモバイル・ソリューションを促進するために選択された多数のオラクル製品を搭載した新しいMyPompeiiアプリケーションに、観光客がアクセスできるようにする計画が策定されました。
ロンドンに拠点を置くSnap Visionでは、人工知能を活用したビジュアル検索テクノロジを提供し、買い物客が好きな服を見つけられるように支援しています。COVID-19の流行により、店舗でのショッピングが長期間にわたって原則禁止されたことを受けて、デジタル・ショッピング・エクスペリエンスの構築を支援するために、Snap Visionのテクノロジが英国の小売店に提供されました。Oracle Cloud InfrastructureとKubernetesのおかげで、Snap Visionは新しい小売店環境を低コストでホストできましたが、スケーリングは大きな課題でした。