一、前言
Docker 镜像(Image)是容器的模板,是 Docker 生态的核心基础。所有容器的创建、运行、迁移、部署都依赖镜像,熟练掌握镜像管理命令是后端与运维的必备技能。
本文整理全网最全的 Docker 镜像管理命令,包含:镜像查询、搜索、拉取、构建、打标签、打包迁移、删除、批量清理等实战场景,零基础可直接上手。
二、镜像基础查询命令
2.1 查看本地所有镜像
日常最常用的镜像查看命令,展示本地已下载的顶层镜像信息。
# 基础查看本地镜像(常用)dockerimages# 完整语法dockerimages[OPTIONS][仓库名:标签]# 查看所有镜像(包含中间层镜像、悬空镜像)dockerimages-a# 只显示镜像ID(批量操作必备)dockerimages-aq字段说明:
- REPOSITORY:镜像仓库名称
- TAG:镜像版本标签(latest 为最新版)
- IMAGE ID:镜像唯一ID
- CREATED:镜像创建时间
- SIZE:镜像占用磁盘大小
2.2 格式化输出镜像信息
默认展示字段冗余,通过格式化命令精简输出结果,适配脚本统计场景。
# 表格形式展示镜像ID、仓库、标签、大小dockerimages--format"table {{.ID}}\t{{.Repository}}\t{{.Tag}}\t{{.Size}}"# 只输出镜像名称和标签(无表格表头)dockerimages--format"{{.Repository}}:{{.Tag}}"2.3 搜索远程镜像
直接在 Docker 官方仓库搜索所需镜像,无需打开网页。
# 搜索指定镜像(以nginx为例)dockersearch nginx# 限制搜索结果数量(只展示前5条)dockersearch--limit5ubuntu# 只展示官方认证镜像dockersearch--filter"is-official=true"mysql三、镜像拉取与版本管理
3.1 拉取远程镜像
从 Docker Hub 拉取镜像到本地,不指定标签默认拉取 latest 最新版本。
# 拉取最新版nginxdockerpull nginx# 拉取指定版本镜像(推荐固定版本,避免环境不一致)dockerpull nginx:1.24.0# 拉取阿里云/私有仓库镜像(示例)dockerpull registry.aliyuncs.com/nginx_official/nginx:1.24.03.2 镜像打标签(重命名)
常用于镜像私有化部署、仓库迁移,给原有镜像新增别名标签。
# 语法:docker tag 原镜像:原标签 新镜像名:新标签dockertag nginx:1.24.0 my-nginx:v1.0# 打私有仓库标签(用于推送私有仓库)dockertag nginx:1.24.0192.168.1.100:8080/nginx/nginx:1.24.0💡 注意:打标签不会生成新镜像,只是给原镜像新增一个标识,镜像ID保持不变。
四、镜像构建(Dockerfile打包)
基于 Dockerfile 自定义构建镜像,是项目容器化核心操作。
# 基础构建(当前目录Dockerfile)dockerbuild-tmy-web:v1.0.# 不使用缓存构建(解决缓存导致的更新不生效问题)dockerbuild --no-cache-tmy-web:v1.0.# 指定Dockerfile文件构建(非默认文件名)dockerbuild-fDockerfile-prod-tmy-web:prod.参数说明:
- -t:指定镜像名称和版本标签
- .:指定构建上下文目录(当前目录)
- –no-cache:禁用构建缓存,全新构建
五、镜像打包与跨机器迁移(核心实战)
日常运维高频场景:本地自定义镜像无法从远程拉取,需通过 save/load 打包迁移到其他服务器。
5.1 打包本地镜像(save)
# 基础打包:将镜像打包为tar文件dockersave nginx:1.24.0-onginx-1.24.0.tar# 同时打包多个镜像dockersave-omulti-images.tar nginx:1.24.0 mysql:8.0 redis:7.05.2 加载镜像文件(load)
在目标服务器加载打包好的镜像文件,恢复镜像。
# 加载tar镜像文件dockerload-inginx-1.24.0.tar✅ 优势:保留镜像所有配置、版本、层级,迁移后可直接运行容器,零环境差异。
六、镜像删除与磁盘清理
长期使用Docker会产生大量冗余镜像、悬空镜像,占用磁盘空间,需定期清理。
6.1 删除指定镜像
# 基础删除镜像(镜像无容器依赖时使用)dockerrmi nginx:1.24.0# 强制删除镜像(存在容器依赖也可删除)dockerrmi-fnginx:1.24.0# 通过镜像ID删除dockerrmi-f镜像ID💡 重点:如果镜像有多个标签,删除单个标签仅移除别名,不会删除镜像本体。
6.2 清理悬空镜像(无用残留镜像)
悬空镜像(dangling image):无标签、无容器引用的残留镜像,纯垃圾文件。
# 清理所有悬空镜像dockerimage prune# 强制清理(无需手动确认)dockerimage prune-f6.3 批量清理所有未使用镜像
一键清理所有未被容器使用的镜像、网络、缓存,极致释放磁盘空间。
# 清理所有闲置资源(镜像、容器、网络、缓存)dockersystem prune-a# 强制一键清理(生产环境慎用,提前确认)dockersystem prune-a-f6.4 批量删除所有本地镜像
测试环境重置场景专用,生产环境禁止随意使用。
# 批量删除所有本地镜像dockerrmi-f$(dockerimages-aq)七、高频命令速查表
| 功能场景 | 核心命令 |
|---|---|
| 查看本地镜像 | docker images / docker images -a |
| 搜索远程镜像 | docker search 镜像名 |
| 拉取镜像 | docker pull 镜像名:标签 |
| 镜像打标签 | docker tag 原镜像 新镜像 |
| 构建自定义镜像 | docker build -t 镜像名:标签 |
| 打包镜像 | docker save -o 输出文件.tar 镜像名 |
| 加载镜像 | docker load -i 镜像文件.tar |
| 删除指定镜像 | docker rmi -f 镜像名/ID |
| 清理悬空镜像 | docker image prune -f |
| 全盘清理闲置资源 | docker system prune -a |
八、常见问题总结
1、镜像删除失败:有容器依赖
解决方案:先删除关联容器docker rm -f 容器ID,再删除镜像,或直接docker rmi -f 镜像ID强制删除。
2、打包迁移后镜像无标签
解决方案:打包时必须指定镜像名:标签,不要仅用镜像ID打包,避免加载后无标识。
3、磁盘空间占用过高
解决方案:定期执行docker image prune清理悬空镜像,测试环境可定期执行docker system prune -a全盘清理。
结尾寄语
Docker镜像管理是容器化开发、运维的基础,熟练掌握以上命令,可完美解决镜像查询、版本管控、机器迁移、磁盘冗余等99%的实战问题。
后续持续更新 Docker 容器管理、Docker Compose 编排、镜像仓库搭建、K8s 容器部署等干货,点赞+收藏+关注不迷路!