Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.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
在具有多个系统架构的swarm上运行docker服务_Docker_Architecture_Docker Swarm Mode - Fatal编程技术网

在具有多个系统架构的swarm上运行docker服务

在具有多个系统架构的swarm上运行docker服务,docker,architecture,docker-swarm-mode,Docker,Architecture,Docker Swarm Mode,我想在我的笔记本电脑(x86_64)和我的Raspberry Pis集群(armhf)上使用新的 经过一系列配置后,我可以成功创建swarm集群,它由一个管理节点(笔记本电脑)和N+1个工作节点(N个RASP,加上我的笔记本电脑)组成。看起来是这样的: laptop$ docker swarm init --advertise-addr 192.168.10.1 raspi1$ docker swarm join --token <TOKEN> 192.168.10.1:2377 #

我想在我的笔记本电脑(x86_64)和我的Raspberry Pis集群(armhf)上使用新的

经过一系列配置后,我可以成功创建swarm集群,它由一个管理节点(笔记本电脑)和N+1个工作节点(N个RASP,加上我的笔记本电脑)组成。看起来是这样的:

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
笔记本电脑$docker swarm init——广告地址192.168.10.1 raspi1$docker swarm加入——令牌192.168.10.1:2377 # [...] raspiN$docker swarm加入——令牌192.168.10.1:2377 现在,我为我的项目构建了两个映像:一个是x86_64映像(
myu项目:x86_64
),另一个是armhf映像(
myu项目:armhf
)。我非常喜欢这个新swarm模式中的节点/服务架构,因为创建M个(准)独立的节点正是我想要的,但是如何使用
docker service create…
命令为正确的节点提供正确的映像?

据我所见,
docker service create
只将一张图像作为参数!我可以给每个节点一个标签,并要求服务只使用具有这个特定标签的节点,但这不是我想要的。我最终将管理两个按体系结构划分的任务集群,这将粉碎我利用swarm模式的调度器和调度器的愿望

我是一个悲伤的极客,他追求便携性,这就是我


注:注意,这里有“docker swarm mode”标签,而不是“docker swarm”标签,因为和是两个不同的东西。

Adrien,这里是docker船长

此时,您无法创建一个根据容器调度的节点提取不同映像的服务

然而,有一种黑客可能会做,那就是在docker映像中为两种体系结构绑定一个静态二进制文件,并在entrypoint.sh中根据基础架构决定调用哪个二进制文件

另一方面,您可以为每个体系结构创建两个服务这一事实并不坏。Arm和x86_64版本的应用可能需要根据硬件规格进行不同的扩展,另外一个好处是,您还可以根据底层硬件应用不同的内存/cpu限制

如果使用--network选项将这些服务放在同一个网络中,它们仍然能够相互通信,因此可以控制它们之间的交互方式


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

考虑到这一点,我认为有一种方法可以满足您的需求,以一定的性能和开销代价,在任何地方运行armhf映像并模拟其中一些映像

查看图像hypriot/qemu寄存器-它的源代码在-并通读它,直到您理解它在做什么。本质上,它允许您在x86机器上模拟armhf和aarch64二进制文件。然后,您可以在整个集群中运行单个映像


我知道这并不完全是您所要求的,其他人也在研究其他解决方案,但这可能还是有用的。

谢谢您的回答@marcosnils,我一直在等待它!:)如果我设法静态链接我的项目的二进制文件,你的黑客行为似乎是合法的。如果我没弄错的话,看起来是达到了这样的目的。除此之外,你还知道这件事吗?我不太清楚他们到底实现了什么,我很难找到例子,但这能帮助我在容器中构建每个体系结构的垃圾箱吗?再次感谢你,你应该得到你的赏金!嘿@AdrienLuxey!。您共享的教程似乎有不同的用途。它基本上允许依赖qemu在本地构建多拱门,它们也会以不同的方式标记它们,这样您就可以在注册表中使用它们。我知道联合回购协议。基本上,他们提供了一种简单的方法来构建多拱门图像,但是每个图像在注册表中都是一个不同的标记。当然,您可以使用这些工具中的一些来构建内部包含多拱二进制文件的映像,但这可能需要一些工作。@AdrienLuxey有个好消息告诉您,您现在可以使用第三方外部工具来构建多拱映像,直到docker CLI正式支持构建它们为止。检查。docker引擎和注册表当前支持这种格式,因此,如果您将multi-arch映像推送到注册表并在swarm中运行,它应该可以工作。