以编程方式从Dockerfile中删除与docker build相关联的docker镜像

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了以编程方式从Dockerfile中删除与docker build相关联的docker镜像相关的知识,希望对你有一定的参考价值。

我正在构建一个docker镜像作为自动构建的一部分,我想删除我创建的图像以及与构建的图像相关的任何后续图像。

我可以通过指定名称和标签轻松删除构建的图像(因为我可以通过变量获取此数据)。但是如何删除Dockerfile引入的任何其他图像? (特别是使用FROM关键字,因为在单个Dockerfile中可以有多个FROM调用)。

例如,我有一个图像在其Dockerfile中引入python:2.7.16-alpine。如果我开始在系统上没有图像,运行docker build -f path/to/Dockerfile给我留下了两个图像:generated-docker-image:tagpython:2.7.16-alpine

假设进程在可能有其他docker镜像的系统上运行而我不想删除,我该如何以编程方式删除我的图像及其相关图像?

答案

我想你可以使用docker history(显示图像的历史记录)来查找与最终图像相关的所有图像。我想通知您,此解决方案不适用于多阶段构建,因为最终图像仅引用了作为基础层的图像。

让我举几个例子:

1.我们创建一个简单的Dockerfile

FROM ubuntu:latest
RUN touch newfile

2.我们从中构建一个泊坞窗图像:

$ docker build -t new-image .
Sending build context to Docker daemon  2.048kB
Step 1/2 : FROM ubuntu:latest
latest: Pulling from library/ubuntu
898c46f3b1a1: Pull complete
63366dfa0a50: Pull complete
041d4cd74a92: Pull complete
6e1bee0f8701: Pull complete
Digest: sha256:017eef0b616011647b269b5c65826e2e2ebddbe5d1f8c1e56b3599fb14fabec8
Status: Downloaded newer image for ubuntu:latest
 ---> 94e814e2efa8
Step 2/2 : RUN touch newfile
 ---> Running in ac93702f363b
Removing intermediate container ac93702f363b
 ---> 4d52ac122761
Successfully built 4d52ac122761
Successfully tagged new-image:latest

3.现在我们可以清理所有用于构建最终图像的图像:

$ docker history new-image:latest | awk '!/IMAGE|<missing>/ {print $1}' | xargs -I {} docker rmi {}
Untagged: new-image:latest
Deleted: sha256:4d52ac122761ec1ba9f3d77606c49f98cf8c7d728d60834a87f25cede39a2027
Deleted: sha256:7f62b9533dbd6514fe0cb7f4ddc3086ad5ae45fe1c13f5eeea1cc38f575e92bd
Untagged: ubuntu:latest
Untagged: ubuntu@sha256:017eef0b616011647b269b5c65826e2e2ebddbe5d1f8c1e56b3599fb14fabec8
Deleted: sha256:94e814e2efa8845d95b2112d54497fbad173e45121ce9255b93401392f538499
Deleted: sha256:e783d8ee44ce099d51cbe699f699a04e43c9af445d85d8576f0172ba92e4e16c
Deleted: sha256:cc7fae10c2d465c5e4b95167987eaa53ae01a13df6894493efc5b28b95c1bba2
Deleted: sha256:99fc3504db138523ca958c0c1887dd5e8b59f8104fbd6fd4eed485c3e25d2446
Deleted: sha256:762d8e1a60542b83df67c13ec0d75517e5104dee84d8aa7fe5401113f89854d9

以上是关于以编程方式从Dockerfile中删除与docker build相关联的docker镜像的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式设置 dock:name Java Mac OS X JVM 属性

docke--Dockerfile构建docker镜像

如何以编程方式从 .NET 中的注册表中删除 Windows 产品密钥?

以编程方式更改停靠标题

以编程方式从通知托盘中删除 UILocalNotification

如何以编程方式从 Android 中删除 SQLite 数据库