Docker images 命令(深入浅出)

Docker images 命令入门:从零开始掌握镜像管理

你有没有遇到过这样的场景?写完一个项目,本地运行得好好的,一放到服务器上就报错。或者团队里其他人跑你的代码总是失败?其实问题很可能出在“环境不一致”上。这时候,Docker 就像一个“标准化的集装箱”——不管你从哪来,只要装进这个集装箱,就能在任何地方正常运行。

而 Docker images 命令,就是你管理这些“集装箱”的核心工具。它能让你查看、搜索、删除、导出镜像,是日常开发中不可或缺的一环。今天,我们就来系统地拆解 Docker images 命令的用法,帮助你真正掌控镜像生命周期。


查看本地所有镜像:docker images

最基础也最常用的命令,就是查看当前机器上已有的镜像。运行以下命令:

docker images

执行后你会看到类似这样的输出:

REPOSITORY          TAG       IMAGE ID       CREATED         SIZE
nginx               latest    a39a3a3c8f4b   2 weeks ago     141MB
redis               6.2       4c62d910c103   3 weeks ago     108MB
ubuntu              20.04     1d622ef86b13   4 weeks ago     72.8MB
hello-world         latest    fce289e99eb2   11 months ago   1.84kB

这个表格中每一列都有明确含义:

  • REPOSITORY:镜像的名称,比如 nginxredis,代表镜像的用途。
  • TAG:标签,用来区分同一镜像的不同版本,如 latest 表示最新版,6.2 是 Redis 的特定版本。
  • IMAGE ID:镜像的唯一 ID,由 Docker 自动生成,用于唯一标识一个镜像。
  • CREATED:镜像创建时间,方便你判断是否需要更新。
  • SIZE:镜像大小,通常从几 MB 到几百 MB 不等。

💡 小贴士hello-world 是 Docker 官方提供的测试镜像,用来验证 Docker 是否安装成功。运行它时会输出“Hello from Docker!”,是初学者的入门第一课。


通过过滤条件精准查找镜像

当你系统里镜像越来越多,docker images 输出会变得杂乱。这时候,你可以用参数过滤,快速定位目标镜像。

例如,只查看某个特定镜像:

docker images nginx

这条命令会只列出所有 nginx 相关的镜像,比如 nginx:latestnginx:1.21 等。

再比如,查看所有未打标签的镜像(即悬空镜像,dangling images):

docker images --filter "dangling=true"

悬空镜像通常是构建过程中产生的中间层,不再被任何标签引用,占用磁盘空间。定期清理它们能释放空间。


你可能不知道某个镜像是否存在,或者想看看社区里有没有现成的镜像可用。这时 docker search 就派上用场了。

docker search nginx

输出结果包含:

  • 镜像名称(NAME)
  • 描述(DESCRIPTION)
  • 星级(STARS)——表示受欢迎程度
  • 是否官方(OFFICIAL)——官方镜像更安全可靠

例如:

NAME                   DESCRIPTION                                  STARS   OFFICIAL   AUTOMATED
nginx                  Official build of Nginx.                     16500   OK         2600
jwilder/nginx-proxy    Automated Nginx proxy for Docker contai...   2400    [OK]       1200

⚠️ 注意:搜索结果来自 Docker Hub 公共仓库,建议优先选择 OFFICIAL 标记的镜像,安全性和稳定性更有保障。


删除镜像:docker rmi

当你不再需要某个镜像时,可以使用 docker rmi 删除它,释放磁盘空间。

docker rmi nginx:latest

执行后,Docker 会删除名为 nginx:latest 的镜像。如果该镜像被某个容器使用,删除会失败。此时需要先删除相关容器。

你也可以批量删除多个镜像:

docker rmi nginx:latest redis:6.2

或者删除所有悬空镜像(推荐定期执行):

docker rmi $(docker images --filter "dangling=true" -q)

🧼 清理小技巧-q 参数只输出镜像 ID,配合 $(...) 可以将多个 ID 传给 rmi 命令,实现一键清理。


导出与导入镜像:docker save & docker load

在某些场景下,你可能需要把镜像从一台机器搬到另一台,比如开发机和服务器之间传输。这时可以使用 docker savedocker load

导出镜像

docker save -o nginx.tar nginx:latest

这条命令将 nginx:latest 镜像导出为一个名为 nginx.tar 的压缩文件。你可以把它拷贝到其他机器。

📦 比喻:就像把一个完整的软件包打包成 ZIP 文件,方便传输。

导入镜像

在目标机器上运行:

docker load -i nginx.tar

Docker 会从 nginx.tar 文件中读取镜像数据,并重新注册到本地镜像库中。

✅ 重要提示:导入的镜像名称和标签会保持原样,无需手动重命名。


查看镜像详细信息:docker inspect

有时候你不仅想知道镜像的“表面信息”,还想了解它的内部结构。docker inspect 就是为你准备的。

docker inspect nginx:latest

执行后会输出一大段 JSON 格式的数据,包含:

  • 镜像的创建者
  • 所有层(layer)的 ID
  • 默认启动命令(Entrypoint)
  • 环境变量设置
  • 网络配置
  • 挂载点信息

🔍 实用场景:当你遇到“容器启动失败”时,查看镜像的 EntrypointCmd 设置,就能快速定位问题。


为镜像打标签:docker tag

你可能已经注意到,有些镜像没有 TAG,或者你想让某个镜像更“易读”。这时可以用 docker tag 添加标签。

docker tag nginx:latest my-nginx:1.0

这条命令将 nginx:latest 镜像的标签改为 my-nginx:1.0。你可以在 Docker Hub 上推送这个镜像,便于团队共享。

📝 注意:docker tag 不会创建新镜像,只是给已有镜像添加一个别名。两个标签指向同一个镜像内容。


实际案例:构建并管理一个 Python Web 项目镜像

假设你有一个 Flask 项目,目录结构如下:

flask-app/
├── app.py
├── requirements.txt
└── Dockerfile

Dockerfile 内容如下:

FROM python:3.9-slim

WORKDIR /app

COPY requirements.txt .

RUN pip install -r requirements.txt

COPY . .

EXPOSE 5000

CMD ["python", "app.py"]

构建镜像:

docker build -t my-flask-app:1.0 .

查看构建后的镜像:

docker images | grep my-flask-app

输出:

my-flask-app   1.0    abc123def456   2 minutes ago   120MB

现在你可以运行这个镜像:

docker run -d -p 5000:5000 --name flask-server my-flask-app:1.0

访问 http://localhost:5000,你的 Flask 应用就跑起来了!


总结:Docker images 命令的核心价值

Docker images 命令不仅是查看镜像的工具,更是你构建、维护、分发应用的基础设施。掌握它,你就掌握了:

  • 如何管理本地镜像生命周期
  • 如何高效查找和筛选镜像
  • 如何在不同环境间迁移镜像
  • 如何排查镜像相关的问题

无论你是初学者还是中级开发者,这些命令都能让你的开发流程更稳定、更可复现。尤其是在团队协作中,一个清晰的镜像管理策略,能大幅降低“在我机器上能跑”的尴尬。

下次你写完代码,别忘了用 docker images 检查一下,你的镜像是否整洁、是否版本清晰。这不仅是技术习惯,更是专业素养的体现。