如何删除 Docker 镜像、容器和卷

介紹

Docker使將應用程序和服務封裝到容器中變得容易,因此您可以在任何地方運行它們。但是,隨著您使用Docker,累積過多未使用的映像、容器和數據卷也變得很容易,這些會使輸出雜亂,並佔用磁盤空間。

Docker提供了從命令行清理系統所需的所有工具。這份速查表式指南提供了一個快速參考,其中包含有用的命令,可用於釋放磁盤空間並通過刪除未使用的Docker映像、容器和卷來保持系統有序。

如何使用本指南:

  • 本指南以速查表格式提供,包含自包含的命令行片段。
  • 跳轉到任何與您正在完成的任務相關的部分。

注意: 命令替換語法,命令 $(命令),用於命令中,在許多流行的shell中都可用,例如bashzshWindows Powershell如果您想要一個一鍵將Docker應用程序部署到實時服務器的方法,請查看DigitalOcean App Platform

如果您想要一鍵部署Docker應用程序到實時服務器,請查看DigitalOcean App Platform

清除所有未使用的或懸掛的圖像、容器、卷和網絡

Docker提供了一個單一命令,將清理任何資源——圖像、容器、卷和網絡——這些資源懸掛(沒有標記或與容器相關聯):

docker system prune

要額外刪除任何已停止的容器和所有未使用的圖像(不僅僅是懸掛圖像),請在命令中添加-a標誌:

docker system prune -a

移除Docker圖像

移除一個或多個特定圖像

使用 docker images 命令搭配 -a 標誌來找到您想要移除的映像的 ID。這將顯示您所有的映像,包括中間映像層。當您找到想要刪除的映像後,可以將它們的 ID 或標籤傳遞給 docker rmi:

列出:

docker images -a

移除:

docker rmi Image Image

注意:docker images 命令中的 -a--all 標誌會顯示所有 Docker 映像,包括未被任何標籤引用的中間映像層。預設情況下,docker images 僅顯示至少有一個標籤的映像。然而,可能有一些沒有任何標籤的映像仍然佔用系統上的磁盤空間。-a 標誌可以幫助識別可以修剪以節省磁盤空間的映像。當與 docker rmi 命令一起使用時,-f--force 標誌也可以用來移除沒有標籤的映像。

移除懸掛的 Docker 映像

Docker 映像由多個層組成。懸掛映像是指與任何標籤映像沒有關聯的層。它們不再有用途,並且消耗磁盤空間。可以通過在 docker images 命令中添加過濾標誌 -f 並將其值設置為 dangling=true 來找到它們。當您確定要刪除它們時,可以使用 docker image prune 命令:

注意:如果您建立一个没有标记的镜像,该镜像将出现在悬空镜像列表中,因为它与标记的镜像没有关联。您可以在构建时通过提供标记来避免这种情况,并且可以使用docker tag命令来回溯地给镜像打标签。

列表:

docker images -f dangling=true

移除:

docker image prune

根据模式移除镜像

您可以使用docker imagesgrep的组合来找到与模式匹配的所有镜像。一旦您满意,您可以使用awk将ID传递给docker rmi来删除它们。请注意,这些实用工具不是由Docker提供的,也不一定在所有系统上都可用:

列表:

docker images -a |  grep "pattern"

移除:

docker images -a | grep "pattern" | awk '{print $1":"$2}' | xargs docker rmi

移除所有圖片

系統上的所有 Docker 圖片可以通過將 -a 添加到 docker images 命令來列出。一旦確定要刪除它們,可以添加 -q 標誌將圖片ID傳遞給 docker rmi

列表:

docker images -a

移除:

docker rmi $(docker images -a -q)

移除容器

移除一個或多個特定容器

使用 docker ps 命令與 -a 標誌來查找要移除的容器的名稱或ID:

列表:

docker ps -a

移除:

docker rm ID_or_Name ID_or_Name

在退出時移除容器

如果您在创建容器时知道您不想在完成后保留它,可以运行 docker run --rm 自动删除它退出时:

运行并删除:

docker run --rm image_name

删除所有已退出的容器

您可以使用 docker ps -a 定位容器,并按其状态筛选它们:createdrestartingrunningpausedexited。要查看 exited 容器的列表,请使用 -f 标志基于状态进行过滤。当您确认要删除这些容器时,使用 -q 将ID传递给 docker rm 命令:

列表:

docker ps -a -f status=exited

移除:

docker rm $(docker ps -a -f status=exited -q)

使用多个过滤器删除容器

的過濾器可以通過重複使用過濾器標誌並添加額外值來進行組合。這將產生滿足任一條件的容器列表。例如,如果您想要刪除所有標記為created(當您使用無效命令運行容器時可能會出現的狀態)或exited的容器,您可以使用兩個過濾器:

列表:

docker ps -a -f status=exited -f status=created

刪除:

docker rm $(docker ps -a -f status=exited -f status=created -q)

根據模式刪除容器

您可以使用docker psgrep的組合找到與模式匹配的所有容器。當您確定滿意您想要刪除的列表時,您可以使用awkxargs來向docker rm提供ID。請注意,這些實用程序不是由Docker提供的,並且不一定在所有系統上都可用:

列表:

docker ps -a |  grep "pattern

刪除:

docker ps -a | grep "pattern" | awk '{print $1}' | xargs docker rm

停止並刪除所有容器

您可以使用docker ps命令檢視系統上的容器。添加-a標誌將顯示所有容器。當您確定要刪除它們時,可以添加-q標誌將ID提供給docker stopdocker rm命令:

列表:

docker ps -a

刪除:

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

刪除卷

刪除一個或多個特定卷

使用docker volume ls命令找到要刪除的卷的名稱。然後,您可以使用docker volume rm命令刪除一個或多個卷:

列表:

docker volume ls

刪除:

docker volume rm volume_name volume_name

移除懸空卷冊

卷冊的目的是獨立存在於容器之外,因此當容器被移除時,卷冊不會同時自動移除。當一個卷冊存在且不再連接到任何容器時,它被稱為一個懸空卷冊。dangling volume。要找到它們並確認您要移除它們,您可以使用docker volume ls命令,並使用過濾器將結果限制為懸空卷冊。當您對列表滿意時,您可以使用docker volume prune全部移除它們:

列表:

docker volume ls -f dangling=true

移除:

docker volume prune

移除容器及其卷冊

如果您創建了一個未命名的卷冊,它可以在使用-v標誌的同時與容器一起刪除。請注意,這僅適用於未命名卷冊。當容器成功移除時,它的ID會顯示。請注意,沒有提及移除卷冊。如果它是未命名的,它會被默默地從系統中移除。如果它是已命名的,它會默默地保持存在。

移除:

docker rm -v container_name

結論

這個指南涵蓋了一些常用的命令,用於刪除 Docker 中的映像、容器和卷。還有許多其他的組合和標誌可以與每個命令一起使用。要獲得完整的指南,請參閱 Docker 文件的 docker system prunedocker rmidocker rmdocker volume rm。如果您希望在指南中看到常見的清理任務,請在評論中提出或提出建議。

要詳細了解 Docker 容器的不同組件,請查看 The Docker Ecosystem: An Introduction to Common Components

Source:
https://www.digitalocean.com/community/tutorials/how-to-remove-docker-images-containers-and-volumes