2017-03-04 66 views
0

我为我的React/Redux应用程序设置docker,我想知道如何设置它,在生产中,在容器设置上,webpack使用生产配置编译我的整个代码,然后删除它自己,或类似的东西。因为我的项目中唯一需要的是生产代码和一个简单的节点服务器。在Docker生产服务器上编译webpack

我不确定是否解释得很好,因为docker和webpack对我来说仍然是新东西。

编辑: 另外,我甚至可以用apache服务器来提供所有的东西,但是我希望所有的东西都在我运行docker-compose时编译和设置。

回答

2

如果我理解正确,您希望在docker构建期间在npm运行构建之后,从图像中清除节点开发依赖项。

你可以做到这一点,但有一个小窍门,你必须注意。 Dockerfile中的每一行都会在图像中产生新的一步,并随图像一起推送。 所以,如果你在你的Dockerfile执行:

RUN npm install  # Install dev and prod deps 
RUN npm run build # Execute your webpack build 
RUN npm prune --production # Trash all devDependencies from your node_modules folder 

您的图片大小将包含:

  • 第一NPM安装
  • 故宫运行建立
  • 故宫修剪
  • 的结果

您的形象将会大于:

RUN npm install  # Install dev and prod deps 
RUN npm run build # Execute your webpack build 

至极包含:

  • 第一NPM安装
  • 故宫运行建立

为了避免这个问题,你必须在你的dockerfile做:

RUN npm install && npm run build && npm prune --production 

这样你会得到一个简约的形象。附:

  • 故宫运行建立
  • 故宫修剪

的结果你最终Dockerfile将是某种形式的:

FROM node:7.4.0 

ADD . /src 
RUN cd /src && npm install && npm run build && npm prune --production # You can even use npm prune without the --production flag 

ENV NODE_ENV production 
+0

真棒,这正是我需要的。你是否也有想法,以后如何使用Apache为创建的文件提供服务。创建一种只构建代码的中间件容器?只是探索所有的可能性:) –

+0

我认为,执行此操作的最佳方式是在码头中使用音量。您运行构建webpack的节点容器并使用-v标志执行节点服务器以显示构建公共资产的文件夹。然后是另一个带有--volume - from标志的码头容器,以获取可在apache容器中访问的文件夹。您只需确保您的apache conf正在从装入的文件夹中生成资源。 –

+0

例子:'docker run -v/src/public -name my-node <您的节点容器>'和:'docker run -volumes-from = my-node <您的apache容器> –