介紹
Docker使將應用程序和服務封裝到容器中變得容易,因此您可以在任何地方運行它們。但是,隨著您使用Docker,累積過多未使用的映像、容器和數據卷也變得很容易,這些會使輸出雜亂,並佔用磁盤空間。
Docker提供了從命令行清理系統所需的所有工具。這份速查表式指南提供了一個快速參考,其中包含有用的命令,可用於釋放磁盤空間並通過刪除未使用的Docker映像、容器和卷來保持系統有序。
如何使用本指南:
- 本指南以速查表格式提供,包含自包含的命令行片段。
- 跳轉到任何與您正在完成的任務相關的部分。
注意: 命令替換語法,命令 $(命令)
,用於命令中,在許多流行的shell中都可用,例如bash、zsh和Windows Powershell。
如果您想要一鍵部署Docker應用程序到實時服務器,請查看DigitalOcean App Platform。
清除所有未使用的或懸掛的圖像、容器、卷和網絡
Docker提供了一個單一命令,將清理任何資源——圖像、容器、卷和網絡——這些資源懸掛(沒有標記或與容器相關聯):
要額外刪除任何已停止的容器和所有未使用的圖像(不僅僅是懸掛圖像),請在命令中添加-a
標誌:
移除Docker圖像
移除一個或多個特定圖像
使用 docker images
命令搭配 -a
標誌來找到您想要移除的映像的 ID。這將顯示您所有的映像,包括中間映像層。當您找到想要刪除的映像後,可以將它們的 ID 或標籤傳遞給 docker rmi
:
列出:
移除:
注意: 在 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
和grep
的组合来找到与模式匹配的所有镜像。一旦您满意,您可以使用awk
将ID传递给docker rmi
来删除它们。请注意,这些实用工具不是由Docker提供的,也不一定在所有系统上都可用:
列表:
移除:
移除所有圖片
系統上的所有 Docker 圖片可以通過將 -a
添加到 docker images
命令來列出。一旦確定要刪除它們,可以添加 -q
標誌將圖片ID傳遞給 docker rmi
:
列表:
移除:
移除容器
移除一個或多個特定容器
使用 docker ps
命令與 -a
標誌來查找要移除的容器的名稱或ID:
列表:
移除:
在退出時移除容器
如果您在创建容器时知道您不想在完成后保留它,可以运行 docker run --rm
自动删除它退出时:
运行并删除:
删除所有已退出的容器
您可以使用 docker ps -a
定位容器,并按其状态筛选它们:created
、restarting
、running
、paused
或 exited
。要查看 exited
容器的列表,请使用 -f
标志基于状态进行过滤。当您确认要删除这些容器时,使用 -q
将ID传递给 docker rm
命令:
列表:
移除:
使用多个过滤器删除容器
created
(當您使用無效命令運行容器時可能會出現的狀態)或exited
的容器,您可以使用兩個過濾器:
列表:
刪除:
根據模式刪除容器
您可以使用docker ps
和grep
的組合找到與模式匹配的所有容器。當您確定滿意您想要刪除的列表時,您可以使用awk
和xargs
來向docker rm
提供ID。請注意,這些實用程序不是由Docker提供的,並且不一定在所有系統上都可用:
列表:
刪除:
停止並刪除所有容器
您可以使用docker ps
命令檢視系統上的容器。添加-a
標誌將顯示所有容器。當您確定要刪除它們時,可以添加-q
標誌將ID提供給docker stop
和docker rm
命令:
列表:
刪除:
刪除卷
刪除一個或多個特定卷
使用docker volume ls
命令找到要刪除的卷的名稱。然後,您可以使用docker volume rm
命令刪除一個或多個卷:
列表:
刪除:
移除懸空卷冊
卷冊的目的是獨立存在於容器之外,因此當容器被移除時,卷冊不會同時自動移除。當一個卷冊存在且不再連接到任何容器時,它被稱為一個懸空卷冊。dangling volume。要找到它們並確認您要移除它們,您可以使用docker volume ls
命令,並使用過濾器將結果限制為懸空卷冊。當您對列表滿意時,您可以使用docker volume prune
全部移除它們:
列表:
移除:
移除容器及其卷冊
如果您創建了一個未命名的卷冊,它可以在使用-v
標誌的同時與容器一起刪除。請注意,這僅適用於未命名卷冊。當容器成功移除時,它的ID會顯示。請注意,沒有提及移除卷冊。如果它是未命名的,它會被默默地從系統中移除。如果它是已命名的,它會默默地保持存在。
移除:
結論
這個指南涵蓋了一些常用的命令,用於刪除 Docker 中的映像、容器和卷。還有許多其他的組合和標誌可以與每個命令一起使用。要獲得完整的指南,請參閱 Docker 文件的 docker system prune
、docker rmi
、docker rm
和 docker 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