有没有一种方法可以避免使用Docker推送node_modules?

我有一个node_modules文件夹是120MB + ,我想知道如果我们可以以某种方式只推动node_modules文件夹,如果它已经改变?

这是我的docker文件现在看起来像:

FROM node:6.2.0 # Create app directory RUN mkdir -p /usr/src/app WORKDIR /usr/src/app # Install app dependencies COPY package.json /usr/src/app/ RUN npm install # Bundle app source COPY . /usr/src/app CMD export NODE_ENV=production EXPOSE 80:7000 # EXPOSE 7000 CMD [ "npm", "start" ] 

所以我想要做的只是推动node_modules文件夹,如果它已经改变! 我不介意手动指定node_modules文件夹何时更改,是否通过传递一个标志和使用if语句来做到这一点,我不知道?

用例:

  1. 我只修改了我的应用程序代码,并没有添加任何新的软件包。
  2. 我添加了一些包,并要求推送node_modules文件夹。

编辑:

所以我尝试了下面的一些逻辑引入的docker文件

http://bitjudo.com/blog/2014/03/13/building-efficient-dockerfiles-node-dot-js/

当我运行docker built -t <name> . 与下面的Dockerfile然后gcloud docker -- push <url>它仍然会尝试推我的整个目录到registry?

 FROM node:6.2.0 ADD package.json /tmp/package.json RUN cd /tmp && npm install # Create app directory RUN mkdir -p /usr/src/app && cp -a /tmp/node_modules /usr/src/app/ WORKDIR /usr/src/app # Install app dependencies # COPY package.json /usr/src/app/ # RUN npm install # Bundle app source ADD . /usr/src/app CMD export NODE_ENV=production EXPOSE 80:7000 # EXPOSE 7000 CMD [ "npm", "start" ] 

运行gcloud docker -- push etc...输出gcloud docker -- push etc...

 f614bb7269f3: Pushed 658140f06d81: Layer already exists be42b5584cbf: Layer already exists d70c0d3ee1a2: Layer already exists 5f70bf18a086: Layer already exists d0b030d94fc0: Layer already exists 42d0ce0ecf27: Layer already exists 6ec10d9b4afb: Layer already exists a80b5871b282: Layer already exists d2c5e3a8d3d3: Layer already exists 4dcab49015d4: Layer already exists 

f614bb7269f3总是被推,我不明白为什么(新的到Docker)。 它试图推动我的应用程序在整个目录!?

有任何想法吗?

这篇博客文章解释了如何通过创build一个可以被caching的图层caching你的图像的后续版本,只要package.json文件没有改变 – http://bitjudo.com/blog/2014/03/ 13 /build筑效率-dockerfiles节点-点- JS /

这是一个链接到要点代码段 – https://gist.github.com/dweinstein/9468644

在我的组织中为我们的节点应用程序创造了奇迹。