0
docker build --rm=true
这是默认选项,它使得它在成功构建后删除所有中间图像。Docker --rm = true是否会影响缓存?
它会对缓存产生不利影响吗?由于缓存依赖于我认为的中间图像?
docker build --rm=true
这是默认选项,它使得它在成功构建后删除所有中间图像。Docker --rm = true是否会影响缓存?
它会对缓存产生不利影响吗?由于缓存依赖于我认为的中间图像?
为什么不尝试它并找出?
$ 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
来关闭它),但它指的是中间的容器而不是中间的图片。这些是Docker运行构建命令创建映像的容器。在某些情况下,您可能需要保留这些容器以进行调试,但通常这些图像足够了。在上面的输出中,我们可以看到容器 2e5ff13506e5和b2a585989fa5被删除,还有图片 fd4dd6845e31和0093f530941b被保留。
您无法删除最终图像所需的中间图像(图像是最后一个图层加上所有祖先图层)。
非常好。现在我意识到,在--- --->运行在2e5ff13506e5 ---> fd4dd6845e31',前者是指容器,后者是指图像。 – colinfang
正是。这是一个很好的观点,所以我将它添加到答案中。 –