2017-06-23 9 views

答えて

2

Q.ドッキングオーバーレイドライバはどのように動作しますか?

私はthis good reference for understanding docker swarm network overlay, and more globally, how docker is architecturedをお勧めします。

これは、と述べている:

がドッカーが単一ドッカーエンジンとドッカースウォームで実行中のタスクで実行されているコンテナのサービス発見を提供するために、埋め込まれたDNSを使用しています。 Docker Engineには、ユーザー定義のブリッジ、オーバーレイ、およびMACVLANネットワーク内のホスト上のすべてのコンテナに名前解決を提供する内部DNSサーバーがあります。

各Dockerコンテナ(またはSwarmモードのタスク)には、DNS照会をDNSサーバーとして機能するDocker Engineに転送するDNSリゾルバがあります。

ので、このexempleセットアップでマルチホストdocker swarm mode、中:この例では

architecture

myserviceと呼ばれる2つのコンテナのサービスがあります。同じネットワーク上に2番目のサービス(client)が存在します。 clientは、docker.comに対して2つのcurlオペレーションを実行し、myserviceを実行します。

  • DNSクエリはdocker.commyserviceためclientによって開始されています

    これらは、結果のアクションです。

  • コンテナのビルトインリゾルバは、127.0.0.11:53のDNSクエリをインターセプトし、Docker EngineのDNSサーバーに送信します。
  • myserviceは、個々のタスクIPアドレスに内部的に負荷分散されているサービスの仮想IP(VIP)に解決されます。コンテナ名も解決されますが、直接IPアドレスにもなります。
  • docker.comは、mynetネットワークにサービス名として存在しないため、要求はで、設定済みのデフォルトDNSサーバに転送されます。
  • 戻るあなたの質問に

はどのようにして、外部のMongoDBサーバフォームクラスタに接続することができますか?

外部mongodb、あなたは確かにwan'tていないことを除いて、docker.comに接続したい、上記のアーキテクチャのclientと同じ状況にある(例えば、あなたが、そのmongodb.mydomain.comのためのDNSを持っているとしましょう)そのウェブ全体にmongodb.mydomain.comが公開されているので、内部のクラスタDNSサーバで宣言している可能性があります。

次に、この内部DNSサーバーを使用してmongodb.mydomain.comを解決するようにドッカーエンジンに指示する方法はありますか。

あなたはそうのように、あなたがinternal DNS serverを使用したいあなたdocker serviceタスクに指示する必要があります。ここに

docker service create \ 
--name myservice \ 
--network my-overlay-network \ 
--dns=10.0.0.2 \ 
myservice:latest 

重要なのは--dns=10.0.0.2です。これにより、dockerエンジンは、VIPサーバーのDNS名を解決できない場合、デフォルトで10.0.0.2:53というDNSサーバーを使用するようになります。

最後に

、あなたが言う:

私は私のドッキングウィンドウの群れクラスタから外部のMongoDBサーバーに接続することはできません。私はこれがクラスタのためにオーバーレイネットワークドライバを使用していることを理解しています。私は正しい?

私はあなたがしたいDNSサーバにoverlay networkから来る未知のDNS名を転送するためにdocker engine方法に建てがあるとして、ノーと言うでしょう。

希望すると便利です。

関連する問題