docker images 是什么
docker images 列出本地镜像及其标签、镜像标识、创建时间与体积。它是排查本地镜像状态的第一步:确认要用的版本在不在、有没有一堆无标签的悬空层、同一个镜像被打了哪些标签,都靠这张表。
基本信息
| 语法 | docker images [选项] [仓库[:标签]] |
|---|---|
| 等价写法 | docker image ls,两者输出与选项一致 |
| 常用选项 | -a 含中间层 -q 只输出标识 --digests 显示摘要 --no-trunc 不截断列 |
| 过滤 | --filter 支持按悬空状态、仓库引用、时间先后等条件筛选 |
| 格式化 | --format 用模板控制列,脚本取值优先用它 |
典型使用场景
- 部署前确认:要用的版本标签在不在本地,是不是被新构建覆盖过
- 清理悬空层:找出无标签的中间产物,判断能否回收
- 盘点仓库引用:同一个镜像打了哪些标签,推送前核对命名是否同步
- 校验镜像摘要:核对本地镜像与远端仓库的摘要是否一致,确认拉取完整
- 比较创建时间:确认线上跑的是最新构建还是历史版本
常用示例
常用示例
docker images # 列出全部本地镜像
docker images app/web # 只看某个仓库
docker images --filter dangling=true # 找出无标签的悬空镜像
docker images --filter 'reference=app/web:*' # 按标签通配筛选
docker images --format '{{.Repository}}:{{.Tag}} {{.ID}}' # 自定义列输出逐列读法
| 列 | 含义 | 怎么用 |
|---|---|---|
| 仓库 | 镜像所属的仓库路径 | 出现无标签占位符说明是悬空层或中间层 |
| 标签 | 同一个镜像的引用名 | 多个标签指向同一标识说明是同一份数据 |
| 镜像标识 | 内容寻址的标识短码 | 同标识即同一镜像,删除时注意引用关系 |
| 创建时间 | 镜像构建时间 | 用它判断本地版本新旧,避免部署旧构建 |
| 体积 | 各层合计的展示值 | 共享基础层会让这个数字偏高,磁盘实际占用要看总览命令 |
看结果时容易走偏的地方
- 无标签不等于没内容:悬空层往往是重建同名标签后失去引用的上一版顶层镜像
- 同一个标识出现多行不是重复,那是同一镜像的多个标签,删除时按标签或按标识操作结果不同
- 体积列相加会高估占用,工程上以磁盘总览命令的数字为准
- 只看到本地列表不代表远端仓库存在该标签,推送状态要另查
- 中间层默认不显示,需要列出全部对象才能看到构建过程中的临时层
输出里的无标签条目多为悬空镜像,处理时优先用清理悬空镜像的命令,而不是照着标识手工删,避免误删仍被引用的层。
脚本里取值优先用模板或只输出标识的选项,表格列宽会随内容变化导致按位置截取失效。
标签管理的建议
- 发布用不可变的版本标签,latest 这类浮动标签只作为方便最新版本使用的别名
- 同一镜像多标签共享数据,不会明显增加占用,但删除时要留意引用关系
- 推送私有仓库前把本地短名换成含仓库地址的完整名称,避免误推到公共仓库
- 定期核对仓库里的标签数量,历史版本按保留策略清理,减少误用旧版本的可能
- 跨环境部署时用摘要锁定,标签会被覆盖,摘要不会
和构建、部署的衔接
- 构建完成后核对标签是否符合约定,再推送到仓库
- 部署前确认本地或仓库里确有目标版本,避免落到浮动标签指向的旧构建
- 回滚依赖历史版本仍在仓库中,本地清理不要影响仓库里的发布版本
- 镜像改名要同步更新编排与脚本里的引用,否则部署时会报找不到镜像
- 多环境共用仓库时用命名空间隔离,避免测试构建覆盖生产标签