kga*_*lli 10 npm docker dockerfile
我不确定是否应该Dockerfile
为我的Node.js应用程序创建不同的文件.一个用于没有开发依赖项的生产,另一个用于包含开发依赖项的测试.
或者一个基本上是开发的文件Dockerfile.dev
.然后两个文件的主要区别是npm install命令:
生产:
FROM ...
...
RUN npm install --quiet --production
...
CMD ...
Run Code Online (Sandbox Code Playgroud)
开发/测试:
FROM ...
...
RUN npm install
...
CMD ...
Run Code Online (Sandbox Code Playgroud)
问题出现了,因为我希望能够通过docker run
命令在容器内运行我的测试.因此,我需要测试依赖项(通常是我的dev依赖项).
将生产中不需要的依赖项放入图像中似乎有点奇怪.另一方面,创建/维护第二个Dockerfile.dev只是微小的差异似乎也不对.那么这种问题的好习惯是什么呢?
不,你不需要有不同的Dockerfile
s,事实上你应该避免这种情况.
docker的目标是将您的应用程序运送到一个不可变的,经过良好测试的工件(docker images)中,这对于生产和测试甚至开发都是相同的.
为什么?因为如果您为测试和生产构建不同的工件,您如何保证您已经测试过的产品也在生产中?你不能,因为他们是两个不同的东西.
鉴于所有这些,如果通过测试表示unit
测试,那么您可以将源代码安装在docker容器中并运行测试而不构建任何docker镜像.那没关系.请记住,您可以为测试构建图像,但速度非常慢,使开发变得安静困难和缓慢,这一点都不好.然后,如果您的测试通过,您可以安全地构建您的app容器.
但是,如果您的意思是接受测试实际上需要针对正在运行的应用程序运行,那么您应该为您的应用程序创建一个映像(只有一个)并在另一个容器中运行测试(例如,安装测试源代码)并对该容器运行测试.这显然意味着您的应用程序的构建对于npm
测试的安装而言是不同的.
我希望这会给你一些看法.
那么你就必须支持几个Dockerfile
几乎相同的 s。相反,我建议使用生产配置文件NodeJS
等功能。另一项建议是关于
RUN npm install --quiet --production
Run Code Online (Sandbox Code Playgroud)
最好创建单独的.sh
文件并执行如下操作:
ADD ./scripts/run.sh /run.sh
RUN chmod +x /*.sh
Run Code Online (Sandbox Code Playgroud)
并考虑开始使用Gulp。
默认npm install
安装devDependencies
. 为了解决这个问题 - 使用npm install --production
或将NODE_ENV
环境变量设置为production
值。
将脚本行放在单独的文件中是一个很好的做法,以免Dockerfile
经常更改。如果您下次需要更改,那么您只需更新脚本文件即可完成。将来你可能还有一些额外的工作要做。
归档时间: |
|
查看次数: |
3975 次 |
最近记录: |