我已经基于Docker-Multinode建立了一个简单的Kubernetes测试环境。我还基于Ubuntu设置了一个非常大的Docker镜像,其中包含了我的几个工具。它们中的大多数都是用C ++编写的,并且对系统上安装的库有很多依赖性。
我的目标是在多个节点之间分发旧版批处理任务。我喜欢简单的Docker-Multinode设置,但现在我想知道这对我来说是否正确 - 因为我在其他Docker镜像中有我的实际遗留应用程序。
如何从Docker容器A(多节点工作者Docker容器)在Docker容器B(带有我的遗留工具的Ubuntu Docker容器)上运行Bash命令?或者这根本不可取?
为了澄清,Docker容器A(工作者多节点工作者Docker容器)和Docker容器B(遗留工具Ubuntu Docker容器)在同一主机上运行(每台机器都有两个)。
答案 0 :(得分:0)
你的问题真的不明确:
Kubernetes运行Docker容器;任何Docker容器。
Kubernetes本身在Docker中运行,在“多节点”中,Kubernetes所需的依赖关系在Docker中运行,但在所谓的bootstrapped Docker中。
现在,在您的问题中,Docker A的运行方式与Docker B相比尚不清楚。 此外,如果您要“分发”批处理作业,那么每个作业应该是一个独立的作业,它在自己的容器中运行,而容器A不应该依赖于容器A.
如果您需要Docker容器B中的依赖项(库)来运行您的作业,那么您实际上只需要使用Docker容器B作为作业容器A的基础映像.Docker图像是分层的,因此甚至如果它很大,如果另一个容器使用它作为基本图像,它只加载一次整体,所以有五个A型容器以B作为基本图像不是问题,因为基本图像只加载一次。
如果你真的需要一个容器与另一个容器进行通信,那么你应该构建一个API来将命令从一个传递到另一个(某种RESTful API,可以通过HTTP调用进行通信,以传递进程的运行请求)在一个容器上并返回一个结果)。