centos7清理docker垃圾文件
相信很多朋友都有这个docker容器导致主机磁盘空间满了的问题,应用容器在宿主机上长期运行,应用实例启停容器,会产生大量的停止的容器,无容器使用的数据卷、网络配置,无容器依赖的镜像,这些垃圾日积月累,会影响到宿主机的运行状态,造成机子卡顿等现象。因此,需要对这些宿主机的垃圾进行清理.下面我们来看看怎么清理.
系统:centos 7.x(64位)
1.查看docker磁盘使用情况
docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 28 9 13.13GB 8.008GB (61%)
Containers 9 9 266.3MB 0B (0%)
Local Volumes 2 2 3.314GB 0B (0%)
Build Cache 0 0 0B 0B
此命令可以得知:
实例上一共有28个镜像,镜像占用了13.13G的磁盘,容器有9个在运行,占用了266.3MB的磁盘,可回收的(RECLAIMABLE)磁盘空间为61%.
2.清理磁盘空间
docker system prune命令可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及 dangling 镜像(即无 tag 的镜像,参考What are Docker <none>:<none> images?).docker system prune -a命令清理得更加彻底,可以将没有容器使用 Docker 镜像都删掉。注意,这两个命令会把你暂时关闭的容器,以及暂时没有用到的 Docker 镜像都删掉了...所以使用之前一定要想清楚
docker system prune
ps:
可以看到罗列出4种会被prune的对象以及其他信息,包括:
1)stopped containers, 不是运行状态的container
2)unused volumes,不被任何container引用的volume,所谓dangling volume,一般删除了某个container后,可能会产生这样的volume,可以通过docker rm -v避免这种dangling volume
3)unused network,不被任何container引用的network
4)dangling images,不被任何container引用的image
5)每个被删除的对象都能看到它的ID,比如container ID、volume ID
6)最后有个释放空间大小的summary
3.清理docker镜像
当你镜像太多的时候,但你又不知道那些镜像在用,那些没在用的时候,可以使用下面的命令来处理:
docker rmi $(docker images -qf "dangling=true")
当然这里还提供一个这样的命令,只清除超过创建时间超过24小时的镜像:
docker image prune -a --filter "until=24h"
4.清理Docker容器日志
ls -lh $(find /var/lib/docker/containers/ -name *-json.log)
找到最大的那个日志,然后执行:
cat /dev/null >json.log
or
把所有的容器日志都清理掉:
cat /dev/null > *-json.log
ps:
删除所有容器
docker rm -f $(sudo docker ps -qa)
删除所有关闭的容器
docker ps -a | grep Exit | cut -d ' ' -f 1 | xargs docker rm
删除所有dangling数据卷(即无用的Volume)
docker volume rm $(docker volume ls -qf dangling=true)
再次显示所有的容器和数据卷,确保没有残留
docker ps -a
docker volume ls
好了,以上介绍的命令请大家根据自己的情况去进行执行,最后提醒一句,执行前先确认清楚那些是可以删 可以停的,不然到时候搞出问题来的话,别来找我.
系统:centos 7.x(64位)
1.查看docker磁盘使用情况
docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 28 9 13.13GB 8.008GB (61%)
Containers 9 9 266.3MB 0B (0%)
Local Volumes 2 2 3.314GB 0B (0%)
Build Cache 0 0 0B 0B
此命令可以得知:
实例上一共有28个镜像,镜像占用了13.13G的磁盘,容器有9个在运行,占用了266.3MB的磁盘,可回收的(RECLAIMABLE)磁盘空间为61%.
2.清理磁盘空间
docker system prune命令可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及 dangling 镜像(即无 tag 的镜像,参考What are Docker <none>:<none> images?).docker system prune -a命令清理得更加彻底,可以将没有容器使用 Docker 镜像都删掉。注意,这两个命令会把你暂时关闭的容器,以及暂时没有用到的 Docker 镜像都删掉了...所以使用之前一定要想清楚
docker system prune
ps:
可以看到罗列出4种会被prune的对象以及其他信息,包括:
1)stopped containers, 不是运行状态的container
2)unused volumes,不被任何container引用的volume,所谓dangling volume,一般删除了某个container后,可能会产生这样的volume,可以通过docker rm -v避免这种dangling volume
3)unused network,不被任何container引用的network
4)dangling images,不被任何container引用的image
5)每个被删除的对象都能看到它的ID,比如container ID、volume ID
6)最后有个释放空间大小的summary
3.清理docker镜像
当你镜像太多的时候,但你又不知道那些镜像在用,那些没在用的时候,可以使用下面的命令来处理:
docker rmi $(docker images -qf "dangling=true")
当然这里还提供一个这样的命令,只清除超过创建时间超过24小时的镜像:
docker image prune -a --filter "until=24h"
4.清理Docker容器日志
ls -lh $(find /var/lib/docker/containers/ -name *-json.log)
找到最大的那个日志,然后执行:
cat /dev/null >json.log
or
把所有的容器日志都清理掉:
cat /dev/null > *-json.log
ps:
删除所有容器
docker rm -f $(sudo docker ps -qa)
删除所有关闭的容器
docker ps -a | grep Exit | cut -d ' ' -f 1 | xargs docker rm
删除所有dangling数据卷(即无用的Volume)
docker volume rm $(docker volume ls -qf dangling=true)
再次显示所有的容器和数据卷,确保没有残留
docker ps -a
docker volume ls
好了,以上介绍的命令请大家根据自己的情况去进行执行,最后提醒一句,执行前先确认清楚那些是可以删 可以停的,不然到时候搞出问题来的话,别来找我.
评论: