【问题标题】:Compile webpack on docker production server在 docker 生产服务器上编译 webpack
【发布时间】:2017-03-04 18:02:58
【问题描述】:

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

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

编辑: 或者,我什至可以使用 apache 服务器为所有内容提供服务,但我希望在我运行 docker-compose 时编译和设置所有内容。

【问题讨论】:

    标签: docker webpack config docker-compose


    【解决方案1】:

    如果我理解正确,您想在 docker 构建期间在 npm run build 之后从映像中删除节点开发依赖项。

    您可以做到,但您必须注意一个小技巧。 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 安装
    • npm 运行构建
    • npm prune 的结果

    您的图像将不仅仅是:

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

    其中包含:

    • 第一个 npm 安装
    • npm 运行构建

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

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

    这样您将获得简约的图像。与:

    • npm 运行构建
    • npm prune 的结果

    您的最终 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 提供创建的文件。要创建一种只构建代码的中间件容器?只是探索所有的可能性:)
    • 我认为执行此操作的最佳方法是在 docker 中使用 volume-from。您运行一个节点容器构建 webpack 并使用 -v 标志执行节点服务器以公开您构建公共资产的文件夹。然后是另一个带有 --volume--from 标志的 docker 容器,以获取可在 apache 容器中访问的文件夹。您只需要确保您的 apache conf 正在从已安装的文件夹中获取资产。
    • 示例:docker run -v /src/public -name my-node<your node container> 和:docker run -volumes-from=my-node <your apache container>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-30
    • 1970-01-01
    • 2020-07-09
    • 2022-01-13
    • 2021-09-12
    • 2011-09-21
    • 2018-07-30
    相关资源
    最近更新 更多