删除Docker镜像、卷和容器实用命令行

在几秒钟内删除Docker镜像、卷和容器

Docker是软件容器化技术,帮助开发者在从桌面到的不同平台上创建和部署应用程序。

在Docker容器中构建应用程序所需的源代码、依赖关系和工具的快照–或蓝图,被称为镜像。需要持久性数据的Docker应用程序可以依赖独立于底层操作系统的存储,称为卷。

在使用Docker时,有效组织镜像、卷和容器是很重要的。这些资产的未使用的化身会累积起来,占用宝贵的磁盘空间,最终影响系统性能。

本文探讨了通过删除镜像、卷和容器来维护系统组织的不同方法。而且我们将使用 docker 命令行界面(CLI)来快速完成这些任务。

  1. 如何删除Docker镜像
  2. 如何删除Docker卷
  3. 如何删除Docker容器

如何删除Docker镜像

从Docker中删除过期或不必要的镜像对于保持系统的整洁和有序至关重要。让我们来看看CLI如何针对某些镜像进行删除。

首先,让我们用 docker image ls 命令来看看Docker环境中的镜像:

$ docker image ls
REPOSITORY       TAG       IMAGE ID       CREATED              SIZE
my_image         latest    2cbc27836df4   60 seconds ago       7.05MB
<none>           <none>    85b412789704   2 days ago           7.05MB
demo             latest    26d80cd96d69   15 months ago        28.5MB

上面列出的镜像显示了名为my_imagedemo的镜像,都被标记为latest。第三个镜像没有名称或标签。在这种情况下,它是一个 “dangling” 的镜像:一个目前没有被容器使用的镜像。这个悬空的镜像是由my_image的重建造成的(一种常见的情况)。先前版本的映像仍然在文件系统中,但现在没有被使用。

该列表还显示了每个镜像的64个字符的ID的前12个字符,创建日期,以及镜像所消耗的存储空间。

删除所有未使用的镜像

在上面的列表例子中,我们有一个dangling镜像。然而,一个没有名字或标签的镜像有可能是活动的。例如,它可以通过引用其ID来启动一个容器。

为了安全地删除所有真正dangling镜像,你可以使用 docker image prune 命令:

$ docker image prune
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y
Deleted Images:
deleted: sha256:85b412789704c17e9c5e7edc97b2f64c748bbdae7eaa44d3fe2cc21a87acad3d
Total reclaimed space: 7.05MB

我们再列出我们的镜像,看看执行命令后的效果:

$ docker image ls
REPOSITORY       TAG       IMAGE ID       CREATED              SIZE
my_image         latest    2cbc27836df4   70 seconds ago       7.05MB
demo             latest    26d80cd96d69   15 months ago        28.5MB

在修剪过程中,没有名字或标签的镜像已经消失了。

按名称删除特定镜像

你可以通过引用一个镜像的名称来锁定该镜像进行删除:

$ docker image rm <image_name>

注意:你不能轻易地删除仍在使用的镜像。你应该停止或删除正在使用镜像的运行中的容器。虽然通常不推荐这样做,但你可以使用 -f 标志强制删除一个活动的镜像:

$ docker image rm <image_name> -f

使用rmi速记来删除镜像

Docker CLI在别名 rmi 中有一个删除镜像的速记方法。使用它来删除一个镜像的名字,看起来像这样:

$ docker rmi demo
Untagged: demo:latest
Deleted: sha256:2cbc27836df4a7707e746e28368f1fdecfefbfb813aae06611ca6913116b80b4

我们将使用 rmi 来完成下面的镜像清除例子。

删除所有未标记的镜像

没有标记的镜像仍然占据着宝贵的磁盘空间,随着时间的推移,会使你的系统越来越慢。

要消除Docker中所有未标记的镜像,可以使用带有过滤器的 docker rmi 命令。你可以使用 -f 选项提供基于特定标准的过滤器(不要与 image rm 可用的 -f 标志相混淆,以强制采取行动)。

过滤器 dangling=true 用于识别未标记的镜像:

$ docker rmi $(docker images -f "dangling=true" -q)

上述命令中的 -q 选项显示了所有未标记的镜像的ID。然后将所有这些ID作为参数传递给 docker rmi,以便将其删除。

这个过滤器使用关键字 “dangling”,但如上所述,一些没有标签的镜像实际上可能是活动的。如果被这个过滤器选中的镜像不是真正的悬空,你会被警告的。

按ID删除特定镜像

你可以使用 docker rmi 命令,通过引用其ID来删除任何特定的镜像:

$ docker rmi <image_id>

按名称和标签删除特定镜像

你可以通过使用 docker rmi 命令来删除一个特定的镜像以及它的名字和标签。

例如,如果你有多个具有相同名称但不同标签的镜像,你可以通过使用这种格式来删除一个特定的镜像:

$ docker rmi <image_name>:<tag>

当你想删除一个特定版本的镜像,而不是删除与一个资源库相关的所有镜像时,这种方法很方便。

移除所有带有latest标签的镜像

在Docker中,”latest” 标签指的是某个Docker镜像的最新版本。最新标签通常被用作Docker镜像的默认标签。它被自动分配给镜像的最新构建,除非明确指定另一个标签。

Docker提供了一个命令来删除所有带有 “latest” 标签的镜像:

$ docker rmi $(docker images | grep "latest" | awk '{print $3}')

上述命令分为两部分。首先,它得到了镜像ID的列表,然后将这个列表作为参数传递给 docker rmi 命令。

从远程存储库中删除镜像

要从远程仓库(如Docker Hub)中删除一个镜像,你首先需要使用Docker CLI登录该账户。

一旦你登录了,你只需要使用 docker rmi 命令来删除该镜像。 docker rmi 命令可以同时删除本地和远程镜像:

docker rmi my_repo/my_image_tag

值得注意的是,你只能删除已经推送到存储库的镜像。同样,你也不能删除正在运行的容器所使用的镜像。

从远程版本库中删除多个镜像

要从远程仓库移除多个镜像,你可以使用 docker rmi 命令,后面跟上镜像的ID或标签。比如说:

docker rmi my_repo/image_tag_1 my_repo/image_tag_2 my_repo/image_tag_3

这将从版本库 my_repo 中删除带有 image_tag_1image_tag_2 和 image_tag_3 标签的三张镜像。

如何删除Docker卷

Docker卷可能会占用大量的磁盘空间,特别是当它们包含大量的数据或多个备份时。通过删除不再需要的卷,你可以减少数据泄露的风险,确保敏感数据不会被未经授权的用户访问。定期删除卷也可以使Docker环境保持最新,并防止由过时的数据引起的问题。

这些命令会永久地破坏存储在卷中的所有数据,所以要谨慎使用它们。

移除所有未使用的卷

在Docker中,删除未使用的卷与删除镜像或容器一样关键。

为了释放磁盘存储,你可以使用 docker volume prune 命令。

按名称删除一个特定卷

在Docker中删除一个特定的卷,对于删除未使用的卷很有用。下面是删除一个卷的命令。

docker volume rm my_volume_name

通过上述命令,my_volume_name卷将被删除。如果你试图删除一个已使用的卷,Docker会产生一个错误。你可以使用 docker volume ls 命令来检查可用的卷。

如何删除Docker容器

当你更多地使用Docker工作时,你可能会积累许多未使用的容器,这些容器占用了磁盘资源。如果你不删除它们,它们会随着时间的推移积累起来,占用宝贵的磁盘资源,拖慢你的系统,并有可能使你陷入危险。

移除所有停止的容器

命令 docker container prune 可以删除Docker中所有停止的容器。在这里,该命令创建了一个将被删除的所有停止的容器的列表,并在继续进行之前要求确认。这有助于回收磁盘空间,维持一个干净有序的Docker环境,同时允许你仔细检查你没有失去任何重要的东西:

$ docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
4df4c47c4df4
d35bcec20bce

注意,只有停止的容器可以用这个命令来删除。如果你需要删除正在运行的容器,你需要先停止它们或者使用不同的命令。

通过ID删除一个特定的容器

在Docker中,你可以使用 docker rm 命令和容器ID一起按ID删除一个特定的容器。首先,使用 docker ps 命令获得所有的容器ID:

$ docker ps -a -q
1ce3cdeb4035
06b79541e25c
fa98f1804e3e
$ docker rm 1ce3cdeb4035

上述命令只有在容器处于停止状态时才有效。如果容器正在运行,那么你需要使用-f标志强行删除它:

$ docker rm -f 1ce3cdeb4035

按名称删除一个特定的容器

Docker提供了一个多用途的 docker rm 命令,可以按名称和ID删除容器。

例如,如果你有一个名为web_server的容器,你可以用下面的命令来删除它:

$ docker rm web_server

首先,停止容器是很重要的。Docker提供了 docker stop 命令来停止一个特定的容器。

移除所有运行中的容器

要删除所有正在运行的容器,你可以使用 docker rm 命令:

$ docker rm $(docker ps -q)

使用 docker ps -q 可以列出运行中的容器的ID。之后,ID被传递给 docker rm 命令,该命令会移除所有的容器。

注意,这个命令只会删除正在运行的容器。如果你想删除所有的容器,包括停止的容器,你可以使用下面的命令来代替:

$ docker rm $(docker ps -a -q)

小结

这篇文章解释了如何删除Docker镜像、卷和容器。你学到了各种方法来维护一个干净和有组织的系统。它涵盖了按ID或名称删除所有未使用的、未标记的或特定的镜像的命令。你还学习了按ID或名称删除所有停止的容器或特定容器的命令。

删除Docker镜像、卷和容器是一个简单明了的过程,可以帮助你管理未使用的组件,恢复宝贵的磁盘空间,并经常提高系统性能。

评论留言