docker的容器和鏡像的清理

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

Docker空間佔用查看

1.13版本後Docker提供給了一些System命令,例如df命令查看Docker佔用分佈:ruby

$ 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可對空間進行自動清理。
該命令所清理的對象以下:網絡

已中止的容器
未被任何容器使用的卷
未被任何容器所關聯的網絡
全部懸空的鏡像spa

對於上面提到的一些鏡像或容器的狀態,須要咱們內心有點數:code

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

docker system prune後能夠加額外的參數,如:
docker system prune -a : 一併清除全部未被使用的鏡像和懸空鏡像。
docker system prune -f : 用以強制刪除,不提示信息。token

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

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

docker container prune:刪除無用的容器。
      --默認狀況下docker container prune命令會清理掉全部處於stopped狀態的容器 --若是不想那麼殘忍通通都刪掉,也可使用--filter標誌來篩選出不但願被清理掉的容器。例子:清除掉全部停掉的容器,但24內建立的除外: --$ docker container prune --filter "until=24h" docker volume prune:刪除無用的卷。 docker network prune:刪除無用的網絡 

手動清除

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


二、刪除全部未使用鏡像和懸空鏡像
docker rmi $(docker images -q)io


三、清理卷
若是卷佔用空間太高,能夠清除一些不使用的卷,包括一些未被任何容器調用的卷(-v 詳細信息中若顯示 LINKS = 0,則是未被調用):
刪除全部未被容器引用的卷:
docker volume rm $(docker volume ls -qf dangling=true)


四、容器清理
若是發現是容器佔用太高的空間,能夠手動刪除一些:
刪除全部已退出的容器:
docker rm -v $(docker ps -aq -f status=exited)
刪除全部狀態爲dead的容器
docker rm -v $(docker ps -aq -f status=dead)

相關文章
相關標籤/搜索