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

已发表: 2023-03-03

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

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

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

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

如何删除 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 。 第三张图片没有名称或标签。 在这种情况下,它是一个“悬挂”图像:当前未被容器使用的图像。 这个悬空图像是重建my_image的结果(常见情况)。 图像的先前版本仍在文件系统中,但现在未被使用。

该列表还显示每个图像的 64 字符 ID 的前 12 个字符、创建日期以及图像占用的存储空间。

删除所有未使用的图像

在上面的列表示例中,我们有一个悬空图像。 但是,没有名称或标签的图像可能处于活动状态。 例如,它可以用于通过引用其 ID 来启动容器。

要安全地删除所有真正悬挂的图像,您可以使用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 混乱接管您的系统! 了解如何使用这些方便的命令有效地清除图像、卷和容器。 点击鸣叫

按名称删除特定图像

您可以通过引用其名称来定位要删除的图像:

 $ 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以删除它们。

此过滤器使用关键字“悬挂”,但如上所述,一些没有标签的图像实际上可能是活动的。 如果此过滤器选择的图像不是真正悬空的,您将收到警告。

按 ID 删除特定图像

您可以使用docker rmi命令通过引用其 ID 来删除任何特定图像:

 $ docker rmi <image_id>

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

您可以使用docker rmi命令删除特定图像及其名称和标签。

例如,如果您有多个名称相同但标签不同的图像,您可以使用以下格式删除特定的图像:

 $ docker rmi <image_name>:<tag>

当您想要删除特定版本的图像而不是删除与存储库相关的所有图像时,此方法很方便。

删除所有带有最新标签的图像

在 Docker 中,“最新”标签指的是特定 Docker 映像的最新版本。 latest 标签通常用作 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_2image_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 command和容器 ID 按 ID 删除特定容器。 首先,使用docker ps command获取所有容器 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 系统,删除不必要的图像、卷和容器是一个很好的起点! 点击鸣叫

概括

本文介绍了如何删除 Docker 映像、卷和容器。 您学习了各种方法来维护一个干净有序的系统。 它涵盖了通过 ID 或名称删除所有未使用、未标记或特定图像的命令。 您还学习了通过 ID 或名称删除所有已停止容器或特定容器的命令。

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

正是这种简单性吸引了开发人员使用 Docker,部署在 Docker 中开发的应用程序没有比使用 Kinsta 的应用程序托管平台更简单的方法了。 您现在可以免费试用。