牛下载:绿色软件官方软件免费下载基地!
所在位置:首页 > 新闻资讯 > Docker实践(26) – 设置从Dockerfile指定点缓存失效

Docker实践(26) – 设置从Dockerfile指定点缓存失效

发布时间:2020-02-12 12:00:03来源:阅读:

使用–no-cache构建镜像大多情况下足够解决由于缓存引起的问题。不过有时候你想要一个更细粒度的解决方案。例如你构建的镜像需要时间比较长,你仍然想一些步骤使用缓存,然后从指定的点开始不使用缓存重新运行命令构建镜像。

问题

你想在构建镜像时设置从Dockerfile的指定位置开始使缓存失效。

解决方法

在命令的后面添加注释来使缓存失效。

讨论

例如我们在以下的Dockerfile中的CMD命令后添加注释以让缓存从这里失效:

FROM node
MAINTAINER ian.miell@gmail.com
RUN git clone http://github.com/docker-in-practice/todo.git
WORKDIR todo
RUN npm install
RUN chmod -R 777 /todo
EXPOSE 8000
CMD ["npm","start"] #bust the cache

输出为:

$ docker build .
Sending build context to Docker daemon  2.56 kB
Sending build context to Docker daemon
Step 0 : FROM node
 ---> 91cbcf796c2c
Step 1 : MAINTAINER ian.miell@gmail.com
 ---> Using cache
A “normal” docker build
   ---> 8f5a8a3d9240
Step 2 : RUN git clone -q http://github.com/docker-in-practice/todo.git
 ---> Using cache
 ---> 48db97331aa2
Step 3 : WORKDIR todo
 ---> Using cache
 ---> c5c85db751d6
Step 4 : RUN npm install
 ---> Using cache
 ---> be943c45c55b
Step 5 : EXPOSE 8000
 ---> Using cache
 ---> 805b18d28a65
Step 6 : CMD ["npm","start"] #bust the cache
 ---> Running in fc6c4cd487ce
 ---> d66d9572115e
Removing intermediate container fc6c4cd487ce
Successfully built d66d9572115e

从输出你会看到在第6步已经不使用缓存了,而之前的步骤仍使用缓存,这既缩短了构建镜像的时间,又能解决缓存可能引起的问题。
这个技巧工作的原因是我们在命令后添加了非空字符,所以Docker认为这是一个新的命令,也就不使用缓存了。
你会好奇如果我们更改的是第4步命令RUN npm install,那后面的第5步第6步还会使用缓存吗?答案是从更改的第4步开始下面的就不能使用缓存了。所以由于这个原因,建议尽可能的把一些不常需要变更的命令往上移。

反对
收藏
  • 热门资讯
  • 最新资讯
  • 应用排行榜
  • 游戏排行榜