如何构build一个nginx docker容器以及它所服务的资源的构build

我在docker容器中运行了一个nginx服务,它提供了一些静态文件和一个编译文件(一个由webpack构build的js包)。

我不希望我的源文件在nginx容器中,而是我只想让那些允许nginx在那里服务的文件。

因此,我目前有2个docker容器–1个生成.js包必须在构build第二个docker镜像之前运行,然后从主机(它是由运行第一个容器生成的)拾取包文件。 )

这似乎是错误的,因为我的nginx图像编译应该立即从我感觉的源代码运行。

但是,如果我将webpack版本添加到nginx图像dockerfile中,那么我将不得不将整个源代码复制到容器中,这也是错误的。

我错过了什么?

(注意:我曾经考虑复制那里的文件,进行构build,然后只是我不想要的文件,但它看起来很糟糕,并且会不必要地增加容器的大小,尽pipe这是正确的方法,但愿意接受!)

您可以通过Docker 17.05中引入的Dockerfile的多阶段构buildfunction获得您想要的结果。

多阶段允许你做的是通过在一个容器中构build工件,然后立即将该工件复制到另一个容器中,从一个Dockerfile中产生一个Docker镜像。 所以在你的情况下,它将允许你构build你的webpack包,然后将该包复制到nginx容器中,而不包括任何源JS文件。 这将删除所有的黑客,如不得不删除内容,或者有一个容器过度configuration软件,例如你的nginx Docker镜像不需要安装webpack。

所以你可以通过编写一个看起来像这样的Dockerfile来处理它(命令只是一个例子,但我相信你可以用正确的replace它们):

 FROM node:8.5.0 as webpack COPY /src/js /src/js RUN webpack /src/js/app.js /app.bundle.js FROM nginx:1.13.5 COPY --from=webpack /app.bundle.js /usr/share/nginx/html 

上面的输出应该是一个轻量级的nginx Docker容器映像,它包含了你的webpack包,而不是其他的。