Docker 镜像信息管理
1. 查看本地镜像列表
docker images
示例输出:
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 20.04 d13c942271d6 2 weeks ago 72.9MB
nginx latest 2bdc49f2f8d1 3 weeks ago 133MB
常用参数:
-a, --all
:显示所有镜像(包括中间层)-q, --quiet
:仅显示镜像 ID--no-trunc
:显示完整镜像 ID
2. 查看镜像详细信息
docker inspect <镜像名或镜像ID>
示例:
docker inspect ubuntu:20.04
3. 查看镜像历史记录
docker history <镜像名或镜像ID>
4. 查看镜像标签(tag)
docker image ls --filter=reference='<镜像名>*'
示例:
docker image ls --filter=reference='ubuntu*'
5. 查询远程仓库中的镜像
docker search <镜像名>
示例:
docker search nginx
6. 查看镜像分层信息
docker image inspect --format='{{.RootFS.Layers}}' <镜像名或镜像ID>
7. 查看镜像构建历史(Dockerfile)
docker image history --no-trunc <镜像名或镜像ID>
8. 镜像过滤查询用法
-
按名称过滤:
docker images --filter=reference='*nginx*'
-
按时间过滤:
docker images --filter "before=ubuntu:20.04"
docker images --filter "since=ubuntu:20.04" -
按标签过滤:
docker images --filter "label=maintainer=john"
-
显示悬空(dangling)镜像:
docker images -f "dangling=true"
9. 格式化输出镜像信息
-
自定义格式:
docker images --format "{{.ID}}: {{.Repository}}"
-
表格形式展示:
docker images --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"
10. 查看镜像及容器空间占用
docker system df -v
11. 实用技巧与清理命令
-
获取完整镜像 ID:
docker images --no-trunc
-
grep 结合使用:
docker images | grep ubuntu
-
删除所有悬空镜像:
docker image prune
-
删除所有未使用镜像:
docker image prune -a
12. 镜像导出与导入
12.1 导出镜像
-
导出镜像为 tar 文件:
docker save -o ubuntu.tar ubuntu:20.04
-
导出多个镜像
docker save -o multiple_images.tar <镜像1> <镜像2>
-
导出为压缩文件(推荐):
-
导出并 gzip 压缩:
docker save ubuntu:20.04 | gzip > ubuntu.tar.gz
-
导出并 xz 压缩(压缩率更高):
docker save ubuntu:20.04 | xz -9 > ubuntu.tar.xz
-
12.2 导入镜像
-
导入镜像到本地:
docker load -i ubuntu.tar/ubuntu.tar.gz/ubuntu.tar.xz
-
从文件或标准输入导入:
docker load < ubuntu.tar/ubuntu.tar.gz/ubuntu.tar.xz
13. 容器导出和导入(快照)
-
导出容器文件系统:
docker export -o mycontainer.tar <容器ID或容器名>
-
导出并压缩:
docker export <容器ID或容器名> | gzip > mycontainer.tar.gz
-
导入为镜像:
cat mycontainer.tar | docker import - ubuntu:custom
或:
gunzip -c mycontainer.tar.gz | docker import - ubuntu:custom
✅ 推荐在镜像分发或备份中使用压缩格式(
.tar.gz
,.tar.xz
)以减少存储和传输成本。
14. OCI 镜像结构分析
Docker 镜像符合 OCI 镜像规范,其 tar 包结构如下(通过 docker save
导出后可查看):
ubuntu.tar/
├── manifest.json
├── repositories
├── <layer_id>/layer.tar
├── <layer_id>/VERSION
├── <layer_id>/json
└── ...
manifest.json
:描述镜像层顺序、配置文件等信息repositories
:记录镜像名和标签<layer_id>/layer.tar
:每一层的文件系统内容<layer_id>/json
:该层的元数据(创建命令、环境变量等)<layer_id>/VERSION
:版本标记(一般是"1.0")
OCI 镜像结构核心概念:
- 多层叠加:每个 layer 是只读的增量文件系统,按顺序叠加构成完整镜像
- 镜像配置(config)与 manifest 分离,利于复用与缓存
- 与 Docker 兼容:Docker 默认使用 OCI 格式存储镜像(从 1.10 起)
查看具体结构可使用以下命令:
tar -tvf ubuntu.tar
解压后逐层分析:
mkdir ubuntu-img && tar -xf ubuntu.tar -C ubuntu-img
cat ubuntu-img/manifest.json | jq .