【问题标题】:Is there a way to avoid pushing node_modules on every push using Docker?有没有办法避免在每次使用 Docker 推送时推送 node_modules?
【发布时间】: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 语句来执行此操作,我不知道?

用例:

  1. 我只更改了我的应用程序代码,并没有添加任何新包。
  2. 我添加了一些包并要求推送 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


【解决方案1】:

这篇博文解释了如何通过创建一个可以在 package.json 文件未更改的情况下缓存的层来缓存您的依赖项在后续构建映像中 - http://bitjudo.com/blog/2014/03/13/building-efficient-dockerfiles-node-dot-js/

这是指向 gist 代码 sn-p 的链接 - https://gist.github.com/dweinstein/9468644

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

【讨论】:

  • 这真是个好主意。但我不确定为什么它仍在推动我的整个目录?查看我更新的问题!
猜你喜欢
  • 1970-01-01
  • 2020-04-04
  • 1970-01-01
  • 2022-12-17
  • 1970-01-01
  • 1970-01-01
  • 2017-01-06
  • 1970-01-01
  • 2018-03-24
相关资源
最近更新 更多