web-dev-qa-db-ja.com

Docker composeとkubernetesの違いは何ですか?

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

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

Docker、Docker-Compose、Docker Cloud、およびKubernetesがどこで重なり合っているのか、また一方が他方に依存しているのかについて、誰かが高レベルの大まかな説明を提供できますか。

157
George Katsanos

Docker

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

Docker Compose:

複数のdockerコンテナを設定して起動することができます。これは主に、複数のdockerコンテナを起動したい場合で、docker run ...を使用してそれぞれを個別に起動したくない場合に、ヘルパーとして使用されます。 Docker composeは 同じ ホストでコンテナを起動するために使用されます。

Docker Swarm:

Docker Swarmは、 multiple hostsでコンテナーを実行して接続するためのものです。 Docker Swarmはコンテナクラスタ管理およびオーケストレーションツールです。これは、複数のホストで実行されているコンテナを管理し、スケーリング、1つがクラッシュしたときに新しいコンテナを開始する、コンテナのネットワーク化などの処理を行います。

Docker Swarmは、本番環境ではdockerです。 Dockerエンジンに組み込まれているのは、 native docker オーケストレーションツール です。

Stack fileというdocker swarmファイルは、docker composeファイルとよく似ています。

Kubernetes:

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

Docker Cloud:

クラウドサーバーまたはローカルサーバーでコンテナーを作成して実行できる 有料 エンタープライズDockerサービス。ユーザーフレンドリーなWebインターフェースですべてのdocker機能を提供しながら、コンテナーを実行および管理するためのWeb UIおよび中央制御パネルを提供します。

更新:

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

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

241
yamenk

@ yamenkの answerに加えて、Kubernetesを理解する旅に役立つかもしれないいくつかの詳細をここに加えたいと思います。

短い答え:

  • docker-compose:は tool で、あなたの マルチコンテナ アプリケーションを記述し、createstart/stopを助けてくれるYAMLファイルを取ります。各コンテナーに複数のdocker ...コマンドを入力しなくても、これらすべてのコンテナーをremove _します。
  • Kubernetes:はコンテナ化された ワークロード およびサービスを管理するための platform で、宣言的な設定と自動化の両方を容易にします。何?????読み続けます...

Docker Compose

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

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

  • サービスの開始、停止、および再構築
  • 実行中のサービスの状況を表示する
  • 実行中のサービスのログ出力をストリーミングする
  • サービスに対して1回限りのコマンドを実行する

クベルネテス

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

  • フォールトトレラントです。
  • 拡張可能で、これをオンデマンドで実行できます。
  • リソースを最適に使う
  • 他のアプリケーションを自動的に発見し、互いに通信できます。
  • 外部からアクセス可能
  • ダウンタイムなしで更新/ロールバックできます。

Kubernetesは習得が難しいと多くの人が主張しています。それはそれが一連​​の問題を解決し、人々がすべての前提条件を知らずに理解しようとするからです。これはそれを複雑にします。以下のような概念/用語について読むことによって、パズルのピースをまとめることを始めてください。このプロセスは、Kubernetesが解決しようとしている問題の種類をあなたが理解するのを助けます:

  • 12要素アプリ
  • 自動ビンパッキング、
  • 自己修復メカニズム
  • 水平方向の拡大縮小
  • サービス発見と負荷分散
  • 自動ロールアウトとロールバック
  • ブルーグリーン展開/カナリア展開
  • 秘密と構成管理
  • ストレージオーケストレーション

また、コンテナーとその管理に関してはさまざまなことがたくさんあるため、Cloud Nativeの展望に注目してください。

インタラクティブ版はこちら: landscape.cncf.io/ /

enter image description here

72
tgogos

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

dockerはコンテナエンジンです。開発目的のために、PC上でローカルに構築することができます。

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

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

DockerクラウドはPaaSのオ​​ファーでもあります。これを使用すると、dockerエンジンAPIを介してコンテナーを実行および編成することができます。

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

これが役に立ったことを願っています:)よろしく

7

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

複数のホスト間でコンテナをネットワーク化する場合は、kubernetesを選択します。

1
Aniket Alhat

Docker Compose:

docker-compose.ymlファイルでは、各エントリーはオプションでdocker-composeを取得してイメージを構築することができます。各エントリは構築したい単一のコンテナを表すことができ、各エントリはネットワーキング要件またはポートを定義します。

Kubernetes:

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

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

0
Daniel

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

一方、Kubernetesは、docker containerや他のマイクロサービスを複数のノードにまたがって調整し、信頼性を高めるシステムです。

0
Yaniv Hakim