wolkenkit中的节点模块容器的目的是什么?

时间:2019-04-05 06:20:22

标签: docker wolkenkit

该容器是在部署应用程序时构建的。

看起来它的目的是在模块之间共享依赖项。

它看起来像是作为容器启动的,但似乎没有任何运行,有点像init容器。

控制台说,使用相应的wolkenkit startwolkenkit stop命令时,它将启动/停止该组件。

启动时:

wolkenkit start

关机时:

wolkenkit stop

docker ps时,找不到该容器:

docker ps

有人可以解释这些成分吗?

1 个答案:

答案 0 :(得分:2)

启动wolkenkit应用程序时,该应用程序被装在许多Docker容器中,然后这些容器与其他提供基础设施的容器一起启动,例如数据库,消息队列,。 ..

将应用程序拆分为多个Docker容器的原因是因为wolkenkit建立在CQRS模式上,该模式建议将应用程序的读取侧与应用程序的写入侧分开,因此读取侧有一个容器,并且一个用于写面(实际上还有一些,但是您知道了)。

现在,由于您可能会在Linux以外的操作系统上进行开发,因此wolkenkit应用程序可能会在与开发时不同的操作系统下运行,例如在Docker中,它始终是Linux。这意味着start命令不能简单地将node_modules文件夹复制到容器中,因为它们可能包含二进制模块,这些二进制模块随后不兼容(可以在主机上的Windows上安装,而在Docker内的Linux上运行)

为避免此处出现问题,在容器内启动应用程序时,wolkenkit运行npm install。现在的问题是,如果wolkenkit在每个单独的容器中都这样做,则启动将非常慢(由于所有Docker的构建和启动都是在后台进行,所以这并不是世界上最快的事情)。因此,wolkenkit会尝试尽可能优化这一点。

这里的一个概念是在自己的容器内仅运行npm install一次。这是您遇到的node-modules容器。然后,将该容器作为卷链接到包含应用程序代码的所有容器。这样,您只需运行一次npm install,但是多个容器可以使用此命令的结果。

由于此容器现在包含数据,但没有代码,因此只需要存在就可以了,实际上不执行任何操作。这就是为什么创建它但不运行的原因。

我希望这可以使它更清晰一些,并且我能够回答您的问题:-)

PS:请注意,我是wolkenkit的核心开发人员之一,因此请一言以蔽之。