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)



作者:0過把火0
鏈接:https://www.jianshu.com/p/470e29801be2
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章