【发布时间】:2023-04-01 03:57:02
【问题描述】:
我有一个 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/
当我使用下面的 Dockerfile 运行docker built -t <name> . 然后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 新手)。它正在尝试推送我的应用所在的整个目录!?
有什么想法吗?
【问题讨论】:
标签: docker dockerfile google-container-registry