docker --rm = true会不会影响缓存?

时间:2015-08-31 16:41:48

标签: docker

docker build --rm=true

这是默认选项,可以在成功构建后删除所有中间图像。

是否会对缓存产生负面影响?由于缓存依赖于我认为的中间图像?

1 个答案:

答案 0 :(得分:4)

为什么不试试呢?

$ cat Dockerfile 
FROM debian

RUN touch /x
RUN touch /y

$ docker build --rm .
Sending build context to Docker daemon 2.048 kB
Sending build context to Docker daemon 
Step 0 : FROM debian
 ---> df2a0347c9d0
Step 1 : RUN touch /x
 ---> Running in 2e5ff13506e5
 ---> fd4dd6845e31
Removing intermediate container 2e5ff13506e5
Step 2 : RUN touch /y
 ---> Running in b2a585989fa5
 ---> 0093f530941b
Removing intermediate container b2a585989fa5
Successfully built 0093f530941b

$ docker build --rm .
Sending build context to Docker daemon 2.048 kB
Sending build context to Docker daemon 
Step 0 : FROM debian
 ---> df2a0347c9d0
Step 1 : RUN touch /x
 ---> Using cache
 ---> fd4dd6845e31
Step 2 : RUN touch /y
 ---> Using cache
 ---> 0093f530941b
Successfully built 0093f530941b

所以不,缓存仍然有效。正如您所指出的那样,默认情况下--rm实际上是开启的(您必须运行--rm=false才能将其关闭),但它指的是中间容器而不是中间< EM>图像。这些是Docker运行构建命令以创建映像的容器。在某些情况下,您可能希望保留这些容器以进行调试,但通常图像就足够了。在上面的输出中,我们可以看到被删除的容器 2e5ff13506e5和b2a585989fa5,以及保存的 images fd4dd6845e31和0093f530941b。

您无法删除最终图像所需的中间图像(图像是最后一层加上所有祖先图层)。