如何使用Docker(或Linux容器)进行网络仿真?

问题描述 投票:7回答:5

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


编辑:截至2015年5月,SocketPlane(请参阅websiterepo)已加入Docker团队,他们正在将OVS解决方案集成到Docker核心中。看起来好像他们将成为各种Docker网络解决方案的赢家。


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

networking docker lxc
5个回答
2
投票

您可以使用Pipework来实现此目的。它特别是它实现的场景之一(容器之间的专用网络,以及标准的Docker网络)。


2
投票

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

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

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


2
投票

CORE网络模拟器确实有一个Docker服务,我贡献并写了一个article about。 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中。

希望这可以帮助


1
投票

@jpillora IMUNES网络仿真器使用Docker作为L3(PC,路由器,主机)和Open vSwitch用于L2(集线器,交换机)节点。例如,Router节点实际上是一个Docker容器,其Debian Jessie系统运行Quagga自动配置,因此您只需在GUI内绘制节点。然后,您可以通过双击它们来访问这些容器,并执行您在Linux系统上执行的任何操作。它使用Hub上可用的“特殊”Docker镜像,名为imunes / vroot,它使用虚拟init进程,因此它不会终止。从技术上讲,通过一些调整,你可以用你想要的任何东西替换它。其源代码可在Github上找到。我认为这对你的用例是合适的。


0
投票

我尝试过CORE和其他几个但是发现它们很难设置和运行(特别是在AWS或Mac上)。如果你只是想模拟简单的网络,它们可能很强大但是过度杀伤。

因此我写了YANS(又一个网络模拟器)。 YANS基于Docker。即使我自己也很惊讶地发现它有多快。试一试!

© www.soinside.com 2019 - 2024. All rights reserved.