web-dev-qa-db-ja.com

Docker forWindowsネットワーキング

Docker forWindowsとネットワークの仕組みを理解するのに問題があります。ブリッジアダプターとUbuntuvmを備えたVirtualBoxでは、問題なく動作しました。ホストからvmにpingを実行できました(またはその逆)。

  • ネットワーク上の任意のデバイスからコンテナにpingを実行するにはどうすればよいですか?
  • また、同じホストで実行されていない他のコンテナーにpingを実行するにはどうすればよいですか?

私の計画...

複数のWindowsマシン(vmsではない)がそれぞれ単一のDockerコンテナーを実行する(ストレージクラスターを形成する)必要があり、これらのコンテナーは相互に通信する必要があります(overlayネットワークを使用して実行する必要がありますか、それともswarmが必要ですか?)。また、これを外部と通信する必要があります。これは、docker run -pオプションを使用して、必要なコンテナー内のポートを公開することで、作業を開始できた唯一の部分です。

私のしかしプロセスをもう少し詳しく説明するために、私の目標は、Linux上で実行されるAmazon S3スタイルのキーバリューストア(具体的には、Riak KVを使用)を構築することです。これにはソフトウェアを実行する複数のコンピューターが必要になるため、Dockerには、セットアップと展開の容易さ、WindowsでLinuxベースのソフトウェアを実行するためのフレームワークなどの利点があるように思われました。これは現在簡単にアクセスできます。

私がテストしたいくつかのこと...

デフォルトのブリッジネットワークを使用して同じホストで2つのUbuntuコンテナを実行すると、それらは相互にpingを実行できます。 ifconfigは、172.17 ... IPアドレスを持つローカルおよびeth0アダプターをリストします。このことから、複数のホストが必要なため、ブリッジが私が探しているものではないように思えます。

単一のホスト上の比較的小さなネットワーク

--network Hostを使用してUbuntuコンテナーを実行すると、「br-xxxxxxxx」および「vethxxxxxx」アダプターを含むifconfigからより多くの出力が得られます。ドキュメントから、

ホストネットワークスタックにコンテナを追加します

これは便利に聞こえましたが、おそらく私は理解していません。 Docker for WindowsがMobyLinuxVMを実行し、Hyper-Vアダプターとスイッチを使用していることを知っていますが、ホストは何を指しているのですか? Windows PCまたはこのVM? --network Hostを使用しても、コンテナーにpingを実行したり、コンテナーからデスクトップにpingを実行したりすることはできません。

他の考え...

Dockerの一般的な使用法はWindowsベースではないようですので、参照するものをあまり見つけることができませんでした。私のユースケースは、Dockerの通常の使用法とは大きく異なりますか?私がここで見逃していることを誰かが指摘できますか?

Hyper-Vアダプターについて読む コンテナーの起動方法に加えて、ネットワークアダプターのセットアップを変更する必要があるように見えますか?私は、Windows、Hyper-Vアダプター/スイッチ、ubuntu、およびdockerの間をどこで見るかを理解するのに苦労していると思います。

12
g3cko

素晴らしい質問です。私はあなたが受け取った反対票に対抗するためにそれを賛成しました。質問はよく書かれていて、問題は見当たりません。おそらく彼らはそれがStackOverflowに属していないので、ServerFaultに適していると思っていました。

ここにいくつかの役立つ箇条書きがあります:

  • Docker for Windowsは、Hyper-V Linux VMという名前のMobyLinuxVMを作成します。
  • ネットワークにアクセスするには、Hyper-VVMを仮想スイッチに接続する必要があります
  • Docker for Windowsは、Internalという名前のHyper-VDockerNAT仮想スイッチを作成します
  • internal仮想スイッチタイプの詳細については、 Hyper-V仮想スイッチの説明とは を確認してください(既にこれにリンクしています)

DockerSwarm

  • overlayネットワークを使用するには、実際にDocker Swarmモードが必要です(参照: SwarmKit

ここでの結論は次のとおりです。

解決しようとしているシナリオは、Docker forWindowsには適していません。 Docker for Windowsは、ソフトウェア開発者がローカルLinux VM、Docker Engineがインストールされている状態でアプリケーションを作成、デバッグ、およびテストできるようにすることを目的としています。これで終わりです。DockerforWindowsは、設定プロセスを自動化します。 Hyper-V VMを起動し、Linuxをインストールし、Docker Engineをインストールして、コマンドラインからアクセスできるようにします。

「マイプラン」で提案されたシナリオは、Docker forWindowsには適していません。代わりに、Docker SwarmModeクラスターをセットアップすることをお勧めします。ただし、Dockerストレージはそれよりも少し複雑になります。また、DockerホストのSwarmクラスター全体で共有ストレージを有効にするDockerストレージドライバーの使用についても検討する必要があります。 ClusterHQ によって開発された Flocker と呼ばれる非常に人気のあるものがあります。考えられる解決策として、それを調べることをお勧めします。

ただし、目標とその達成方法を再評価することもお勧めします。 Dockerは、汎用共有ストレージに適したソリューションではないかもしれません。

これがあなたの努力に役立つことを願っています。

11
Trevor Sullivan