7

编辑:截至 2019 年 3 月,虽然我还没有测试过,但我相信 Docker 现在有能力进行真实的网络模拟。


编辑:截至 2015 年 5 月,SocketPlane(参见网站repo)已加入 Docker 团队,他们正在将他们的 OVS 解决方案集成到 Docker 核心中。似乎他们将成为各种 Docker 网络解决方案的赢家。


所以我一直在使用Mininet在我的网络软件上运行测试。它似乎已经达到了极限,因为 Mininet 容器本质上是只有一个网络堆栈的 linux 容器。我希望每个容器都有自己的网络堆栈、文件系统和一组进程——基本上我希望容器尽可能靠近 VM。这让我想到了 Docker,据我了解,Docker 与 Mininet 相反,它的容器有一个文件系统和自己的进程,但没有自己的网络堆栈。我倾向于 Docker,因为它有一个很好的用于分叉容器的 API,只使用 diff 的磁盘空间。我的问题是,是否可以使用以下容器布局 + 网络接口设置创建一组 linux 容器(使用 Docker 或类似容器)?

在此处输入图像描述

4

5 回答 5

2

我知道两个使用 linux 容器的开源网络模拟器:

CORE Network Emulator使用容器,每个容器都有自己的文件系统(或部分文件系统,因为它只为每个节点上运行的服务所需的目录创建挂载命名空间)。

VNX网络模拟器是另一种选择。它使用 KVM 或 LXC 来创建虚拟节点(但我还没有尝试过 LXC 选项)。

于 2014-09-02T13:16:21.170 回答
2

您可以为此目的使用Pipework 。它特别是它实现的场景之一(容器之间的私有网络,除了标准的 Docker 网络)。

于 2014-01-08T16:24:29.770 回答
2

CORE Network Emulator 确实有一个 Docker 服务,我贡献并写了一篇关于. 4.8 中的初始版本大部分已损坏,但我已对其进行修复和改进。拉取请求在GitHub 上

该服务允许您使用“核心”标记 Docker 映像,然后它们会作为选项出现在服务设置中。您必须选择在容器中启动 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网络模拟器将 Docker 用于其 L3(PC、路由器、主机)和 Open vSwitch 用于 L2(集线器、交换机)节点。例如,Router 节点实际上是一个带有 Debian Jessie 系统的 Docker 容器,该系统自动配置了运行 Quagga,因此您只需在 GUI 中绘制节点即可。然后,您可以通过双击这些容器来访问它们,并执行您在 Linux 系统上会执行的任何操作。它使用 Hub 上可用的名为 imunes/vroot 的“特殊”Docker 映像,该映像使用虚拟初始化进程,因此不会终止。从技术上讲,只需稍作调整,您就可以将其替换为您想要的任何内容。其源代码可在Github上获得。我认为这适合您的用例。

于 2015-09-09T11:12:24.463 回答
0

我尝试了 CORE 和其他一些,但发现它们很难设置和运行(尤其是在 AWS 或 Mac 上)。如果您只想模拟简单的网络,它们可能很强大,但过大。

因此我写了YANS(又一个网络模拟器)。YANS 基于 Docker。就连我自己也对它的运行速度感到惊讶。试一试!

于 2017-01-21T20:58:59.300 回答