如何在缓存失效后删除 cached/intermediate docker 图像
How to delete cached/intermediate docker images after the cache gets invalidated
我有一个 CI-pipeline,它为我的应用程序的每个 运行 管道构建一个 docker 图像(并且管道是由代码推送触发的git 存储库。)
docker 图像由几个中间层组成,这些中间层的尺寸逐渐变大。每个 运行 的大多数中间图像都是相同的,因此 docker 的缓存机制得到了显着利用。
但是,问题是每个 运行 的最后几层是不同的,因为它们来自 docker 文件中的 COPY 语句,其中构建的应用程序工件被复制到图像中.由于每个 运行 都会修改工件,因此已缓存的最底层图像将始终失效。这些图片每张大小为 800mb。
我可以使用什么 docker 命令来识别(和删除)这些被新图像替换的图像,即当它们失效时?
我想让我的 CI-pipeline 在 运行 的末尾删除它们,这样它们就不会在 CI-server 上悬空而浪费很多磁盘 space.
如果我理解正确:每次推送代码时,CI 管道都会创建新映像,并在其中部署新版本的应用程序。结果,以前创建的图像变得过时,所以你想删除它。为此,您必须:
- 摆脱所有从过时图像创建的过时容器
- 使用命令显示所有容器
docker ps -a
- 如果仍然 运行,请使用命令
docker stop [containerID]
停止过时的容器
- 使用
command docker rm [containerID]
删除它们
- 使用命令删除过时的图像:
docker rmi [imageID]
总结为什么需要这个过程:你不能删除任何图像,直到它被任何现有容器使用(即使停止的容器仍然需要它们的图像)。为此,您应该先停止并移除旧容器,然后再移除旧镜像。
检测部分和删除过程的自动化应基于图像版本和容器名称,CI 管道在创建新图像时生成。
编辑 1
要列出与任何标记图像无关的所有图像,您可以使用命令:docker images -f dangling=true
。您可以使用命令删除它们:docker images purge
.
这里只需要记住一件事:如果您构建图像而不标记它,该图像将出现在“悬挂”图像列表中。您可以通过在构建时提供标签来避免这种情况。
编辑 2
图像清除命令已更改。现在正确的命令是:
docker image prune
这里是 link 和文档
我有一个 CI-pipeline,它为我的应用程序的每个 运行 管道构建一个 docker 图像(并且管道是由代码推送触发的git 存储库。)
docker 图像由几个中间层组成,这些中间层的尺寸逐渐变大。每个 运行 的大多数中间图像都是相同的,因此 docker 的缓存机制得到了显着利用。
但是,问题是每个 运行 的最后几层是不同的,因为它们来自 docker 文件中的 COPY 语句,其中构建的应用程序工件被复制到图像中.由于每个 运行 都会修改工件,因此已缓存的最底层图像将始终失效。这些图片每张大小为 800mb。
我可以使用什么 docker 命令来识别(和删除)这些被新图像替换的图像,即当它们失效时?
我想让我的 CI-pipeline 在 运行 的末尾删除它们,这样它们就不会在 CI-server 上悬空而浪费很多磁盘 space.
如果我理解正确:每次推送代码时,CI 管道都会创建新映像,并在其中部署新版本的应用程序。结果,以前创建的图像变得过时,所以你想删除它。为此,您必须:
- 摆脱所有从过时图像创建的过时容器
- 使用命令显示所有容器
docker ps -a
- 如果仍然 运行,请使用命令
docker stop [containerID]
停止过时的容器
- 使用
command docker rm [containerID]
删除它们
- 使用命令删除过时的图像:
docker rmi [imageID]
总结为什么需要这个过程:你不能删除任何图像,直到它被任何现有容器使用(即使停止的容器仍然需要它们的图像)。为此,您应该先停止并移除旧容器,然后再移除旧镜像。
检测部分和删除过程的自动化应基于图像版本和容器名称,CI 管道在创建新图像时生成。
编辑 1
要列出与任何标记图像无关的所有图像,您可以使用命令:docker images -f dangling=true
。您可以使用命令删除它们:docker images purge
.
这里只需要记住一件事:如果您构建图像而不标记它,该图像将出现在“悬挂”图像列表中。您可以通过在构建时提供标签来避免这种情况。
编辑 2
图像清除命令已更改。现在正确的命令是:
docker image prune
这里是 link 和文档