该容器是在部署应用程序时构建的。
看起来它的目的是在模块之间共享依赖项。
它看起来像是作为容器启动的,但似乎没有任何运行,有点像init容器。
控制台说,使用相应的wolkenkit start
和wolkenkit stop
命令时,它将启动/停止该组件。
启动时:
关机时:
docker ps
时,找不到该容器:
有人可以解释这些成分吗?
答案 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的核心开发人员之一,因此请一言以蔽之。