Docker最佳实践nodejs和静态文件

时间:2016-07-03 09:58:52

标签: node.js docker

实际上要为节点js创建我的dockerfile,我在nodejs基础映像上使用以下命令:

RUN \
    apt-get update && \
    apt-get install -y --no-install-recommends git python build-essential libpng-dev && \
    apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

# Install production package only
COPY package.json /var/www/site

RUN \
    npm install && \
    npm cache clean

COPY . /var/www/site

RUN \
    npm run build && \
    npm run doc

RUN \
    npm prune --production && \
    npm cache clean

ENV NODE_ENV=production

我对这种方法不满意,因为我需要运行“npm run build”来创建应用程序的客户端部分(基于webpack,backbone,marionnette)。

当我运行“npm run build”命令时,我必须安装developpement包,而不仅仅是生产包,以及一些debian包来最小化图像。

我希望图片只包含生产包而不是开发者。

另一方面,如果我只放置制作文件,我必须在构建机器上生成客户端代码。所以我必须在主机上安装nodejs和所有必需的软件包。我喜欢用docker构建所有。

我想第二次直接从nginx而不是nodejs组件提供静态文件。但我不想在nginx图像上安装节点。

码头工人的基本做法是什么?在docker中构建所有可重现的图像?仅在结果中构建主机并在docker中打包?

由于

1 个答案:

答案 0 :(得分:2)

我认为最好的方法是使用两个步骤,因为使用一个版本很难,大多数情况下图像都不干净。

第一个conatiner将拥有卷中的源并在您的计算机(或CI)上构建静态文件。你不必安装任何其他东西,它将保持可重复性。

然后你可以使用静态文件来构建一个nginx图像。

您可以使用例如一个Makefile,所以你只需输入一个简短的命令