传送门:
一、搜索镜像
在Docker中,通过如下命令搜索镜像:
docker search [OPTIONS] TERM
其中TERM是你要搜索的镜像关键词
常用选项(OPTIONS):
--limit N:限制返回结果的数量(默认为25,最大为100)
--filter"is-oddicial=true":只显示官方镜像
--filter"is-automated=true":只显示自动构建的镜像
--filter"stars=N":只显示收藏数(stars)大于等于N的镜像
输出字段说明:
- NAME:镜像名称
- DESCRIPTION:镜像描述
- STARS:用户收藏(点赞)数量,反映镜像的受欢迎程度
- OFFICIAL:是否为官方镜像([OK] 表示是)
- AUTOMATED:是否为自动构建镜像([OK] 表示是)
docker search**只能搜索 Docker Hub 上的公共镜像,无法搜索私有仓库或第三方镜像仓库(如阿里云、Harbor 等)
docker search --help
执行该命令可以查看 docker search
命令的完整帮助信息:
Usage: docker search [OPTIONS] TERM
Search the Docker Hub for images
Options:
-f, --filter filter Filter output based on conditions provided
(e.g., 'is-automated=true', 'is-official=true', 'stars=10')
--format string Pretty-print search using a Go template
--help Print usage
--limit int Max number of search results (default 25, max 100)
--no-trunc Don't truncate output
-f, --filter filter
根据指定条件过滤结果。支持的过滤器包括:
is-official=true|false:是否为官方镜像
is-automated=true|false:是否为自动构建镜像
stars=N:仅显示收藏数 ≥ N 的镜像
--format string
使用 Go 模板自定义输出格式。
--limit int
限制返回结果数量(默认 25,最大 100)
--no-trunc
不截断输出(例如完整显示长描述)
--help
显示帮助信息(即当前命令的作用)
二、Docker拉取&下载镜像
在 Docker 中,拉取(下载)镜像 使用的是 docker pull
命令。该命令会从配置的镜像仓库(默认是 Docker Hub)下载指定的镜像到本地。docker pull 仅下载镜像,不会创建容器。
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
NAME:镜像名称(如 nginx、redis、ubuntu)
TAG:镜像标签(如 latest、1.21、alpine),默认为 latest
DIGEST:镜像的 SHA256 哈希值(用于精确拉取)
常用选项(OPTIONS):
--platform:指定平台(如linux/amd64\linux/arm64),用于多架构镜像
--all-tags:不推荐:拉取该镜像的所有标签(慎用,可能下载大量数据)
--q,--quiet:静默模式,仅输出镜像ID
注意事项:
-
默认仓库是 Docker Hub
如果未指定仓库地址(如
nginx
),Docker 会从docker.io/library/nginx
拉取。 -
latest
不一定是最新的
latest
只是一个标签,由镜像维护者定义,不保证是最新版本 。生产环境建议使用明确版本号(如nginx:1.25
)。 -
网络问题
国内用户可能因网络问题拉取缓慢,可配置镜像加速器(如阿里云、中科大镜像源)。
常见用法示例
-
拉取最新版镜像(默认 latest 标签)
docker pull nginx
等价于:
docker pull nginx:latest
2.拉取指定版本的镜像
docker pull redis:7.0
docker pull ubuntu:22.04
3.拉取完整镜像名(含仓库地址)
# 从 Docker Hub 拉取(可省略 registry)
docker pull library/ubuntu:20.04
# 从第三方仓库拉取(如阿里云)
docker pull registry.cn-hangzhou.aliyuncs.com/library/nginx:latest
4.拉取镜像并验证摘要(Digest)
docker pull nginx@sha256:abc123...(完整哈希值)
5.指定平台拉取
docker pull --platform linux/amd64 alpine
三、Docker查看镜像信息
在 Docker 中,有多种命令可以查看镜像(Image)的相关信息,从简略列表到详细元数据。以下是常用的查看镜像信息的方法:
1. 列出本地所有镜像(简略信息)
docker images
# 或
docker image ls
输出字段说明:
REPOSITORY:镜像仓库名(如nginx,redis)
TAG:镜像标签(如latest,1.21)
IMAGE ID:镜像唯一ID(SHA256前缀)
CREATED:镜像创建时间
SIZE:镜像大小
常用选项:
-q,-quiet:仅显示镜像ID
-a,--all:显示所有镜像(包括中间层镜像)
--filter:过滤结果(如dangling=true显示悬空镜像)
2.查看镜像详细信息(完整元数据)
docker inspect <IMAGE>
其中 <IMAGE> 可以是:
镜像名(如 nginx)
镜像名:标签(如 nginx:1.21)
镜像 ID(如 605c77e624dd)
输出内容(JSON 格式)包括:
- 镜像架构(
Architecture
) - 操作系统(
Os
) - 创建时间(
Created
) - 镜像层(
RootFS
/Layers
) - 环境变量(
Config.Env
) - 默认启动命令(
Config.Cmd
) - 暴露的端口(
Config.ExposedPorts
) - 标签(
Labels
)
3. 查看镜像的历史构建层(Layer History)
docker history <IMAGE>
输出字段:
|--------------|-------------------------------|
| IMAGE
| 层的镜像 ID 或<missing>
(未保存的中间层) |
| CREATED
| 该层创建时间 |
| CREATED BY
| 构建该层所用的 Dockerfile 指令 |
| SIZE
| 该层大小 |
| COMMENT
| 注释(通常为空) |
总结
|----------|---------------------------|
| 列出所有镜像 | docker images
|
| 查看详细元数据 | docker inspect <IMAGE>
|
| 查看构建历史 | docker history <IMAGE>
|
| 显示镜像摘要 | docker images --digests
|
| 仅获取镜像 ID | docker images -q
|
四、导入导出镜像
在 Docker 中,导入和导出镜像是用于在不同主机之间迁移镜像的常用操作。注意:这里指的是 镜像(Image) 的导入导出,而不是容器(Container)的快照。
Docker 提供了两组相关但不同的命令:
|------------------|-----------------|--------------------------------|
| 导出镜像为 tar 文件 | docker save
| 保存镜像(含所有层和元数据) |
| 从 tar 文件加载镜像 | docker load
| 恢复镜像到本地镜像库 |
| 导出容器文件系统 | docker export
| 仅导出容器的文件系统(不是镜像) |
| 从 tar 创建镜像 | docker import
| 从export
的 tar 创建新镜像(无历史层) |
1.导出镜像:docker save
将一个或多个镜像保存为 tar 归档文件(保留完整镜像结构、标签、历史层)。
# 导出单个镜像
docker save -o nginx.tar nginx:latest
# 或使用重定向
docker save nginx:latest > nginx.tar
# 导出多个镜像到同一个 tar 文件
docker save -o myimages.tar nginx:latest redis:7.0 ubuntu:22.04
"生成的 nginx.tar 包含完整的镜像数据,可跨平台传输。"
2.导入镜像:docker load
从 tar 文件加载镜像回本地镜像库(保留原始标签和镜像 ID)。
# 从 tar 文件加载镜像
docker load -i nginx.tar
# 或使用重定向
docker load < nginx.tar
- 保留原始镜像的所有层、标签、元数据
- 镜像 ID 不变(便于一致性校验)
- 支持多镜像打包
五、Docker删除镜像
1. 通过镜像名和标签删除
docker rmi nginx:latest
# 或
docker image rm nginx:latest
2. 通过镜像 ID 删除
docker rmi 605c77e624dd
如果该镜像有正在运行的容器或已停止但未删除的容器依赖它,Docker 会拒绝删除。
解决方法:
先删除相关容器:
# 查看使用该镜像的容器
docker ps -a --filter "ancestor=nginx:latest"
# 删除容器(先停止再删除)
docker stop container_id
docker rm container_id
再删除镜像。
强制删除 (慎用)
如果确定要强制删除(即使有容器引用),可使用 -f
参数:
docker rmi -f nginx:latest