Docker用戶會在使用docker一段時間後發現宿主機的磁盤很容易就快被佔滿,而且手動docker rmi [imgName]
彷佛並不能釋放磁盤,貌似想刪掉的鏡像依然在宿主機中,下面針對這一問題提出一些解決方案。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 命令能夠進一步查看空間佔用細節,以肯定是哪一個鏡像、容器或本地卷佔用太高空間
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)