如果我理解正确,您希望在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
您的图片大小将包含:
您的形象将会大于:
RUN npm install # Install dev and prod deps
RUN npm run build # Execute your webpack build
至极包含:
为了避免这个问题,你必须在你的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
真棒,这正是我需要的。你是否也有想法,以后如何使用Apache为创建的文件提供服务。创建一种只构建代码的中间件容器?只是探索所有的可能性:) –
我认为,执行此操作的最佳方式是在码头中使用音量。您运行构建webpack的节点容器并使用-v标志执行节点服务器以显示构建公共资产的文件夹。然后是另一个带有--volume - from标志的码头容器,以获取可在apache容器中访问的文件夹。您只需确保您的apache conf正在从装入的文件夹中生成资源。 –
例子:'docker run -v/src/public -name my-node <您的节点容器>'和:'docker run -volumes-from = my-node <您的apache容器> –