7

編集: 2019 年 3 月の時点で、私はテストしていませんが、Docker には実際のネットワーク エミュレーションを行う機能があると思います。


編集: 2015 年 5 月の時点で、SocketPlane (Web サイトとリポジトリを参照)Dockerチームに参加し、OVS ソリューションを Docker コアに統合する過程にあります。さまざまな Docker ネットワーキング ソリューションの勝者となるようです。


そのため、 Mininetを使用してネットワーク ソフトウェアのテストを実行してきました。ただし、Mininet コンテナーは基本的にネットワーク スタックのみを備えた Linux コンテナーであるため、限界に達したようです。各コンテナーに独自のネットワーク スタック、ファイル システム、および一連のプロセスを持たせたいと考えています。基本的には、コンテナーをできるだけ VM に近づけたいと考えています。私が理解しているように、Docker は Mininet の反対であり、そのコンテナーにはファイル システムと独自のプロセスがありますが、独自のネットワーク スタックはありません。diff のみのディスク領域を使用してコンテナーをフォークするための優れた API があるため、Docker に傾倒しています。私の質問は、次のコンテナー レイアウト + ネットワーク インターフェイスのセットアップで (Docker などを使用して) Linux コンテナーのセットを作成することは可能ですか?

ここに画像の説明を入力

4

5 に答える 5

2

私は、Linux コンテナーを使用する 2 つのオープンソース ネットワーク エミュレーターを認識しています。

CORE ネットワーク エミュレーターはコンテナーを使用し、各コンテナーには独自のファイル システム (または、各ノードで実行されているサービスに必要なディレクトリのマウント名前空間のみを作成するため、部分的なファイル システム) があります。

VNXネットワーク エミュレータは別のオプションですKVM または LXC を使用して仮想ノードを作成します (ただし、LXC オプションはまだ試していません)。

于 2014-09-02T13:16:21.170 に答える
2

CORE Network Emulator には、私が寄稿して記事を書いた Docker Service があります。4.8にある初期バージョンはほとんど壊れていますが、修正して改善しました。プル リクエストはGitHubにあります。

このサービスを使用すると、Docker イメージに「core」のタグを付けることができ、サービス設定のオプションとして表示されます。コンテナーで docker サービスを開始する Docker イメージを選択する必要があります。次に、そのノードで実行するコンテナーを選択します。それは非常にうまくスケーリングし、私の 16Gb マシンには 2000 以上のノードがありました。

あなたはOVSについても言及しました。これはまだ CORE に組み込まれていませんが、手動で使用できます。これに関する CORE メーリング リストの質問に答えました。OVS を使用して標準の CORE スイッチ (ブリッジ) を切り替える方法の概要を簡単に説明します。役に立つ場合は、以下にテキストを複製します。

これまでopenvswitchを実際に使用したことはありませんでしたが、簡単に見てみました。

パッケージマネージャー(Ubuntu 15.04)を介してopenvswitchをインストールしました:

sudo apt-get install openvswitch-switch

次に、CORE 4.8 で非常に単純なネットワークを構築しました。スイッチに接続された2台のPC。COREでエミュレーションを開始しました。次に、ホストで、セットアップされたブリッジを確認しました。

sudo brctl show

bridge name     bridge id               STP enabled     interfaces
b.3.76          8000.42c789ce95e9       no              veth1.0.76
                                                        veth2.0.76
docker0         8000.56847afe9799       no
lxcbr0          8000.000000000000       no

スイッチを表すブリッジは b.3.76 と呼ばれ、インターフェイス veth1.0.76 と veth2.0.76 が接続されていることがわかります。ブリッジを削除します。

sudo ip link set b.3.76 down
sudo brctl delbr b.3.76

次に、openvswitch ブリッジをセットアップします。

sudo ovs-vsctl add-br b.3.76
sudo ovs-vsctl add-port b.3.76 veth1.0.76
sudo ovs-vsctl add-port b.3.76 veth2.0.76

スイッチが機能しているように見えるので、ノード間で ping を実行できるようになりました。openvswitch のこれ以上の構成は試していません。

CORE エミュレーションを停止しても、明らかに openvswitch ブリッジまたはポートは削除されないため、手動で行う必要があります。

sudo ovs-vsctl del-port veth2.0.76
sudo ovs-vsctl del-port veth1.0.76
sudo ovs-vsctl del-br b.3.76

これは、スクリプトを使用して比較的簡単に自動化できます。または、少し作業を加えれば、docker に統合できます。

お役に立てれば

于 2015-09-21T09:33:53.783 に答える
1

@jpillora IMUNESネットワーク エミュレーターは、L3 (PC、ルーター、ホスト) に Docker を使用し、L2 (ハブ、スイッチ) ノードに Open vSwitch を使用します。たとえば、Router ノードは実際には Docker コンテナであり、Quagga を実行する Debian Jessie システムが自動的に構成されているため、GUI 内にノードを描画するだけで済みます。その後、それらのコンテナーをダブルクリックしてアクセスし、Linux システムで行うことを何でも行うことができます。ダミーの初期化プロセスを使用する imunes/vroot と呼ばれる Hub で利用可能な「特別な」Docker イメージを使用するため、終了しません。技術的には、少し調整するだけで、好きなものに置き換えることができます。そのソース コードはGithubで入手できます。ユースケースに適していると思います。

于 2015-09-09T11:12:24.463 に答える