Docker最佳实践nodejs和静态文件



实际上要为nodejs创建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"命令时,我必须安装开发包,而不仅仅是生产包,还有一些debian包来最小化映像。

我希望图像只包含生产包而不包含开发包。

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

在第二次我想服务静态文件直接从nginx,而不是从nodejs组件。但是我不想在nginx镜像上安装node。

docker的基本实践是什么?构建所有的docker有可复制的图像?在docker中只构建主机和包的结果?

谢谢

我认为最好的方法是使用两个步骤,因为使用一个构建很难,并且在大多数情况下图像不会干净。

第一个容器将源文件放在一个卷中,并在您的机器(或CI)上构建静态文件。你不需要安装任何其他的东西,它将保持可复制性。

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

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

最新更新