D-ComposeとD-Swarmの違いまたは類似点を理解しようとしています。
ドキュメントを読むことで、docker-composeは異なるコンテナを一緒にバインドし、単一のサービスとしてコラボレーションで動作するメカニズムを提供することを理解しました(と同じ機能を使用していると推測しています--link 2つのコンテナをリンクするために使用されるコマンド)
また、docker-swarmについての私の理解では、異なるdocker-hostsのクラスターを管理でき、それぞれがいくつかのdocker-imagesの複数のコンテナーインスタンスを実行しています。スウォーム内の異なるコンテナ間の接続をoverlay-networksとして定義し(スウォーム内の2つのドッカーホストにまたがっていても)、ユニットとして接続できます。
私が理解しようとしているのは、docker-swarmがdocker-composeに成功し、オーバーレイネットワークがコンテナを接続する新しい(推奨)方法であるということですか?
または、docker-composeは、まだdockerファミリ全体の不可欠な部分であり、コンテナを接続してコラボレーションで動作させるために使用することが期待され、推奨されています。その場合、docker-composeはswarmの異なるノードのコンテナで動作しますか?
それとも、オーバーレイネットワークはswarm内の異なるホスト間でコンテナを接続するためのものであり、docker-composeは内部リンクを作成するためのものですか?
また、ドッカーのドキュメントで-linksは推奨されておらず、まもなく廃止されることが記載されていることもわかります。
私は少し混乱しています???
どうもありがとう!
いくつかの定義から始めるとおそらく役立つでしょう:
docker run
などのコマンドを使用して、その動作を再現できます。質問に答えるには:
docker-swarmはdocker-composeに成功し、オーバーレイネットワークはコンテナを接続する新しい(推奨)方法ですか?
または、docker-composeは、まだdockerファミリ全体の不可欠な部分であり、コンテナを接続してコラボレーションで動作させるために使用することが期待され、推奨されています。その場合、docker-composeはswarmの異なるノードのコンテナで動作しますか?
それらは異なる機能を提供し、両方とも目的を果たし続けます。 docker-composeはswarmモード内でコンテナを起動できませんが、docker-compose自体を使用せずに、新しいバージョンのdocker-compose.ymlファイル(バージョン3)を使用して直接swarmモードでスタックを定義できます。 docker-composeは、単一のdockerエンジン上で、または従来のswarmを使用して、swarmモード以外のコンテナーを管理するために必要です。
それとも、オーバーレイネットワークはswarm内の異なるホスト間でコンテナを接続するためのものであり、docker-composeは内部リンクを作成するためのものですか?
それに加えて、ドッカーのドキュメントで--linksはもう推奨されておらず、まもなく廃止されることが記載されていることもわかります。
ymlファイルのバージョン2以降のdocker-composeは、デフォルトでプロジェクトごとに新しいブリッジネットワークで複数のコンテナを接続します(プロジェクトはデフォルトでディレクトリ名になります)。従来のswarmでは、デフォルトで外部k/vストアを使用するオーバーレイネットワークになります。そして、スウォームモードスタックでは、これはオーバーレイネットワークになります。
コンテナを相互に通信させるには、Dockerネットワークを使用することをお勧めします。コンテナのグループごとにネットワークを作成し、他のドッカー環境から隔離します。 docker-composeはこのネットワーク作成を自動化しますが、docker networks create
を使用してコマンドラインから作成することもできます。
リンクの大部分は、組み込みのDNSディスカバリーを備えたdockerネットワークに置き換えられました。 docker-compose.ymlからリンクを削除する場合、コンテナの起動順序を強制するために、それらをdepends_on
セクションに置き換える必要がある場合があります。それ以外の場合、リンクが意味をなすシナリオはほとんどなく、私が見たすべての使用法は、古くなったドキュメントをフォローしている人からのものです。
オーバーレイネットワークを作成、スウォーム、またはスウォームします
ラップトップなどでデモ以外を行う場合は、上記のすべてを使用する必要があることがわかります。
SwarmとSwarm Overlay Networkを意図的に分離しました。両方を使用する必要はありませんが、その下にSwarmがなければオーバーレイネットワークを取得することはできません。
Composeは、複数のコンテナをまとめて表示するためのものです。今では、それらは相互に関連していることが理にかなっていますが、そうではないかもしれません。しかし、コンテナが相互に関連するサービス用である典型的なケースを想定してみましょう。コンテナは何らかの方法で相互に通信したいが、ネットワークを使用して相互に通信する方法を制御します。たとえば、webserver、appserver、dbのある3層アプリを取り上げます。 3つのコンポーネントすべてがドッキングされており、異なるパラメーターなどでdocker run..
を3回実行する代わりに、composeを使用してそれらをまとめて表示するとします。 。 Webサーバーがappserverと通信できるようにしたいが、dbとは直接通信できないようにします。また、appserverがdbサーバーコンテナーと通信(ping)し、Webサーバーもpingする必要があります。すべての接続は双方向ですが、相互に通信できるようにしたいサービスのみに制限されます。このような配置の場合、通常、2つのネットワーク(たとえば、frontend
とbackend
)をセットアップします。 Webおよびアプリコンテナーは、フロントエンドネットワークに接続されます。アプリとdbコンテナはバックエンドネットワークに接続されます。 dbコンテナとWebコンテナの間には共通のネットワークがないため、お互いに接触(ping)することはできません。これが目的です。
ここで、これらの3つのサービスを数百台のマシンのクラスターで実行できるようにしたい場合、およびそれらをまたがってスケールしたい場合は、複数のホストにまたがるネットワークが必要になります。これが、オーバーレイネットワーキング(スウォーム内)の出番です。オーバーレイネットワーキングは、VxLANテクノロジー上に構築されたマルチホストネットワーキングに他なりません。 VxLANについて知る必要はありません。ただし、VxLANは、ほとんどすべての最新のネットワークインフラストラクチャでサポートされている標準のネットワークトポロジです。
それが明らかになることを願っています。
編集:あなたはすでに答えを得たことを見ませんでした!
私はあなたがそれぞれが何であるかについて正しい理解の大部分を持っていると思いますが、いくらかの微調整が必要です。
正しいdocker-composeは、マルチコンテナアプリケーションを起動することです。以前は、docker run ..
を使用してすべてのコンテナを開始していました。通常、マイクロサービスパラダイムを採用する最新のアプリケーションは、多数のサービスで構成され、docker run ..
を使用することはすぐに面倒になります。したがって、docker-composeを使用すると、すべてのコンテナとそのプロパティ、およびそれらの接続方法をyaml
またはjson
ファイルとして表現できるため、より簡単に管理できます。
したがって、docker-composeは、Dockerエコシステムのコンテナオーケストレーションパーツです。
リンクは異なります。リンクはdocker-composeまたはdocker run
コマンドの一部であり、software defined networks
の代わりに廃止され、overlay networks
はそのうちの1つにすぎません。
Swarmは、Dockerのスケジューリングコンポーネントです。スケジューリングとは-コンテナをdockerホストのクラスター内のどこに「配置」するかを把握することです。数百のサーバーのクラスターを持つことができ、数百のコンテナーがあり、それぞれが数十の異なるアプリケーションのサービスをカプセル化します。これらのコンテナを何百ものサーバーのクラスタにどのように分散させるべきか、特定の基準を満たすために特定のホストにのみいくつかのコンテナを配置するか、何らかの形で関連する他のコンテナに近づける(または近づけない)必要があります...これらはすべて、Docker Swarmによって実行されるスケジューリングコンポーネントの一部です。
ここでdocker.comの入門ドキュメントをご覧になることをお勧めします。 https://docs.docker.com/engine/getstarted-voting-app/