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

What's the purpose of the node-modules container in wolkenkit?

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

看起来它的目的是跨模块共享依赖关系。

它看起来像是作为一个容器启动的,但显然没有任何东西运行,有点像一个初始化容器。

控制台在使用相应的 wolkenkit startwolkenkit stop 命令时说 starts/stops 该组件。

启动时:

关机时:

当您 docker ps 时,找不到该容器:

有人可以解释一下这些组件吗?

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

之所以将应用拆分成多个Docker个容器,是因为wolkenkit建立在CQRS模式之上,建议将应用的读取端与应用的写入端分开,因此只有一个容器一个用于读取端,一个用于写入端(实际上还有几个,但你明白了)。

现在,由于您可能在 Linux 以外的操作系统上进行开发,因此 wolkenkit 应用程序可能 运行 在与您开发它时不同的操作系统下,如 Docker它总是 Linux。这意味着启动命令不能简单地将 node_modules 文件夹复制到容器中,因为它们可能包含不兼容的二进制模块(想象一下在主机上的 Windows 上安装,但是 运行宁 Linux Docker).

为避免此处出现问题,在容器内启动应用程序时,wolkenkit 运行s npm install。现在的问题是,如果 wolkenkit 在每个容器中都这样做,启动会非常慢(无论如何,这不是地球上最快的事情,因为所有 Docker 构建和启动都是在引擎盖下发生的)。所以wolkenkit会尽量优化这个。

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

因为这个容器现在包含数据,但没有代码,它只需要在那里,它实际上任何事情。这就是它被创建但不是 运行.

的原因

我希望这能让它更清楚一点,并且我能够回答你的问题:-)

PS:请注意,我是 wolkenkit 的核心开发人员之一,所以请对我的回答持保留态度。