我有一个120MB+的node_modules文件夹,我想知道如果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 语句来执行此操作,我不知道?
用例:
- 我只对我的应用程序代码进行了更改,并没有添加任何新包。
- 我添加了一些包并要求推送 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>
它仍然会尝试将我的整个目录推送到注册表?!
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...
:
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 新手)。它试图推送我的应用程序所在的整个目录!?
有任何想法吗?