刚接触 Docker 的朋友常会遇到一个问题:镜像越下越多,硬盘悄悄变红,连 docker images 都要卡两秒——这其实不是电脑慢了,是镜像没管好。
一、看清手头有哪些镜像
先别急着删,打开终端敲一行:
docker images
你会看到类似这样的列表:
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 605c77e624dd 2 weeks ago 141MB
ubuntu 22.04 54c9d81cbbf3 3 weeks ago 77.8MB
<none> <none> a1b2c3d4e5f6 2 months ago 456MB
注意最后一行的 <none>:这是构建失败或覆盖后留下的“悬空镜像”,占空间又没用,后面重点清它。
二、删掉不用的镜像
想删某个镜像,直接用镜像 ID 或“仓库名:标签”:
docker rmi nginx:latest
如果提示“被容器引用”,说明有正在运行或已停止的容器还依赖它。先查容器:
docker ps -a | grep nginx
停掉并删掉相关容器,再删镜像就顺利了。
批量清理悬空镜像(就是那些 <none>)更省事:
docker image prune
加个 -a 参数还能顺手干掉所有未被容器使用的镜像(谨慎!确认没漏掉要保留的):
docker image prune -a
三、给镜像起个靠谱的名字
自己构建镜像时,别只写 docker build .,随手打个标签,以后好认:
docker build -t myapp:v1.2 .
这样下次更新版本,直接 myapp:v1.3,比记一长串 ID 强多了。本地测试完想推到远程仓库?带上命名空间一起推:
docker tag myapp:v1.2 registry.example.com/team/myapp:v1.2
docker push registry.example.com/team/myapp:v1.2
四、日常小习惯,省心又省空间
- 拉镜像时尽量指定明确标签,比如
redis:7.2-alpine,别图省事用latest——今天拉的是 7.2,明天可能就变成 8.0,环境悄悄变了还不知道; - 定期跑一次
docker system df,看看镜像、容器、卷各占多少空间; - CI/CD 流水线里构建完立刻推远程,本地不留中间镜像,加个
--rm参数:
docker build --rm -t myapp:ci .
镜像不是文件夹,不能靠“右键删除”;但它也没那么玄乎——摸清几个常用命令,每天花 30 秒扫一眼,就能让开发环境清爽又可控。