删除 Docker 映像的完整指南

如果你继续创建 docker 镜像,你很快就会开始用完空间。 删除旧的和未使用的 docker 镜像将为您释放大量磁盘空间。

在本文中,我将讨论从系统中删除 docker 镜像的各种场景。

删除 docker 镜像的方法

首先,使用以下命令检查系统上存在的 docker 映像:

docker images

输出将显示所有 docker 图像及其图像 ID。 您需要此映像名称(在存储库列下)或映像 ID 才能从系统中删除 docker 映像。

[email protected]:~$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
debian              latest              67e34c1c9477        2 weeks ago         114MB
ubuntu              latest              775349758637        6 weeks ago         64.2MB

使用镜像 ID,您可以通过以下方式删除 docker 镜像:

docker rmi image_name_or_id

您也可以使用此命令,因为两者是相同的:

docker image rm image_id

输出可能如下所示:

[email protected]:~$ docker rmi 67e34c1c9477
Untagged: debian:latest
Untagged: [email protected]:79f0b1682af1a6a29ff63182c8103027f4de98b22d8fb50040e9c4bb13e3de78
Deleted: sha256:67e34c1c9477023c0ce84c20ae5af961a6509f9952c2ebbf834c5ea0a286f2b8
Deleted: sha256:f2b4f0674ba3e6119088fe8a98c7921ed850c48d4d76e8caecd7f3d57721b4cb

如果您使用图像 ID,它将删除与该 ID 关联的所有图像。

删除与容器关联的 docker 映像

如果您可以像这样删除 docker 图像,生活会简单得多。 但这并不经常发生。

如果您有与 docker 映像关联的容器,则在尝试删除该映像时会遇到一些错误。

[email protected]:~$ docker rmi 775349758637
Error response from daemon: conflict: unable to delete 775349758637 (cannot be forced) - image is being used by running container 13dc0f4226dc

您必须先停止容器:

[email protected]:~$ docker stop 13dc0f4226dc
13dc0f4226dc

问题是即使你停止了容器,如果你尝试删除图像,它仍然会报错:

[email protected]:~$ docker rmi 67e34c1c9477
Error response from daemon: conflict: unable to delete 67e34c1c9477 (must be forced) - image is being used by stopped container 5ced86b1fcee

您在这里有两个选择:

  • 强制删除一个 docker 镜像(关联的容器将保留在系统中)
  • 移除关联的容器,然后移除 docker 镜像

要强制删除 docker 映像,可以使用 -f 选项:

docker rmi -f image_id

要删除容器然后删除图像,您可以使用以下内容:

docker rm container_id
docker rmi image_id

删除与多个容器关联的 docker 镜像

如果一个 docker 镜像只与一个容器相关联,生活还是会简单一点。 但是一个镜像可以有多个与之关联的容器,删除那种 docker 镜像会变得很痛苦。

你会看到这样的错误:

[email protected]:~$ docker rmi 775349758637
Error response from daemon: conflict: unable to delete 775349758637 (must be forced) - image is referenced in multiple repositories

首先,您需要找到与图像名称(而不是 ID)关联的所有容器。

docker ps -a -q --filter ancestor=docker_image_name
  • -a 选项显示所有正在运行和停止的容器。
  • -q 选项仅显示容器 ID。

然后你需要停止所有这些。 您可以一个一个地使用容器 ID,但这太耗时了。 您可以使用 pipe 和 xargs 的魔力来停止与图像关联的所有容器:

docker ps -a -q --filter ancestor=ubuntu | xargs docker stop

然后您可以删除已停止的容器或强制删除图像(如您在上一节中所见)。

如果要删除与图像关联的所有容器,只需运行以下命令:

docker ps -a -q --filter ancestor=ubuntu | xargs docker rm

现在您可以使用本教程前面显示的命令删除 docker 映像。

一次删除多个泊坞窗图像

您还可以在一个命令中删除多个 docker 图像。 与上一条命令相同。 您只需指定图像 ID 或图像名称。

docker rmi image_id_1 image_id_2 image_id_3

当然,您必须停止与图像关联的任何正在运行的容器。

一次删除所有未使用和悬空的 docker 镜像

在你看到之前,让我解释一下什么是未使用的和悬空的图像:

任何与任何类型的容器相关联(停止或运行)的 docker 镜像都是使用过的镜像。 如果 docker 镜像没有关联的容器,它将成为未使用的 docker 镜像。

一种 悬空的码头工人形象 “意味着您已经创建了映像的新版本,但它没有被赋予新名称。 因此,您拥有的旧图像成为悬空图像。 那些旧图像是未标记的图像,当您运行“docker images”命令时,其名称上会显示 。”

如果要删除悬空图像,可以使用 修剪选项

docker image prune

如果您想同时删除未使用和悬空的图像,可以使用带有选项 -a 的 prune:

docker image prune -a

您应该会在输出末尾看到它释放的空间:

[email protected]:~$ docker image prune -a
WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y
Deleted Images:
untagged: ubuntu:latest
untagged: [email protected]:6e9f67fa63b0323e9a1e587fd71c561ba48a034504fb804fd26fd8800039835d
untagged: debian:latest
untagged: [email protected]:79f0b1682af1a6a29ff63182c8103027f4de98b22d8fb50040e9c4bb13e3de78
deleted: sha256:67e34c1c9477023c0ce84c20ae5af961a6509f9952c2ebbf834c5ea0a286f2b8
deleted: sha256:f2b4f0674ba3e6119088fe8a98c7921ed850c48d4d76e8caecd7f3d57721b4cb
untagged: fedora:latest
untagged: [email protected]:d4f7df6b691d61af6cee7328f82f1d8afdef63bc38f58516858ae3045083924a
deleted: sha256:f0858ad3febdf45bb2e5501cb459affffacef081f79eaa436085c3b6d9bd46ca
deleted: sha256:2ae3cee18c8ef9e0d448649747dab81c4f1ca2714a8c4550eff49574cab262c9

Total reclaimed space: 308.3MB

您可以使用 prune 命令稍微聪明一点,只删除旧的未使用和悬空的图像。 因此,如果您想删除超过 24 小时的那些,请像这样使用它:

docker image prune -a --filter "until=24h"

从系统中删除所有 docker 镜像

也许你在一个测试环境中,你想通过删除所有的 docker 镜像来重新开始。

要删除所有 docker 镜像,您需要先停止所有正在运行的容器。

docker ps -a -q | xargs docker rm

现在您可以通过这种方式删除所有图像:

docker images -a -q | xargs docker rmi -f

就是这样。 我认为这对于删除 docker 图像已经足够参考了,您现在应该对这个主题有了更好的理解。 您还可以查看教程以删除 docker 容器。

如果您有任何问题或建议,请在下面发表评论。