以编程方式从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:tag
和python: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 属性
如何以编程方式从 .NET 中的注册表中删除 Windows 产品密钥?