概念

Docker 镜像是 Docker 核心概念之一,是只读的模板,包含运行应用程序所需的代码、运行时、库、环境变量和配置文件等,用于创建 Docker 容器。可以将镜像理解为容器的 “快照” 或 “安装包”,容器则是镜像的运行实例。

核心特性

分层存储

镜像并非单一文件,而是由多个 ** 只读层(layer)** 叠加而成。每层对应 Dockerfile 中的一条指令(如 RUNCOPY),层与层之间共享,可复用。例如:

  • FROM ubuntu:22.04 是基础层;

  • RUN apt-get install nginx 是在基础层上新增的层;

  • 新层仅存储与上一层的差异,节省磁盘空间。

不可修改

镜像构建完成后是只读的,无法直接修改。若需更新镜像,需通过修改 Dockerfile 重新构建,生成新的层叠加在原有层之上。

可标记和分发

镜像可通过 ** 标签(Tag)** 区分版本(如 nginx:1.29.3ubuntu:latest),并可推送到 Docker Hub 或私有仓库,实现跨环境共享。

镜像和容器的关系

  • 镜像:静态的只读模板,定义了容器的运行环境和内容;

  • 容器:镜像的运行实例,基于镜像创建,可读写(容器层是可写的,在镜像只读层之上)。

类比:镜像 ≈ 软件安装包,容器 ≈ 安装后的软件进程。

镜像的常见来源

  1. 从仓库拉取:通过 docker pull 从 Docker Hub 或私有仓库获取官方 / 第三方镜像(如 docker pull nginx);

  2. 本地构建:通过 docker build 基于 Dockerfile 自定义构建镜像;

  3. 导入镜像:通过 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/amd64linux/arm64),需开启 Docker Buildx

更多推荐