Docker清理悬空镜像
Docker清理悬空镜像
引言
反复build镜像后,旧的无标签镜像(
先看占用
docker system df
查看镜像、容器、卷、构建缓存各占多少,先摸清再动手。
什么是悬空镜像
build出新标签后,旧层变成
只清悬空镜像(安全)
docker image prune
只删除无标签无引用的dangling镜像,已打标签和在用镜像不动,最稳妥。
清停止的容器
docker container prune
删掉所有已退出的容器,正在运行的不受影响。
清无用镜像和构建缓存(更彻底)
docker system prune
一次清悬空镜像、停止容器、无用网络和构建缓存,加-a连未被容器使用的镜像也删,加--volumes连未使用卷一起删:
docker system prune -a --volumes
手动删单个镜像
docker image rm 镜像ID
若提示被容器引用,先确认容器用途,别直接强制删。
注意事项
- 生产慎用-a和--volumes,卷里可能存数据库数据,删了不可恢复;
- 先docker system df看占用,再决定清哪一类;
- 清理前确认没有需要保留的停止容器和备份卷;
- 镜像仓库里还能重新拉取的镜像才适合-a全清;
- 定期配合定时任务清理,避免磁盘缓慢耗尽。
总结
日常用docker image prune清悬空镜像最安全,docker system prune清停止容器和缓存,-a和--volumes只在确认无保留价值时用。先df看占用、分级清理,避免误删业务卷和在用镜像。
Docker删除所有停止的容器,一键清理
前言
用Docker久了,一堆停止的容器占磁盘,一个个删太麻烦。本文讲怎么一键清理。
一、查看所有停止的容器
先看看有多少个停止的容器:
docker ps -a
看STATUS列,显示Exited的就是停止的。
只看停止的:
docker ps -a -f status=exited
二、删除所有停止的容器
一键清理
docker container prune
输出:
Total reclaimed space: 1.2GB
直接删掉所有停止的容器。
确认提示
默认会问你:
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N]
输入y确认。
跳过确认
docker container prune -f
加个 -f 直接删,不问。
三、其他清理命令
删除所有没用的镜像
docker image prune
只删悬空镜像(dangling images),就是没有标签的。
删所有没用的镜像(包括没在用的)
docker image prune -a
清理所有没用的东西
docker system prune
包括:
- 停止的容器
- 没用的网络
- 悬空镜像
- 构建缓存
清理所有没用的东西(包括镜像)
docker system prune -a
连没在用的镜像也删了。
清理数据卷
docker volume prune
注意: 这个会删没用的数据卷,里面的数据也没了!
四、手动删除单个容器
如果只想删某一个:
docker rm 容器ID或名字
强制删除运行中的容器:
docker rm -f 容器ID或名字
五、批量删除停止的容器
方法1:用docker rm
docker rm $(docker ps -a -q -f status=exited)
解释:
docker ps -a -q列出所有容器ID-f status=exited只筛停止的docker rm删掉
方法2:用docker container prune
docker container prune -f
推荐用这个,简单。
六、查看磁盘占用
清理之前看看占了多少:
docker system df
输出:
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 20 5 10GB 7GB (70%)
Containers 15 5 500MB 400MB (80%)
Local Volumes 8 3 2GB 1GB (50%)
Build Cache - - 1GB 800MB
看RECLAIMABLE列,就是可以回收的。
七、常见场景
场景1:测试完一堆容器,想全清了
docker container prune -f
场景2:磁盘满了,全面清理
docker system prune -a -f --volumes
-a删所有没用的镜像-f不问--volumes连数据卷也删
注意: 这个很猛,数据卷也删了,重要数据先备份!
场景3:只清理镜像,不动容器
docker image prune -a -f
八、常见坑
坑1:删了数据卷,数据没了
docker system prune --volumes
加了 --volumes 会删没用的数据卷。
注意: 数据库的数据卷别删!
坑2:删了镜像,重新拉要很久
docker image prune -a
把所有没在用的镜像都删了,下次用还要重新拉。
建议: 常用镜像留着,别全删。
坑3:误删了运行中的容器?
docker container prune 只删停止的,运行中的删不了。
放心,安全。
坑4:删了容器,数据卷还在
docker rm 容器名
只删容器,数据卷还在。
想连数据卷一起删:
docker rm -v 容器名
九、定期清理脚本
写个脚本,定期清理:
#!/bin/bash
# 清理停止的容器
docker container prune -f
# 清理悬空镜像
docker image prune -f
# 清理没用的网络
docker network prune -f
加到crontab,每周跑一次:
0 3 * * 0 /home/clean-docker.sh
总结
记住:
docker container prune删所有停止的容器docker image prune -a删所有没用的镜像docker system prune全面清理- 删数据卷要小心,别把数据库删了
最常用:
docker container prune -f
遇到问题加QQ23979811 协助处理