docker - 如何清理硬盤中無關占用


背景

在使用docker進行容器化管理后會發現本次硬盤文件占用量在不斷上升,並且即使是刪除掉容器或者鏡像也並不能釋放掉對應的硬盤空間。本文將提供對應的docker命令用於真正釋放掉該部分應被刪除釋放的空間卻仍然存留占用硬盤空間的相關垃圾文件。

查詢命令

docker system df

docker空間占用查看,該命令可以列出docker應用中鏡像,容器,數據卷所占用的容量,在此說明下即使是容器被刪除了數據卷也不會隨着容器的刪除而刪除。

[root@root ~]# docker system df
TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              5                   1                   1.512 GB            1.386 GB (91%)
Containers          1                   0                   5 kB                5 kB (100%)
Local Volumes       0                   0                   0 B                 0 B

增加-v命令可以輸出更加詳細的占用信息,針對每個鏡像,每個容器,每個數據卷信息都將被輸出。用戶可以根據該命令來判斷是哪個鏡像、容器、數據卷導致的占用過高

docker system df -v
Images space usage:

REPOSITORY                        TAG                 IMAGE ID            CREATED             SIZE                SHARED SIZE         UNIQUE SIZE         CONTAINERS
docker.io/nginx                   latest              5ad3bd0e67a9        7 days ago          126.7 MB            0 B                 126.7 MB            1
docker.io/jenkins/jenkins         latest              5810ec636c04        5 weeks ago         581.9 MB            0 B                 581.9 MB            0
docker.io/ubuntu                  14.04               6e4f1fe62ff1        5 weeks ago         196.5 MB            0 B                 196.5 MB            0
docker.io/mysql                   5.6                 e143ed325782        2 months ago        302.4 MB            0 B                 302.4 MB            0
docker.io/adoptopenjdk/openjdk8   latest              48f5ba11c251        4 months ago        304.8 MB            0 B                 304.8 MB            0

Containers space usage:

CONTAINER ID        IMAGE               COMMAND                  LOCAL VOLUMES       SIZE                CREATED             STATUS                    NAMES
39cc6235b753        docker.io/nginx     "nginx -g 'daemon ..."   0                   5 kB                28 hours ago        Exited (0) 26 hours ago   xxxx

Local Volumes space usage:

VOLUME NAME         LINKS               SIZE

清除命令

自動清理命令

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

  1. 已停止的容器(未啟動的容器)
  2. 未被任何容器使用的卷
  3. 未被任何容器所關聯的網絡
  4. 所有懸空的鏡像(未配置任何Tag(也就是無法被引用)的鏡像,通常是由於鏡像編譯過程中未指定-t參數配置Tag導致的,又或者是在鏡像編譯過程中因為某種原因導致構建失敗的鏡像)

docker system prune后可以加額外的參數,如:

  1. docker system prune -a : 一並清除所有未被使用的鏡像(未被構建成容器容器的鏡像)和懸空鏡像。
  2. docker system prune -f : 用以強制刪除,不提示信息。

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

  1. docker image prune:刪除懸空的鏡像。
  2. docker container prune:刪除無用的容器。
    --默認情況下docker container prune命令會清理掉所有處於stopped狀態的容器
    --如果不想那么殘忍統統都刪掉,也可以使用--filter標志來篩選出不希望被清理掉的容器。例子:清除掉所有停掉的容器,但24內創建的除外:
    --$ docker container prune --filter "until=24h"
  3. docker volume prune:刪除無用的卷。
  4. 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)
  5. 刪除所有狀態為dead的容器
    docker rm -v $(docker ps -aq -f status=dead)


免責聲明!

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



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