Rai*_*aif 7 caching node.js npm docker
我似乎无法让我的 dockerfile 缓存我的 npm 安装。我按照所有示例指定的方式对其进行了设置,并且 package.json 不会更改,但它仍会下载所有依赖项。
这是我所拥有的
FROM mf/nodebox
# Maintainer
MAINTAINER Raif Harik <reharik@gmail.com>
RUN rm /bin/sh && ln -s /bin/bash /bin/sh
ADD /app/package.json /tmp/package.json
RUN cd /tmp && npm install && npm install -g babel
RUN cd /tmp && cp -a /tmp/node_modules /opt/app/current/node_modules
# Entrypoint to docker shell
ENTRYPOINT ["docker-shell"]
#this is the flag that tells the docker-shell what mode to execute
# Startup commands
CMD ["-r"]
# set WORKDIR
WORKDIR /opt/app/current
# Add shell script for starting container
ADD ./docker-shell.sh /usr/bin/docker-shell
RUN chmod +x /usr/bin/docker-shell
COPY /app /opt/app/current
Run Code Online (Sandbox Code Playgroud)
然后我得到的输出是
Building domain...
Step 0 : FROM mf/nodebox
---> 4ee7c51a410d
Step 1 : MAINTAINER Raif Harik <reharik@gmail.com>
---> Using cache
---> 78d0db67240c
Step 2 : RUN rm /bin/sh && ln -s /bin/bash /bin/sh
---> Using cache
---> d7d360d8f89a
Step 3 : ADD /app/package.json /tmp/package.json
---> 5b373dae5141
Removing intermediate container f037272f49c3
Step 4 : RUN cd /tmp && npm install && npm install -g babel
---> Running in cb89bb6fc2d0
npm WARN package.json MF_Domain@0.0.1 No description
Run Code Online (Sandbox Code Playgroud)
所以它缓存了前几个命令,但它在第 3 步 ADD package.json 停止,然后转到第 4 步的 npm。
编辑:
我想我应该提一下,当我在代码中部署新的更改时(或者为了我对这个问题的试验,只是相同的代码),而 package.json 保持不变,它会复制到部署文件夹。我不知道 docker 是否检查了 createddate、校验和,或者做一个 diff。如果它是 createddate 那么也许这就是问题所在。
从docker 文档中可以看出
ADD
在和指令的情况下COPY
,将检查放入图像中的文件的内容。具体来说,对文件进行校验和,然后在缓存查找期间使用该校验和。如果文件中发生任何更改(包括其元数据) ,则缓存将失效。
这些元数据包括文件修改时间。
有一些技巧可以解决这个问题(例如,当 git checkout 相同文件时 docker add 缓存)。
另请参阅Docker github 项目上的相关讨论。
归档时间: |
|
查看次数: |
5838 次 |
最近记录: |