【问题标题】:What's the purpose of the node-modules container in wolkenkit?wolkenkit 中 node-modules 容器的用途是什么?
【发布时间】:2019-08-26 23:59:51
【问题描述】:

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

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

看起来它是作为容器启动的,但显然没有运行,有点像 init 容器。

控制台说它在使用各自的 wolkenkit startwolkenkit stop 命令时启动/停止该组件。

启动时:

关机时:

当你docker ps时,找不到那个容器:

谁能解释一下这些组件?

【问题讨论】:

    标签: docker wolkenkit


    【解决方案1】:

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

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

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

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

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

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

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

    PS:请注意,我是 wolkenkit 的核心开发人员之一,所以请谨慎回答。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-03
      • 2021-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-27
      相关资源
      最近更新 更多