2017-11-13 1 views
0

Docker Swarmの新機能です。私が理解するように、Docker Swarmではクラスタリングから抽象化することができます。あなたはどのハードウェアコンテナが配備されているか気にしません。Dockerボリュームは機械固有のものです

一方、Dockerでデータベースを処理する標準的な方法は、Dockerコンテナの外部にデータを書き込むことです(書き込み時のコピー動作を避けるため)。これはVolumeをマウントしてdb関連のデータを書き込むことで実現します。ここで重要なことは - はボリュームのマシン固有ですか? Docker & Docker Swarmは、必要なマシンにボリュームをマウントするのに十分なほど巧妙ですか?

例:

私は3機と3 microservices /コンテナを持っています。それらのすべてはDocker Swarmを通じて配備されています。 1つのマイクロサービス/コンテナのみがデータベースに接続する必要があります。だから私はVolumeを1台のマシンにしか搭載しないでください。しかし、どちらに?

答えて

1

データベースや類似のステートフルなアプリケーションは、Docker swarmやその他のオーケストレーションフレームワークに関しては扱いにくいものです。理想的には、コンテナは群のどのノードでも実行できるはずですが、コンテナのライフサイクルを超えてデータを保持する必要があるときに問題が発生します。

ボリュームをマウントすることは、データを保持するDockerの方法ですが、ボリュームが特定のノード上に作成されるときに特定のノードをコンテナに結びつけます。この問題を解決し、何らかの種類の分散ストレージを提供しようとするプロジェクトが数多くあります。

Flockerという名前のプロジェクトがありましたが、これは上記の問題を扱っています(これはもはや維持されていません)。 REXRAYという新しいプロジェクトもあります。

はドッカー&ドッカースウォームそれが必要なのマシン上にボリュームをマウントしてくれていますか?

デフォルトでは、いいえ。 Docker Swarmはノードの1つを選択し、その上にコンテナを展開します。ただし、この問題を回避することができます。

まず、サービス定義の名前をStackfile/Composefileに定義する必要があります。 第2に、ノードPlacement Constraintsを使用して、データベースコンテナの実行場所を制限する必要があります。

分散ストレージツールを使用していない場合は、ボリュームが必要なデータベースや同様のステートフルコンテナについては、コンテナを特定のノードに制限する必要があります。

+0

ありがとうございました。あなたが答えを知っているなら、REXRAYがstatefullデータベースのノードに依存しない動作をどのように達成したかについての詳細を追加できますか? Docker/Docker Swarmアーキテクチャで同じ動作を実装するのはなぜ難しいのですか?私はそれが簡単だったとしたら、Dockerはずっと前にマシンに依存しないボリュームを実装していたと思います –

+0

ハードコードされた/制限付きコンテナで特定のノードへの高可用性はどうですか?どのようなワークアラウンドですか? –

関連する問題