docker的容器和鏡像的清理


Docker用戶會在使用docker一段時間后發現宿主機的磁盤很容易就快被占滿,並且手動docker rmi [imgName]似乎並不能釋放磁盤,貌似想刪掉的鏡像依然在宿主機中,下面針對這一問題提出一些解決方案。

Docker空間占用查看

1.13版本后Docker提供給了一些System命令,例如df命令查看Docker占用分布:

$ docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE Images 3 0 5.373GB 5.373GB (100%) Containers 0 0 0B 0B Local Volumes 0 0 0B 0B 
$ docker system df -v 命令可以進一步查看空間占用細節,以確定是哪個鏡像、容器或本地卷占用過高空間

清理方法

1 自動清理命令

docker system prune可對空間進行自動清理。
該命令所清理的對象如下:

已停止的容器
未被任何容器使用的卷
未被任何容器所關聯的網絡
所有懸空的鏡像

對於上面提到的一些鏡像或容器的狀態,需要我們心里有點數:

已使用的鏡像:指所有已被容器(包括stop的)關聯的鏡像,也就是docker ps -a所看到的所有容器對應的image。
未引用鏡像:沒有被分配或使用在容器中的鏡像
懸空鏡像(dangling image):未配置任何Tag(也就是無法被引用)的鏡像。通常是由於鏡像編譯過程中未指定-t參數配置Tag導致的。

docker system prune后可以加額外的參數,如:
docker system prune -a : 一並清除所有未被使用的鏡像和懸空鏡像。
docker system prune -f : 用以強制刪除,不提示信息。

另外除了system級別的,還有針對容器或是鏡像級別的刪除命令:

docker image prune:刪除懸空的鏡像。

docker container prune:刪除無用的容器。
      --默認情況下docker container prune命令會清理掉所有處於stopped狀態的容器 --如果不想那么殘忍統統都刪掉,也可以使用--filter標志來篩選出不希望被清理掉的容器。例子:清除掉所有停掉的容器,但24內創建的除外: --$ docker container prune --filter "until=24h" docker volume prune:刪除無用的卷。 docker network prune:刪除無用的網絡 

手動清除

對於懸空鏡像和未使用鏡像可以使用手動進行個別刪除:
1、刪除所有懸空鏡像,不刪除未使用鏡像:
docker rmi $(docker images -f "dangling=true" -q)


2、刪除所有未使用鏡像和懸空鏡像
docker rmi $(docker images -q)


3、清理卷
如果卷占用空間過高,可以清除一些不使用的卷,包括一些未被任何容器調用的卷(-v 詳細信息中若顯示 LINKS = 0,則是未被調用):
刪除所有未被容器引用的卷:
docker volume rm $(docker volume ls -qf dangling=true)


4、容器清理
如果發現是容器占用過高的空間,可以手動刪除一些:
刪除所有已退出的容器:
docker rm -v $(docker ps -aq -f status=exited)
刪除所有狀態為dead的容器
docker rm -v $(docker ps -aq -f status=dead)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM