如何管理容器镜像:从拉取到清理的实用操作

刚接触 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 秒扫一眼,就能让开发环境清爽又可控。