Docker ComposeとKubernetesの違いは何ですか?


328

Docker、Google Cloud、Kubernetesに飛び込んでいて、3つすべてをまだ明確に理解していないにもかかわらず、これらの製品は重複しているように見えますが、互換性はありません。

たとえばdocker-compose.yml、アプリをKubernetesにデプロイできるようにファイルを書き換える必要があります。

誰かがDocker、Docker Compose、Docker Cloud、およびKubernetesが重複している場所、および一方が他方に依存している場所の高レベルの大まかな説明を提供できますか?

回答:


481

Docker

  • Dockerは、アプリケーションをコンテナー化できるコンテナーテクノロジーです。
  • Dockerは、他のテクノロジーを使用する際の中核です。

Docker Compose

  • Docker Composeでは、複数のDockerコンテナを構成して起動できます。
  • Docker Composeは、複数のDockerコンテナーを開始したいが、それぞれを個別に開始したくない場合に、ヘルパーとして主に使用されますdocker run ...
  • Docker Composeは、同じホストでコンテナーを起動するために使用されます。
  • 単一のDocker コンテナーを構築して実行する場合、すべてのオプションパラメーターの代わりに Docker Composeが使用されます

Docker Swarm

  • Docker Swarmは、複数のホストでコンテナーを実行および接続するためのものです。
  • Docker Swarmは、コンテナークラスター管理およびオーケストレーションツールです。
  • 複数のホストで実行されているコンテナーを管理し、スケーリング、1つがクラッシュしたときに新しいコンテナーを開始する、コンテナーをネットワーク化するなどのことを行います...
  • Docker SwarmはDockerの本番環境です。これは、Docker Engineに組み込まれているネイティブの Docker オーケストレーションツールです
  • stack fileという名前のDocker Swarmファイルは、Docker Composeファイルとよく似ています。

Kubernetes

  • Kubernetesは、Googleが開発したコンテナオーケストレーションツールです
  • Kubernetesの目標は、Docker Swarmの目標と非常によく似ています。

Docker Cloud

  • 支払ったあなたはクラウドサーバーまたはローカルサーバー上のコンテナをビルドして実行することを可能にするエンタープライズ]ドッキングウィンドウサービス。
  • 使いやすいWebインターフェースですべてのDocker機能を提供しながら、コンテナーを実行および管理するためのWeb UIおよび中央制御パネルを提供します。

更新:

Dockerクラウドは「部分的に」廃止されました

アプリケーション、ノード、および群れクラスタ管理を提供するDocker Cloud上のサービスは、5月21日[2020]にシャットダウンされます...自動ビルドおよびレジストリストレージサービスは影響を受けず、引き続き利用できます


最後に、「Dockerクラウドを使用すると、コンテナーを実行できるようになります。」というのは、これらのコンテナーをクラウドで実行することで何ができるでしょうか。パブリックにアクセスされるエンドポイントを提供できますか?本質的には、DockerクラウドはAWSのようなものですが、Dockerコンテナー用ですか?(または、発見用の単なるコンテナライブラリ
ですか

2
すみません。まだ混乱しているようです。それでは、Docker-composeは、コンテナーをローカルでオーケストレーションするために使用され、ローカル開発にとってより便利であるという点でKubernetesと同じですか、それともKubernetesはこれよりはるかに多いということですか?
Vipin Menon

6
次の類推を行うことは公平ですか?1. docker-compose <> minikube 2. docker-swarm <> kubernetesクラスター3. docker-cloud <> GCP、AWSなどによって管理されたkubernetesクラスター
Anoop

1
「Docker swarmは、複数のホストでコンテナを実行および接続するためのものです。」:ここで「接続」とはどういう意味ですか?ネットワーク接続?
someone_ smiley

1
@someone_smileyはい。オーバーレイネットワークを
OneCricketeer

136

加えて、@ yamenkの答えは、私は理解Kubernetesの彼らの旅を持つかもしれない助けの人々をここではいくつかの詳細を追加したいと思います。

短い答え:

  • docker-compose:は、マルチコンテナーアプリケーションを記述したYAMLファイルを取得し、コンテナーごとに複数のコマンドを入力しなくても、コンテナーの作成開始/停止削除を支援するツールですdocker ...
  • Kubernetes:コンテナ化されたワークロードとサービスを管理するためのプラットフォームであり、宣言的な構成と自動化の両方を容易にします。何ですか?🤔読み続けてください...

Docker Compose

(ドキュメントから):Composeは、マルチコンテナのDockerアプリケーションを定義して実行するためのツールです。Composeでは、YAMLファイルを使用してアプリケーションのサービスを構成します。次に、1つのコマンドで、構成からすべてのサービスを作成して開始します。

Composeには、アプリケーションのライフサイクル全体を管理するためのコマンドがあります。

  • サービスの開始、停止、再構築
  • 実行中のサービスのステータスを表示する
  • 実行中のサービスのログ出力をストリーミングする
  • サービスで1回限りのコマンドを実行する

Kubernetes

Introduction to Kubernetes):Kubernetesは、Docker Swarm、Mesos Marathon、Amazon ECS、Hashicorp Nomadなどのコンテナオーケストレータです。コンテナーオーケストレーターは、ホストをグループ化してクラスターを形成するツールであり、アプリケーションの確認に役立ちます。

  • 耐障害性があり、
  • スケーリングでき、これをオンデマンドで実行できます
  • リソースを最適に使用する
  • 他のアプリケーションを自動的に検出し、相互に通信できます
  • 外界からアクセス可能
  • ダウンタイムなしで更新/ロールバックできます。

多くの人が、Kubernetesを学ぶのは難しいと主張しています。それは一連の問題を解決し、人々はすべての前提条件を知らずに理解しようとするからです。これは複雑になります。次のような概念/用語について読んで、パズルのピースを組み立て始めます。このプロセスは、Kubernetesが解決しようとする問題の種類を理解するのに役立ちます。

  • 12要素のアプリ、
  • 自動ビンパッキング、
  • 自己回復メカニズム、
  • 水平スケーリング、
  • サービスの検出と負荷分散
  • 自動化されたロールアウトとロールバック、
  • ブルーグリーンデプロイメント/カナリアデプロイメント
  • 秘密と構成管理、
  • ストレージオーケストレーション

また、コンテナとその管理にはさまざまな要素があるため、クラウドネイティブの状況に注意してください。

こちらのインタラクティブバージョン:landscape.cncf.io/

ここに画像の説明を入力してください

アップデート

2020年5月:Docker Compose仕様がオープンスタンダードに

AWS、Microsoft、およびオープンソースコミュニティの他のメンバーと協力して、既存のComposeプラットフォームに加えて、KubernetesやAmazon ECSなどのクラウドネイティブプラットフォームをサポートするようにCompose仕様を拡張しました。詳細:ブログ / compose-spec.io


この回答は古くなっています。docker.com/blog/...
OneCricketeer

1
ありがとう@ cricket_007これからも注目しますが、2018年のこのブログ投稿は「マーケティング」のようなものだと思います。2020年です。DockerComposeおよびComposeファイルバージョン3のリファレンスでドキュメントを確認すると、Kubernetesについては何もありません。
tgogos


1
ああ、すべてのkubernetes構文を抽象化するコンポーズレイヤーがあることに驚かされます!@ cricket_007に感謝します。
ジョージKatsanos

28

同じホストを使用してコンテナーをネットワーク化している場合は、docker composeに進みます。

複数のホスト間でコンテナをネットワーク化している場合は、kubernetesを使用してください


2
それが私が期待していたタイプの答えです!もう少し説明があるかもしれませんが、「tl; dr」の部分が本当に重要です。他のどの回答も実際にはそれを述べていません!
ゴッドファーザー

8

最初の違いは、コンテナーエンジンとコンテナーオーケストレーターの間です。

docker コンテナエンジンであり、通常、開発目的でローカルにPCでローカルにビルドして実行できるコンテナは1つだけです。

docker-compose 複数のコンテナーを実行し、Dockerエンジン機能を介してボリュームとネットワークを共有させるDockerユーティリティであり、ローカルで実行してサービス構成をエミュレートし、クラスターでリモートで実行します。

Kubernetesはコンテナーオーケストレーションプラットフォームであり、コンテナーの実行とエンジン機能の強化を行い、コンテナーを構成およびスケーリングして複雑なアプリケーション(PaaSの一種、ユーザーまたはクラウドプロバイダーが管理)を提供できるようにします。Kubernetesの主な機能は、コンテナーを使用してアプリケーションからインフラストラクチャーを切り離すことです。また、Dockerが他のエンジンにも開放されています。たとえば、rktまたはcri-oでコンテナーを実行できます。

Dockerクラウドは、dockerエンジンAPIを介してコンテナーを実行および調整できるPaaSオファーでもあります。

ニーズ、インフラストラクチャの制御レベル、ターゲットユーザーに応じて、ベアメタル上のKubernetes、またはAzure ACSやGoogle GKEなどを使用できます。

これが役に立てば幸い:)よろしく


1
Dockerで通常1つのコンテナーしか実行しないのはなぜですか?私はDocker-composeがより良いソリューションだと思いますが、それなしで複数のコンテナーを開始することを妨げるものは何もありません!
ピーター

そうそう、バックグラウンドでmysqlを実行して、httpdとnginxをスタンドアロンコンテナーとして起動することもありますが、すべてを自動化したい場合は、docker-compose.ymlをビルドして、依存関係やネットワークなどを指定します。 ..
フランチェスコグアラッチ

6

Docker Composeは本番環境に対応したツールではありません。これはPoCまたは開発環境に最適ですが、本番環境での本格的な使用には、多かれ少なかれテーブルステークである多くの機能がありません。Swarmの方が本番環境に対応していますが、グリーンフィールドシナリオでSwarmに投資することはありません。Dockerデスクトップへの組み込みとすべての主要なクラウドプロバイダーによる提供によって証明されるように、Kubernetesはオーケストレーションの戦いに勝利しました。Kubernetesははるかに能力があり、コミュニティと企業のサポートがはるかに多くなっています。

Pluralsight、Linux Academyなどで入手できるKubernetesチュートリアルのいくつかに飛び込み、選択したクラウドプラットフォーム(EKS、AKS、GKEなど)で遊ぶためにクラスターを起動することをお勧めします。ベアメタルでスピンアップしようとしている場合は、OpenShiftを見てください。ただし、この設定ではKubernetesの魔法の一部が失われていることを認識してください。


k8sが(今のところ) "勝った"ことに同意しました。しかし、Mesos は本番クラスターのゴールドスタンダードと呼ばれていました。DC / OSはエンタープライズ機能を押し出すというすばらしい仕事をしましたが、今ではMesos環境内で複数のk8sクラスターを実行し、単一のベンダーに依存しないプラットフォームからそれらにアクセスできるので、どちらが本当に良いですか?
OneCricketeer

3

Docker Compose:

ではdocker-compose.ymlファイルの各エントリには、必要に応じて取得することができdocker-compose、画像を構築します。各エントリは、構築する単一のコンテナを表すことができ、各エントリは、ネットワーク要件またはポートを定義します。

Kubernetes:

Kubernetesはすべてのイメージがすでにビルドされていることを想定しており、作成するオブジェクトごとに1つの構成ファイルがあり、すべてのネットワークを手動でセットアップする必要があります。

したがって、イメージがDocker Hubでホストされていることを確認し、1つの構成ファイルを作成してコンテナーを作成し、1つの構成ファイルを作成してネットワークをセットアップします。


1

Docker-Composeは、ボリューム、ネットワーク、実行するコマンドなどの環境を備えた1つ以上のコンテナを事前定義したデプロイメントファイルです。

一方、Kubernetesは、Dockerコンテナやその他のマイクロサービスをオーケストレーションし、それらを複数のノードにわたってスケーリングして信頼性を高めるシステムです。


1

Docker compose:Docker コンテナーは、y​​amlファイルを使用せずに直接実行できます。しかし、Docker composeツールのコンテナーのプロパティを使用して、docker-compose.ymlファイルと呼ばれるファイル内で定義できます。詳細については、以下のサンプルymlファイルをご覧ください。

version: "3.7"
services:
  redis:
    image: redis:latest
    deploy:
      replicas: 1
    configs:
      - my_config
      - my_other_config
configs:
  my_config:
    file: ./my_config.txt
  my_other_config:
    external: true

画像の名前、レプリカの数などは、ymlファイルで設定できます。

Kubernetes: これは、googleによって構築されたDocker上で実行されるコンテナー管理プラットフォームです。Docker Swamは、Docker自体によって構築された別のコンテナー管理プラットフォームです。Kubernetesは、ポッカー(dockerのコンテナーに対応)に関連する構成をdocker composeのようなyamlファイルに保存する機能も提供します。yamlファイルの例

apiVersion: v1
kind: Pod
metadata:
  name: rss-site
  labels:
    app: web
spec:
  containers:
    - name: front-end
      image: nginx
      ports:
        - containerPort: 80
    - name: rss-reader
      image: nickchase/rss-php-nginx:v1
      ports:
        - containerPort: 88

ここでは、画像、開かれるポート、ポッドからホストへのポートマッピングなども指定できます。docker composeと同様に、kubectl apply -fはこのファイルを実行するコマンドです。


それで、違いは何ですか?=)
ゴッドファーザー

docker composeはdockerイメージを実行するコンソールであり、kubernetesはコンテナーオーケストレーションシステムとは異なります。したがって、これら2つを比較することはできません。しかし、kubernetesにはkubectlがあり、これもコンソールであり、
docker
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.