Files
docker_practice/04_image/list.md

6.1 KiB
Raw Blame History

列出镜像

基本用法

查看本地已下载的镜像:

$ docker image ls
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
redis        latest    5f515359c7f8   5 days ago     183MB
nginx        latest    05a60462f8ba   5 days ago     181MB
ubuntu       24.04     329ed837d508   3 days ago     78MB
ubuntu       noble     329ed837d508   3 days ago     78MB

💡 docker imagesdocker image ls 的简写,两者等效。


输出字段说明

字段 说明
REPOSITORY 仓库名
TAG 标签(版本)
IMAGE ID 镜像唯一标识(短 ID前 12 位)
CREATED 创建时间
SIZE 本地占用空间

同一镜像多个标签

注意上面的 ubuntu:24.04ubuntu:noble 拥有相同的 IMAGE ID——它们是同一个镜像的不同标签只占用一份存储空间。


理解镜像大小

本地大小 vs Hub 显示大小

位置 显示大小 说明
Docker Hub 29MB 压缩后的网络传输大小
docker image ls 78MB 本地解压后的实际大小

实际磁盘占用

由于镜像是分层存储,不同镜像可能共享相同的层:

ubuntu:24.04    nginx:latest    redis:latest
    │               │                │
    └───────┬───────┘                │
            ▼                        │
       共享基础层 ◄───────────────────┘

因此,docker image ls 中各镜像大小之和 > 实际磁盘占用。

查看实际空间占用

$ docker system df
TYPE            TOTAL   ACTIVE   SIZE      RECLAIMABLE
Images          15      3        2.5GB     1.8GB (72%)
Containers      5       2        100MB     80MB (80%)
Local Volumes   8       2        500MB     400MB (80%)
Build Cache     0       0        0B        0B

过滤镜像

按仓库名过滤

# 列出所有 ubuntu 镜像
$ docker images ubuntu
REPOSITORY   TAG     IMAGE ID       SIZE
ubuntu       24.04   329ed837d508   78MB
ubuntu       noble   329ed837d508   78MB
ubuntu       22.04   a1b2c3d4e5f6   72MB

按仓库名和标签过滤

$ docker images ubuntu:24.04
REPOSITORY   TAG     IMAGE ID       SIZE
ubuntu       24.04   329ed837d508   78MB

使用过滤器 --filter

过滤条件 说明 示例
dangling=true 虚悬镜像 -f dangling=true
before=镜像 在某镜像之前创建 -f before=nginx:latest
since=镜像 在某镜像之后创建 -f since=nginx:latest
label=key=value 按 LABEL 过滤 -f label=version=1.0
reference=pattern 按名称模式 -f reference='*:latest'
# 列出 nginx 之后创建的镜像
$ docker images -f since=nginx:latest

# 列出所有带 latest 标签的镜像
$ docker images -f reference='*:latest'

# 列出带特定 LABEL 的镜像
$ docker images -f label=maintainer=example@email.com

虚悬镜像Dangling Images

什么是虚悬镜像

仓库名和标签都显示为 <none> 的镜像:

$ docker images
REPOSITORY   TAG       IMAGE ID       SIZE
<none>       <none>    00285df0df87   342MB

产生原因

  1. 镜像重新构建:新镜像使用了旧镜像的标签,旧镜像标签被移除
  2. docker pull 更新:拉取更新版本时,旧版本失去标签

处理虚悬镜像

# 列出虚悬镜像
$ docker images -f dangling=true

# 删除虚悬镜像
$ docker image prune

中间层镜像

查看所有镜像(包含中间层)

$ docker images -a

会显示很多无标签镜像——这些是构建过程中产生的中间层,被其他镜像依赖。

⚠️ 不要删除中间层镜像。它们是其他镜像的依赖,删除会导致上层镜像无法使用。删除顶层镜像时会自动清理不再需要的中间层。


格式化输出

只输出 ID

$ docker images -q
5f515359c7f8
05a60462f8ba
329ed837d508

常用于配合其他命令:

# 删除所有镜像
$ docker rmi $(docker images -q)

# 删除所有 redis 镜像
$ docker rmi $(docker images -q redis)

显示完整 ID

$ docker images --no-trunc

显示摘要

$ docker images --digests
REPOSITORY   TAG     DIGEST                    IMAGE ID
nginx        latest  sha256:b4f0e0bdeb5...    e43d811ce2f4

自定义格式

使用 Go 模板语法自定义输出:

# 只显示 ID 和仓库名
$ docker images --format "{{.ID}}: {{.Repository}}"
5f515359c7f8: redis
05a60462f8ba: nginx
329ed837d508: ubuntu

# 表格形式(带标题)
$ docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}"
REPOSITORY   TAG       SIZE
redis        latest    183MB
nginx        latest    181MB
ubuntu       24.04     78MB

可用模板字段

字段 说明
.ID 镜像 ID
.Repository 仓库名
.Tag 标签
.Digest 摘要
.CreatedSince 创建后经过的时间
.CreatedAt 创建时间
.Size 大小

常用命令组合

# 列出所有镜像及其大小,按大小排序(需要系统 sort 命令)
$ docker images --format "{{.Size}}\t{{.Repository}}:{{.Tag}}" | sort -h

# 查找大于 500MB 的镜像
$ docker images --format "{{.Size}}\t{{.Repository}}:{{.Tag}}" | grep -E "^[0-9]+GB|^[5-9][0-9]{2}MB"

# 导出镜像列表
$ docker images --format "{{.Repository}}:{{.Tag}}" > images.txt

本章小结

操作 命令
列出所有镜像 docker images
按仓库名过滤 docker images nginx
列出虚悬镜像 docker images -f dangling=true
只输出 ID docker images -q
显示摘要 docker images --digests
自定义格式 docker images --format "..."
查看空间占用 docker system df

延伸阅读