我不确定是否应该Dockerfile
为我的Node.js应用程序创建不同的文件.一个用于没有开发依赖项的生产,另一个用于包含开发依赖项的测试.
或者一个基本上是开发的文件Dockerfile.dev
.然后两个文件的主要区别是npm install命令:
生产:
FROM ... ... RUN npm install --quiet --production ... CMD ...
开发/测试:
FROM ... ... RUN npm install ... CMD ...
问题出现了,因为我希望能够通过docker run
命令在容器内运行我的测试.因此,我需要测试依赖项(通常是我的dev依赖项).
将生产中不需要的依赖项放入图像中似乎有点奇怪.另一方面,创建/维护第二个Dockerfile.dev只是微小的差异似乎也不对.那么这种问题的好习惯是什么呢?
不,你不需要有不同的Dockerfile
s,事实上你应该避免这种情况.
docker的目标是将您的应用程序运送到一个不可变的,经过良好测试的工件(docker images)中,这对于生产和测试甚至开发都是相同的.
为什么?因为如果您为测试和生产构建不同的工件,您如何保证您已经测试过的产品也在生产中?你不能,因为他们是两个不同的东西.
鉴于所有这些,如果通过测试表示unit
测试,那么您可以将源代码安装在docker容器中并运行测试而不构建任何docker镜像.那没关系.请记住,您可以为测试构建图像,但速度非常慢,使开发变得安静困难和缓慢,这一点都不好.然后,如果您的测试通过,您可以安全地构建您的app容器.
但是,如果您的意思是接受测试实际上需要针对正在运行的应用程序运行,那么您应该为您的应用程序创建一个映像(只有一个)并在另一个容器中运行测试(例如,安装测试源代码)并对该容器运行测试.这显然意味着您的应用程序的构建对于npm
测试的安装而言是不同的.
我希望这会给你一些看法.