Docker快速入门——第四章Docker镜像

传送门:

Docker快速入门------第一章Docker入门

Docker快速入门------第二章Docker基本概念

Docker快速入门------第三章Docker环境安装

一、搜索镜像

在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

注意事项:

  1. 默认仓库是 Docker Hub

    如果未指定仓库地址(如 nginx),Docker 会从 docker.io/library/nginx 拉取。

  2. latest 不一定是最新的
    latest 只是一个标签,由镜像维护者定义,不保证是最新版本 。生产环境建议使用明确版本号(如 nginx:1.25)。

  3. 网络问题

    国内用户可能因网络问题拉取缓慢,可配置镜像加速器(如阿里云、中科大镜像源)。

常见用法示例

  1. 拉取最新版镜像(默认 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
相关推荐
程序猿费益洲2 小时前
Docker 网络详解:(三)四大网络模式
网络·docker·容器
一只代码狗2 小时前
Docker Desktop在MAC上无法强制关闭的命令清理方式
macos·docker·php
温柔一只鬼.3 小时前
Docker快速入门——Windowns系统下Docker安装(2025最新理解与完整,附带WSL1如何升级为WSL2)
运维·docker·容器
何朴尧4 小时前
centos/cuos如何开启软件源
linux·运维·centos
派阿喵搞电子4 小时前
关于使用docker部署srs服务器的相关指令
服务器·docker·容器
啊啊啊啊8434 小时前
Kubernetes 1.20集群部署
云原生·容器·kubernetes
Asurplus5 小时前
【Docker】13、Docker安装RustFS服务
docker·容器·文件存储·rustfs
csdn_Hzx5 小时前
Linux添加一个系统服务
linux·运维·服务器
重生之我在20年代敲代码6 小时前
【Linux】初始线程
linux·运维·服务器