做者: 張首富 時間: 2019-04-10 w x: y18163201
對於Docker來講,存在鏡像/容器/存儲卷和網絡(iptables規則)這些對象.所以docker也會產生出這些對應的對象,這些對象會佔據磁盤空間,當這些對象不會再被使用的時候,爲了節省磁盤空間,就須要對這些對象進行清理,即docker的垃圾清理.咱們這邊針對docker 1.13 之後的版本進行清理docker
當咱們使用docker stop $ContainerName
命令中止容器的時候,系統並不知道會刪除這個容器,除非在運行此容器的時候設置了-rm
參數,中止後的容器仍然會佔據cipan的存儲空間,經過docker container prune
可以刪除這些被中止後的容器bash
# docker container prune WARNING! This will remove all stopped containers. Are you sure you want to continue? [y/N] y
執行此命令時,默認會提示是否繼續。若是在執行命令是設置了-f或–force字段,則會直接刪除已全部已中止的容器。默認狀況下,此命令執行時會刪除全部的已中止的容器,也能夠經過設置–filter字段,來過濾所要刪除的容器。例如,下面的命令僅僅刪除中止超過24小時的容器。網絡
# docker container prune --filter "until=24h"
經過執行docker images prune
命令能夠清除全部再也不使用的鏡像,默認狀況下此命令僅僅清除狀態爲dangling的鏡像。
什麼樣的鏡像才爲dangling
的鏡像: 爲未被打標籤和沒有被任何容器引用的鏡像。
什麼狀況下才會出現: 原來爲 mongo:3.2, 隨着官方鏡像維護, 發佈了新版本後, 從新 docker pull mongo:3.2 時, mongo:3.2 這個鏡像名被轉移到了新下載的鏡像身上, 而舊的鏡像上的這個名稱則被取消, 從而成爲了 <none>. 除了 docker pull 可能致使這種狀況, docker build 也一樣能夠致使這種現象. 因爲新舊鏡像同名, 舊鏡像名稱被取消, 從而出現倉庫名、標籤均爲 <none> 的鏡像.ide
# docker image prune WARNING! This will remove all dangling images. Are you sure you want to continue? [y/N] y
移除全部未被使用的鏡像,這須要經過設置-a字段來實現,只要未被使用都會被刪除ui
# 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
執行此命令時,默認會提示是否繼續。若是在執行命令是設置了-f或–force字段,則會直接進行刪除操做。能夠經過設置–filter字段,來過濾所要刪除的鏡像。例如,下面的命令僅僅刪除中止建立超過24小時的鏡像。code
# docker image prune -a --filter "until=24h"
存儲卷能夠被一個或者多個容器使用,也會佔據磁盤空間。爲保持數據,存儲卷永遠都不會自動被刪除.對象
# docker volume prune WARNING! This will remove all volumes not used by at least one container. Are you sure you want to continue? [y/N] y
執行此命令時,默認會提示是否繼續。若是在執行命令是設置了-f或–force字段,則會直接進行刪除操做。默認狀況下,此命令執行時會刪除全部的未被使用的存儲卷,也能夠經過設置–filter字段,來過濾所要刪除的存儲卷。例如,下面的命令僅僅刪除label值爲keep的存儲卷。ip
# docker volume prune --filter "label!=keep"
docker網絡並不會佔據磁盤空間,可是會建立iptables規則,橋網絡設備和路由表。所以,但如何再也不使用這些資源時,應該對其進行清理。ci
# docker network prune WARNING! This will remove all networks not used by at least one container. Are you sure you want to continue? [y/N] y
執行此命令時,默認會提示是否繼續。若是在執行命令是設置了-f或–force字段,則會直接進行刪除操做。默認狀況下,此命令執行時會刪除全部的未被使用的網絡,也能夠經過設置–filter字段,來過濾所要刪除的網絡。例如,下面的命令僅僅爲被使用超過24小時的網絡。資源
# docker network prune --filter "until=24h"
經過docker system prune命令可以快速的刪除全部的未被使用的對象,包括鏡像、容器、網絡和存儲卷。在docker 17.06.0以前,存儲卷會同時被清理。在docker 17.06.1以後,須要經過設置–volumes字段,纔會同時清理存儲卷。
# docker system prune WARNING! This will remove: - all stopped containers - all networks not used by at least one container - all dangling images - all build cache Are you sure you want to continue? [y/N] y
若是所使用的docker 17.06.1以後的版本,則須要在命令後添加–volumes字段來清理存儲卷的內容。
# docker system prune --volumes WARNING! This will remove: - all stopped containers - all networks not used by at least one container - all volumes not used by at least one container - all dangling images - all build cache Are you sure you want to continue? [y/N] y