清理Docker占用的磁盘空间

436 阅读2分钟

清理磁盘空间

docker system df:查看Docker的磁盘使用情况

[root@iZwz9f1ba8y91wed647jhlZ ~]# docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          9         7         1.863GB   248.9MB (13%)
Containers      35        0         411.2MB   411.2MB (100%)
Local Volumes   1         1         0B        0B
Build Cache     0         0         0B        0B

Docker镜像占用了1.863GB磁盘,Docker容器占用了411.2MB磁盘,Docker数据卷占用了0B磁盘。\

docker system prune命令可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)。
docker system prune -a命令清理得更加彻底,可以将没有容器使用Docker镜像都删掉。注意,这两个命令会把你暂时关闭的容器,以及暂时没有用到的Docker镜像都删掉了……所以使用之前一定要想清楚吶。

[root@iZwz9f1ba8y91wed647jhlZ ~]# docker system prune
WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all dangling images
  - all dangling build cache

Are you sure you want to continue? [y/N] y
Deleted Containers:
816ad463220933d62d274f60fb115a589bedfb7ce01f3a76f1c73fe1ada45b9a

... ...

7544f57d3a0dbbfb14219ce33e3705c6b01e7a47f412d9dbc5f478a55a01b329

Total reclaimed space: 411.2MB
[root@iZwz9f1ba8y91wed647jhlZ ~]# docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          9         0         1.863GB   1.863GB (100%)
Containers      0         0         0B        0B
Local Volumes   1         0         0B        0B
Build Cache     0         0         0B        0B

手动清理Docker镜像/容器/数据卷

删除所有关闭的容器

docker ps -a | grep Exit | cut -d ' ' -f 1 | xargs docker rm

删除所有dangling镜像(即无tag的镜像)

docker rmi $(docker images | grep "^<none>" | awk "{print $3}")

删除所有dangling数据卷(即无用的Volume)

docker volume rm $(docker volume ls -qf dangling=true)

容器的日志

在Ubuntu上,Docker的所有相关文件,包括镜像、容器等都保存在 /var/lib/docker/ 目录中
du -hs查看当前目录下各个文件及目录占用空间大小

[root@iZwz9f1ba8y91wed647jhlZ ~]# du -hs /var/lib/docker/
2.1G	/var/lib/docker/
占用2.1G磁盘

[root@iZwz9f1ba8y91wed647jhlZ ~]# du /var/lib/docker/  | sort -nr
125452	/var/lib/docker/
125040	/var/lib/docker/swarm
125000	/var/lib/docker/swarm/raft/wal-v3-encrypted
125000	/var/lib/docker/swarm/raft
236	/var/lib/docker/image/overlay2
236	/var/lib/docker/image
... ...

92G  /var/lib/docker/containers/a376aa694b22ee497f6fc9f7d15d943de91c853284f8f105ff5ad6c7


筛选出大小为MB和GB级别的目录和文件,并降序排序
du -sh /var/lib/docker/ | grep [M] | sort -nr

使用truncate命令,可以将Nginx容器的日志文件“清零”

truncate -s 0 /var/lib/docker/containers/a376aa694b22ee497f6fc9f7d15d943de91c853284f8f105ff5ad6c7ddae7a53/*-jso

还可以在配置文件限制Nginx容器的日志文件大小

docker批量清除命令

删除所有镜像

[root@iZwz9f1ba8y91wed647jhlZ ~]# docker rmi $(docker images -q)
Untagged: ubuntu-with-vim-dockerfile:latest
Deleted: sha256:fa1a9007bfcb71cce60ac54bb11d2dce69235cac904abb4067f88584317db606

... ...

Deleted: sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef

[root@iZwz9f1ba8y91wed647jhlZ ~]# docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          0         0         0B        0B
Containers      0         0         0B        0B
Local Volumes   1         0         0B        0B
Build Cache     0         0         0B        0B

杀死所有正在运行的容器

docker kill $(docker ps -a -q)

删除所有已经停止的容器

docker rm $(docker ps -a -q)