2016-08-04 84 views
2

我有一个nodejs项目引用了我编写并由私人github回购托管的模块。在的package.json依赖是这个样子:Nodejs私有模块和Docker容器

"dependencies": { 
    ... other stuff ... 
    "my_module": "git+https://github.com/me/mymodule.git", 
} 

这很好,但我想为应用程序创建一个泊坞容器,但我不想在容器内的git。我知道我可以通过私有的npm repos托管,但我很想找到一种方法让构建过程将源代码(包括该模块)拉出来,然后将其复制到容器中。

我很好,在容器中做一个npm安装,但它不会喜欢git依赖。或者,我不想在生成机器上执行npm install,因为我想要自由选择任何我想要的容器......我不希望生成机器将windows二进制文件拖到mongo模块,例如,并将其复制到我的debian容器中。

我考虑过的一个选择是在devDependencies中放置依赖项“my_module”,然后在Docker容器中执行“npm install --production”,然后复制一个模块。这只是与devDependencies的意图不一致。

任何更好/推荐的解决方案?如果有更好的方法,我可以不用在github中托管这个模块(但是我在一些只对这个客户端有意义的项目上使用它)。

回答

3

这是一个非常简单的解决方案。构建节点应用

npm install

然后在你的dockerfile包括COPY指令,告诉它的节点项目,其中安装目录,并在您希望它复制到。

编辑:

为了应对@angelok你应该使用NPM一旦它复制到泊坞窗图像重建,使其具有正确的依赖相对多克尔图像的OS构建的,而不是带出来的问题最初安装节点包的OS。请参阅重建文档here

+0

这就是我正在建议的。您可以在容器外部构建项目,而不是将它放在那里。虽然它对你用来构建这些容器的主机适用了一些要求(如拥有git和npm) –

+0

对,它存在于某个地方。如果不在码头集装箱中,则比在建造集装箱的系统中。如果你从家里部署,或者你的jenkins /竹子/云中的任何服务器,这可能只是你的本地计算机。 :) –

+0

是的,但请记住,如果您从构建服务器执行npm install,则可以为* that * os制作二进制文件。例如,如果它是windows,那么它可能会在win32上编译C库,然后你将它们复制到一个linux容器中,它不起作用,对吧?我们在这里做的假设是,所有的操作系​​统都是相同的,而他们不是。 – angelok