使用 Node.js 和二进制 node_modules 进行 docker 开发

使用 Node.js 和二进制 node_modules 进行 docker 开发

我正在为我的 Node.js 应用程序的开发环境制作一个 docker 镜像。运行 docker 镜像时,会挂载一个卷,以便我的应用程序的源代码与主机中的容器共享。我遇到的问题是,与大多数 Node.js 项目不同,我将 node_modules/ 置于版本控制之下(如这里建议的那样http://www.futurealoof.com/posts/nodemodules-in-git.html)。

我需要在构建期间使用 ADD 将 node_modules/ 目录注入容器以构建二进制模块,然后在挂载卷后以某种方式让我的应用程序在 docker 容器运行期间使用它们。

# Docker official ubuntu 12.04 LTS
FROM ubuntu:12.04

# See: https://launchpad.net/~chris-lea/+archive/node.js/
ENV NODEJS_VERSION 0.10.29-1chl1~precise1

# add updated node.js defacto official repository
RUN apt-get update
RUN apt-get install --yes python-software-properties
RUN add-apt-repository ppa:chris-lea/node.js

# install node.js
RUN apt-get update
RUN apt-get install --yes nodejs=${NODEJS_VERSION}

# install other dependencies via apt...

# copy files to temp directory and rebuild binary node.js modules
ADD ./node_modules /tmp/web/
WORKDIR /tmp/web
RUN npm rebuild

# expose port for app and start it
EXPOSE 5900

WORKDIR /app

# HELP: better way than copying here?
CMD cp -r /tmp/web/node_modules . && ./node_modules/.bin/forever \
  --watch app.js

答案1

您可以轻松地将您的工作目录设置为(即)/app,将您的卷挂载到容器内的/app,然后从那里运行 npm rebuild,对吗?

相关内容