Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Networking 如何使用Docker(或Linux容器)进行网络仿真?_Networking_Docker_Lxc - Fatal编程技术网

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

Networking 如何使用Docker(或Linux容器)进行网络仿真?,networking,docker,lxc,Networking,Docker,Lxc,编辑:截至2019年3月,虽然我还没有测试过,但我相信Docker现在有能力进行真正的网络仿真 编辑:截至2015年5月,SocketPlane(请参阅和)已加入Docker团队,他们正在将OVS解决方案集成到Docker core中。似乎他们将成为各种Docker网络解决方案的赢家 所以我一直在用我的网络软件进行测试。尽管Mininet容器本质上是linux容器,只有一个网络堆栈,但它似乎已经达到了极限。我希望每个容器都有自己的网络堆栈、文件系统和一组进程——基本上我希望容器尽可能靠近VM

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


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


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


您可以为此目的使用。这是它具体实现的场景之一(除了标准Docker网络之外,还包括容器之间的专用网络)。

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

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

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

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

核心网络仿真器确实有一个Docker服务,我贡献并编写了一个。4.8中的初始版本基本上是坏的,但我已经修复并改进了它。拉取请求已打开

该服务允许您使用“core”标记Docker图像,然后将其作为选项显示在服务设置中。必须选择启动容器中Docker服务的Docker映像。然后选择要在该节点中运行的一个或多个容器。它的伸缩性相当好,我的16Gb机器上有2000多个节点

你也提到了OVS。这尚未内置到核心,但可以手动使用。我刚刚回答了核心邮件列表上的一个问题。它给出了使用OVS关闭标准核心交换机(桥接器)的简要概述。如果有用,请复制以下文本:

以前没有真正使用过openvswitch,但快速查看了一下

我通过我的软件包管理器(Ubuntu 15.04)安装了openvswitch:

sudo apt获取并安装openvswitch开关

然后,我在Core4.8中构建了一个非常简单的网络。2个连接到一个开关。我在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

当您停止核心仿真时,它显然不会删除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


希望这有帮助

我尝试了CORE和其他一些产品,但发现它们很难安装和运行(尤其是在AWS或Mac上)。如果您只想模拟简单的网络,它们可能很强大,但却有些杀伤力


因此我写了(另一个网络模拟器)。YANS是基于Docker的。就连我自己也惊讶于它跑得有多快。试试看

谢谢,我已经找到了,我们现在正在尝试:)感谢@Brian的链接,我们目前正在寻找一个Openflow 1.3软件交换机,它正引领我们走向基于OVS的东西,尽管我们会调查这些,看看我们能做些什么。