3.Docker镜像

1 Docker 镜像常用命令

镜像搜索:docker image search
镜像查看:docker image lsdocker images
镜像下载:docker image pull
镜像删除:docker image rmdocker rmi
镜像保存:docker image save
镜像加载:docker image load
镜像重命名:docker image tag
镜像详细信息:docker image inspect
镜像历史信息:docker image history

images/3.Docker镜像/Pasted-image-20241227202310.png

2 镜像简介

镜像是一个 Docker 的可执行文件,其中包括运行应用程序所需的所有代码内容、依赖库、环境变量和配置文件等。

通过镜像可以创建一个或多个容器

  • 作用
    搜索 Docker Hub(镜像仓库)上的镜像

  • 命令格式

    docker search [OPTIONS] TERM
    
  • 命令参数

    参数 默认值 描述
    -f, --filter filter 根据提供的格式筛选结果
    --format string 利用 Go 语言的 format 格式化输出结果
    --limit int 展示最大的结果数,默认 25 个
    --no-trunc 内容全部展示

3.1 按名称搜索图像

搜索名称包含 centos 的镜像

images/3.Docker镜像/Pasted-image-20241205231924.png

参数 说明
NAME 镜像名称
DESCRIPTION 镜像说明
STARS 点赞数量
OFFICIAL 是否是官方认证的

3.2 根据提供的格式筛选结果

过滤标志(-f--filter)格式为一 key=value 对。如果有多个过滤器,则传递多个标志(例如 --filter is-official=true --filter stars=3)。

目前支持的过滤器有:

  • stars (int - 镜像的点赞数)
  • is-official (boolean - true 或 false) - 是不是官方镜像

显示名称包含 centos 并且是官方的镜像

images/3.Docker镜像/Pasted-image-20241205233608.png

显示名称包含 centos 并且点赞数超过 20 个的镜像

images/3.Docker镜像/Pasted-image-20241205234133.png

3.3 限制搜索结果

显示 5 条名称包含 centos 的镜像

images/3.Docker镜像/Pasted-image-20241205233959.png

3.4 显示未截断的描述(--no-trunc)

显示名称包含 centos 并且描述在输出中不被截断的镜像·

images/3.Docker镜像/Pasted-image-20241205233310.png

3.5 格式化输出(--format)

格式化选项(--format)使用 Go 模板漂亮地打印搜索输出。

Go 模板的有效占位符是:

占位符 描述
.Name 镜像的名称
.Description 镜像的描述
.StarCount 镜像的点赞数
.IsOfficial 如果镜像是官方的,则为“OK”

使用 --format 选项时,search 命令将完全按照模板声明的方式输出数据。如果使用该  table 指令,则还会包含列标题。

使用没有标题的模板并以 镜像名:镜像的点赞数 格式输出

images/3.Docker镜像/Pasted-image-20241205235442.png

带标题的输出

images/3.Docker镜像/Pasted-image-20241205235614.png

4 镜像查看 -docker image ls / docker images

  • 作用
    列出本地镜像

  • 命令格式

    docker images [OPTIONS] [REPOSITORY[:TAG]]
    或
    docker image ls [OPTIONS] [REPOSITORY[:TAG]]
    
  • 命令参数

    参数 默认值 描述
    -a, --all 展示所有镜像(默认隐藏底层的镜像)
    --no-trunc 不缩略显示
    -q, --quiet 只显示镜像 ID

4.1 列出本地镜像

images/3.Docker镜像/Pasted-image-20241206000636.png

列表包含了 仓库名标签镜像 ID创建时间 以及 所占用的空间

镜像 ID 是镜像的唯一标识,一个镜像可以对应多个标签。因此,在上面的例子中,我们可以看到 centos:latestcentos:8 拥有相同的 ID,因为它们对应的是同一个镜像。

4.2 按名称和标签列出图像

docker images 命令采用可选 [REPOSITORY[:TAG]] 参数,将列表限制为与参数匹配的镜像。如果指定了  REPOSITORY 但没有指定 TAG ,则 docker images 命令会列出给定存储库中的所有 REPOSITORY 镜像。

例如,列出所有 centos 镜像

images/3.Docker镜像/Pasted-image-20241206001415.png

例如,列出所有 centos:8 镜像

images/3.Docker镜像/Pasted-image-20241206001545.png

4.3 列出完整长度的图像 ID (--no-trunc)

images/3.Docker镜像/Pasted-image-20241206001821.png

4.4 只列出镜像的 ID

images/3.Docker镜像/Pasted-image-20241206001915.png

5 镜像下载 -docker image pull

  • 作用
    下载远程仓库中的镜像

  • 命令格式

    docker pull [OPTIONS] NAME[:TAG|@DIGEST]
    
  • 命令参数

    参数 默认值 描述
    -a, --all-tags 下载所有符合给定 tag 的镜像

5.1 从远程仓库拉取镜像

要下载特定镜像或镜像集(即存储库),可使用 docker image pull (或 docker pull 简写)。如果未提供标签,Docker Engine 将默认使用 :latest 标签。

例如拉取  centos:latest 镜像:

images/3.Docker镜像/Pasted-image-20241206144031.png

镜像可以重用层。例如, centos:8 (目前 centos8 为最新版本)镜像与 centos:latest 共享其层。因此,拉取 centos:8 镜像只会拉取其元数据,而不会拉取其层,因为该层已存在于本地:

拉取 centos:8 镜像

images/3.Docker镜像/Pasted-image-20241206145105.png

镜像 ID 是涵盖镜像配置和层的 SHA256 摘要。在上面的示例中, centos:8centos:latest 具有相同的镜像 ID,因为它们是带有不同名称标记的同一镜像。由于它们是同一镜像,因此它们的层仅存储一次,不会占用额外的磁盘空间。

6 镜像删除 -docker image rm / docker rmi

  • 作用
    将本地的一个或多个镜像删除

  • 命令格式

    docker image rm [OPTIONS] IMAGE [IMAGE...]
    
  • 命令参数

    参数 默认值 描述
    -f, --force 强制删除

6.1 使用 ID、镜像名删除镜像

我们可以用镜像的完整 ID,也称为 长 ID,来删除镜像。使用脚本的时候可能会用长 ID,但是人工输入就太累了,所以更多的时候是用 短 ID 来删除镜像。 docker image ls 默认列出的就已经是短 ID 了,一般取前 3 个字符以上,只要足够区分于别的镜像就可以了。

使用 ID 删除镜像

images/3.Docker镜像/Pasted-image-20241206150617.png

我们也可以用 镜像名 ,也就是 <仓库名>:<标签> ,不写标签默认为 :latest 来删除镜像。

images/3.Docker镜像/Pasted-image-20241206150844.png

images/3.Docker镜像/Pasted-image-20241206151426.png

删除多个镜像

images/3.Docker镜像/Pasted-image-20241206152353.png

6.2 Untagged 和 Deleted

如果观察上面这几个命令的运行输出信息的话,会注意到删除行为分为两类,一类是 Untagged ,另一类是 Deleted 。之前介绍过,镜像的唯一标识是其 ID 和摘要,而一个镜像可以有多个标签。

因此当我们使用上面命令删除镜像的时候,实际上是在要求删除某个标签的镜像。所以首先需要做的是将满足我们要求的所有镜像标签都取消,这就是我们看到的 Untagged 的信息。因为一个镜像可以对应多个标签,因此当我们删除了所指定的标签后,可能还有别的标签指向了这个镜像,如果是这种情况,那么 Delete 行为就不会发生。所以并非所有的 docker image rm 都会产生删除镜像的行为,有可能仅仅是取消了某个标签而已。

当该镜像所有的标签都被取消了,该镜像很可能会失去了存在的意义,因此会触发删除行为。镜像是多层存储结构,因此在删除的时候也是从上层向基础层方向依次进行判断删除。镜像的多层结构让镜像复用变得非常容易,因此很有可能某个其它镜像正依赖于当前镜像的某一层。这种情况,依旧不会触发删除该层的行为。直到没有任何层依赖当前层时,才会真实的删除当前层。这就是为什么,有时候会奇怪,为什么明明没有别的标签指向这个镜像,但是它还是存在的原因,也是为什么有时候会发现所删除的层数和自己 docker pull 看到的层数不一样的原因。

除了镜像依赖以外,还需要注意的是容器对镜像的依赖。如果有用这个镜像启动的容器存在(即使容器没有运行),那么同样不可以删除这个镜像。之前讲过,容器是以镜像为基础,再加一层容器存储层,组成这样的多层存储结构去运行的。因此该镜像如果被这个容器所依赖的,那么删除必然会导致故障。如果这些容器是不需要的,应该先将它们删除,然后再来删除镜像。

6.3 强制删除镜像

删除失败,因为该 ID 有多个引用,使用 -f 可以强制删除所有该 ID 的引用

images/3.Docker镜像/Pasted-image-20241206152143.png

在镜像被容器引用时,也无法删除,只有 -f 才能强制删除

7 镜像保存备份 -docker image save

  • 作用
    将本地的一个或多个镜像打包保存成本地 tar 文件(输出到 STDOUT)

  • 命令格式

    docker image save [OPTIONS] IMAGE [IMAGE...]
    
  • 命令参数

    参数 默认值 描述
    -o, --output 写入文件,而不是 STDOUT

7.1 保存镜像

默认是输出到 STDOUT 的

images/3.Docker镜像/Pasted-image-20241206153120.png

输出到文件

images/3.Docker镜像/Pasted-image-20241206153841.png

8 镜像备份导入 -docker image load

  • 作用
    将 save 命令打包的镜像导入本地镜像库中

  • 命令格式

    docker image load [OPTIONS]
    
  • 命令参数

    参数 默认值 描述
    -i, --input 从 tar 存档文件读取,而不是从 STDIN 读取
    -q, --quiet 不打印导入过程信息

8.1 导入镜像

默认是从 STDIN 中读取文件,使用 -i 来指定文件

images/3.Docker镜像/Pasted-image-20241206155111.png

注意
在 Windows 上使用 docker save 命令将镜像保存到文件的过程中,以下两种方式的文件生成方式不一样,所以加载时要使用对应的加载方式
> > 1. docker save \[image] > file > 2. docker save \[image] -o file > > 上面两种方式生成的文件不一样,所以加载时必须使用对应的方式加载,否则会报错 > > 1. docker load < file > 2. docker load -i file

9 为镜像添加引用 -docker image tag

  • 作用
    对本地镜像的 NAME、TAG 进行重命名,并产生一个命名后的镜像

  • 命令格式

    docker image tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
    
  • 命令参数

9.1 通过 ID 为镜像添加 tag 引用

docker image tag 命令并不会覆盖原镜像引用,而是生成一个新的引用

images/3.Docker镜像/Pasted-image-20241206160639.png

9.2 通过名称为镜像添加 tag 引用

images/3.Docker镜像/Pasted-image-20241206160923.png

10 镜像详细信息 -docker image inspect

  • 作用
    显示一个或多个图像的详细信息

  • 命令格式

    docker image inspect [OPTIONS] IMAGE [IMAGE...]
    
  • 命令参数

    参数 默认值 描述
    -f, --format 利用 go 语言的 format 格式输出结果

10.1 查看镜像信息

PS D:\data\test> docker image inspect ubuntu
[
    {
        "Id": "sha256:b1d9df8ab81559494794e522b380878cf9ba82d4c1fb67293bcf931c3aa69ae4",
        "RepoTags": [
            "ubuntu:latest",
            "ubuntu:new"
        ],
        "RepoDigests": [],
        "Parent": "",
        "Comment": "",
        "Created": "2024-11-19T17:29:25.973758549Z",
        "DockerVersion": "24.0.7",
        "Author": "",
        "Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/bash"
            ],
            "Image": "sha256:3ba7f9a61d88dd09bb6ac9166cec39891772edc997c4c1da55e50a27f2647e48",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "org.opencontainers.image.ref.name": "ubuntu",
                "org.opencontainers.image.version": "24.04"
            }
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 78120830,
        "GraphDriver": {
            "Data": {
                "MergedDir": "/var/lib/docker/overlay2/ade9f0a2bb175f0af58350a634a35b2392ede90b6cf57b74715608e8d6e8414d/merged",
                "UpperDir": "/var/lib/docker/overlay2/ade9f0a2bb175f0af58350a634a35b2392ede90b6cf57b74715608e8d6e8414d/diff",
                "WorkDir": "/var/lib/docker/overlay2/ade9f0a2bb175f0af58350a634a35b2392ede90b6cf57b74715608e8d6e8414d/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:687d50f2f6a697da02e05f2b2b9cb05c1d551f37c404ebe55fdec44b0ae8aa5c"
            ]
        },
        "Metadata": {
            "LastTagTime": "2024-12-06T08:05:07.544242437Z"
        }
    }
]
PS D:\data\test>

10.2 格式化查看

官方文档

json 格式查看

PS D:\data\test> docker image inspect ubuntu
[
    {
        "Id": "sha256:b1d9df8ab81559494794e522b380878cf9ba82d4c1fb67293bcf931c3aa69ae4",
        "RepoTags": [
            "ubuntu:latest",
            "ubuntu:new"
        ],
        "RepoDigests": [],
        "Parent": "",
        "Comment": "",
        "Created": "2024-11-19T17:29:25.973758549Z",
        "DockerVersion": "24.0.7",
        "Author": "",
        "Config": {
            "Hostname": "",
            "Domainname": "",
            "User": "",
            "AttachStdin": false,
            "AttachStdout": false,
            "AttachStderr": false,
            "Tty": false,
            "OpenStdin": false,
            "StdinOnce": false,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/bash"
            ],
            "Image": "sha256:3ba7f9a61d88dd09bb6ac9166cec39891772edc997c4c1da55e50a27f2647e48",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "org.opencontainers.image.ref.name": "ubuntu",
                "org.opencontainers.image.version": "24.04"
            }
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 78120830,
        "GraphDriver": {
            "Data": {
                "MergedDir": "/var/lib/docker/overlay2/ade9f0a2bb175f0af58350a634a35b2392ede90b6cf57b74715608e8d6e8414d/merged",
                "UpperDir": "/var/lib/docker/overlay2/ade9f0a2bb175f0af58350a634a35b2392ede90b6cf57b74715608e8d6e8414d/diff",
                "WorkDir": "/var/lib/docker/overlay2/ade9f0a2bb175f0af58350a634a35b2392ede90b6cf57b74715608e8d6e8414d/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:687d50f2f6a697da02e05f2b2b9cb05c1d551f37c404ebe55fdec44b0ae8aa5c"
            ]
        },
        "Metadata": {
            "LastTagTime": "2024-12-06T08:05:07.544242437Z"
        }
    }
]
PS D:\data\test> docker image inspect -f "{{json .Id}}" ubuntu
"sha256:b1d9df8ab81559494794e522b380878cf9ba82d4c1fb67293bcf931c3aa69ae4"
PS D:\data\test> docker image inspect -f "{{json .GraphDriver.Data}}" ubuntu
{"MergedDir":"/var/lib/docker/overlay2/ade9f0a2bb175f0af58350a634a35b2392ede90b6cf57b74715608e8d6e8414d/merged","UpperDir":"/var/lib/docker/overlay2/ade9f0a2bb175f0af58350a634a35b2392ede90b6cf57b74715608e8d6e8414d/diff","WorkDir":"/var/lib/docker/overlay2/ade9f0a2bb175f0af58350a634a35b2392ede90b6cf57b74715608e8d6e8414d/work"}
PS D:\data\test>

11 镜像历史信息 - docker image history

  • 作用
    查看本地一个镜像的历史(历史分层)信息

  • 命令格式

    docker image history [OPTIONS] IMAGE
    
  • 命令参数

    参数 默认值 描述
    -H, --human true 以人类可读的格式打印尺寸和日期
    -q, --quiet 仅显示镜像 ID
    --no-trunc 不要截断输出

11.1 查看历史信息

images/3.Docker镜像/Pasted-image-20241206162613.png

posted @ 2026-04-12 13:56  挖掘鱼  阅读(5)  评论(0)    收藏  举报