概念
Docker 镜像是 Docker 核心概念之一,是只读 的模板,包含运行应用程序所需的代码、运行时、库、环境变量和配置文件等,用于创建 Docker 容器。可以将镜像理解为容器的 "快照" 或 "安装包",容器则是镜像的运行实例。
核心特性
分层存储
镜像并非单一文件,而是由多个 ** 只读层(layer)** 叠加而成。每层对应 Dockerfile 中的一条指令(如 RUN、COPY),层与层之间共享,可复用。例如:
-
FROM ubuntu:22.04 是基础层;
-
RUN apt-get install nginx 是在基础层上新增的层;
-
新层仅存储与上一层的差异,节省磁盘空间。
不可修改
镜像构建完成后是只读的,无法直接修改。若需更新镜像,需通过修改 Dockerfile 重新构建,生成新的层叠加在原有层之上。
可标记和分发
镜像可通过 ** 标签(Tag)** 区分版本(如 nginx:1.29.3、ubuntu:latest),并可推送到 Docker Hub 或私有仓库,实现跨环境共享。
镜像和容器的关系
-
镜像:静态的只读模板,定义了容器的运行环境和内容;
-
容器:镜像的运行实例,基于镜像创建,可读写(容器层是可写的,在镜像只读层之上)。
类比:镜像 ≈ 软件安装包,容器 ≈ 安装后的软件进程。
镜像的常见来源
-
从仓库拉取 :通过 docker pull 从 Docker Hub 或私有仓库获取官方 / 第三方镜像(如
docker pull nginx); -
本地构建 :通过 docker build 基于 Dockerfile 自定义构建镜像;
-
导入镜像 :通过 docker load 导入本地打包的镜像文件(.tar)。
命令详解
|----------------------|-----------------|
| 命令 | 作用 |
| docker images | 查看当前所有镜像 |
| docker image inspect | 查看指定镜像的信息 |
| docker image prune | 清理无用镜像 |
| docker tag | 为镜像添加新的标签 |
| docker rmi | 删除本地镜像标签 |
| docker save | 将指定镜像保存为tar归档文件 |
| docker load | 将tar文件中的镜像加载出来 |
| docker history | 查看镜像的默认历史 |
| docker build | 构建镜像 |
docker images
列出当前主机上的所有镜像
docker images [OPTIONS] [镜像名[:标签]]
|-------------|---------------------------|
| options | 作用 |
| -a/--all | 列出所有镜像(包括中间层镜像,默认只显示顶层镜像) |
| --digests | 显示镜像的摘要信息 |
| -f/--filter | 按条件过滤镜像(如标签、状态等) |
| --format | 自定义输出格式(如表格、JSON 等) |
| -q/--quiet | 只显示镜像 ID |

docker image inspect
用于查看 Docker 镜像详细元数据的命令,返回镜像的完整配置信息(包括构建层、环境变量、端口、卷、配置指令等),以 JSON 格式输出,帮助深入了解镜像的构成和属性。
docker image inspect [OPTIONS] <镜像名:标签> 或 <镜像ID>
|-------------|-----------------------------|
| options | 作用 |
| -f/--format | 按指定格式输出(提取特定字段,无需解析完整 JSON) |
| --size | 显示镜像的总大小(包括所有层) |

docker image prune
用于清理本地无用镜像 的命令,主要目标是删除悬空镜像(dangling images)(无标签且未被容器引用的镜像),也可通过参数扩展清理范围,帮助释放磁盘空间,是镜像管理的常用工具。
docker image prune [OPTIONS]
|------------|------------------------------------------------|
| options | 作用 |
| -a/--all | 扩展清理范围:删除所有未被任何容器(运行中 / 已停止)引用的镜像(不仅是悬空镜像) |
| -f/--force | 强制删除,无需手动确认(跳过交互提示) |
| --filter | 按条件过滤要删除的镜像(如创建时间、标签等) |
docker tag
为 Docker 镜像添加新的标签(Tag),也可理解为给镜像创建别名或引用,常用于标记镜像版本、为推送镜像到仓库做准备,或简化镜像引用。
docker tag <源镜像名:标签> 或 <源镜像ID> <新标签>

docker rmi
用于删除本地镜像 的命令(rmi 即 "remove image"),可删除指定的一个或多个镜像,是镜像管理中针对性删除的核心工具。
docker rmi [OPTIONS] <镜像名:标签> 或 <镜像ID> [镜像名/ID...]
|------------|-------------------------|
| options | 作用 |
| -f/--force | 强制删除镜像(即使镜像被容器引用,需谨慎使用) |
| --no-prune | 不删除镜像的未标记父层(默认会删除悬空的父层) |

docker save
用于将本地镜像打包为 tar 文件的命令,可将一个或多个镜像保存到本地文件系统,方便镜像的备份、迁移或离线传输(如从一台机器复制到另一台机器)。
docker save [OPTIONS]
|-------------|------------------------|
| options | 作用 |
| -o/--output | 指定输出文件路径(推荐使用,避免重定向错误) |
| --quiet | 静默模式,不输出进度信息 |

打包之后,如果我们要将镜像发送到其他服务器,就可以使用 scp 命令
# 本地文件 → 远程主机
scp [options] 本地tar文件路径 远程用户@远程主机IP:远程目标路径
# 远程主机文件 → 本地
scp [options] 远程用户@远程主机IP:远程tar文件路径 本地目标路径
|---------|-----------------------------------|
| options | 作用 |
| -P | 指定远程主机的 SSH 端口(默认 22,若远程端口非默认需指定) |
| -r | 递归传输目录(若传输的是 tar 包无需此选项,用于目录传输) |
| -v | 显示传输详情(调试用) |
| -C | 开启压缩传输(加快大文件传输速度) |
| -p | 保留文件的修改时间、权限等属性 |
docker load
用于从 tar 文件导入镜像 的命令,与 docker save 配对使用,可将之前打包的镜像文件恢复为本地镜像,常用于镜像的离线迁移、备份恢复等场景。
docker load [OPTIONS]
|------------|-------------------------------|
| options | 作用 |
| -i/--input | 指定要导入的 tar 文件路径(推荐使用,避免重定向错误) |
| --quiet | 静默模式,不输出导入进度信息 |

docker history
用于查看Docker 镜像的构建历史,展示镜像中每一层(layer)的创建信息,包括每层的指令、创建时间、大小、作者等细节,帮助你了解镜像的构成、优化方向或排查构建问题。
docker history [OPTIONS] <镜像名:标签> 或 <镜像ID>
|------------|---------------------------|
| options | 作用 |
| -H/--human | 以人类可读的格式显示大小和时间(默认开启) |
| --no-trunc | 不截断输出(显示完整的构建指令,默认会省略长命令) |
| -q/--quiet | 只显示每层的镜像 ID |

docker build
用于从 Dockerfile 构建镜像的核心命令,它读取指定目录下的 Dockerfile 和上下文文件,按照 Dockerfile 中的指令逐步构建出可运行的镜像,是定制化镜像的关键方式。
docker build [OPTIONS] <上下文路径/URL/->
|-------------|-----------------------------------------------------------------------|
| options | 作用 |
| -t/--tag | 为镜像添加标签(格式:[仓库/][名称]:[标签],支持多标签),如 -t myapp:v1 -t myapp:latest |
| -f/--file | 指定自定义 Dockerfile 路径(默认是上下文路径下的 Dockerfile),如 -f ./Dockerfile.prod |
| --build-arg | 设置构建时的参数(需在 Dockerfile 中用 ARG 定义),如 --build-arg VERSION=1.0 |
| --no-cache | 构建时不使用缓存(强制重新执行所有步骤,适合修改基础层后) |
| -q/--quiet | 静默模式,仅输出最终镜像 ID |
| --platform | 指定构建镜像的目标平台(如 linux/amd64、linux/arm64),需开启 Docker Buildx |