在一个拥有多个系统架构的群体上运行docker服务

我想用我的笔记本电脑(x86_64)和我的Raspberry Pis(armhf)集群testing我的分布式algorithm,使用新的docker swarm模式 。

经过一堆configuration后,我可以成功创build由一个pipe理器节点(笔记本电脑)和N + 1个工作节点(N个rasps,加上我的笔记本电脑)组成的群集群。 看起来像这样:

laptop$ docker swarm init --advertise-addr 192.168.10.1 raspi1$ docker swarm join --token <TOKEN> 192.168.10.1:2377 # [...] raspiN$ docker swarm join --token <TOKEN> 192.168.10.1:2377 

现在,我为我的项目构build了两个图像:一个是x86_64( my_project:x86_64 ),另一个是armhf( my_project:armhf )。 我真的很喜欢这种新的群体模式下的节点/服务体系结构,因为创buildM(准)独立节点正是我想要的,但是如何使用docker service create ...命令将正确的映像赋予正确的节点?

从我所看到的, docker service create只以一个图像为参数! 我在这里看到 ,我可以为每个节点分配一个标签,并要求服务只使用具有此特定标签的节点,但这不是我想要的。 我最终将pipe理两个任务集合,按体系结构分割,这会破坏我利用群体模式的调度程序和调度程序的愿望。

我是一个可悲的怪胎,他的追求便携性,这就是我!

PS:注意,这个标签是“docker群模式”,而不是“docker群”,因为docker群和docker群模式是两码事。

Adrien,Docker船长在这里。

在这一刻,您不能创build一个服务,根据容器计划的节点拉取不同的图像。

然而,你可能会做一个破解,就是在你的Docker镜像中绑定一个静态二进制文件,并在你的入口点决定哪个二进制文件需要调用,具体取决于底层的arch。

另一方面,你可以为每个架构创build两个服务的事实并不是很糟糕。 Arm和x86_64版本的应用程序可能需要根据硬件规格进行不同的缩放,另外还有一个额外的好处是,您还可以根据底层硬件应用不同的内存/ CPU限制。

如果你使用–network选项把它们放在同一个networking中,那么这些服务仍然可以相互通信,这样你就可以控制它们之间如何交互。

希望这有助于解决当前的问题。 如果您仍在评估替代品,请随时与我联系。

考虑到这一点,我认为有一种方法可以在一些性能和开销的惩罚下,通过在任何地方运行armhf映像并运行其中的一些仿真来实现你想要的function。

看看图片hypriot / qemu-register – 它的来源是在https://github.com/hypriot/qemu-register – 并通读它到你明白它在做什么的地步。 本质上它允许你在x86机器上模拟armhf和aarch64二进制文件。 然后,您可以在整个群集中运行一个映像。

我知道这不是你所要求的 – 而且其他人正在研究其他解决scheme – 但是这可能是有用的。