使用 REST API 查询私有镜像仓库中的镜像 tags 信息,是一种非常直接、灵活的方式。通过简单的 HTTP 请求,可以快速获取到镜像的所有版本信息,并根据需求进行选择。对于企业内部的镜像管理,REST API 提供了一种高效且自动化的解决方案。

为了确保我们使用的镜像版本符合要求,通常需要查询镜像仓库中的可用 tags 信息,用于回退或更新最新版本镜像。
本文将介绍如何通过 Docker Registry API v2 查询私有镜像仓库中的镜像 tags 列表。

前提条件

在开始之前,需要满足以下前提条件:

  1. Docker Registry 支持 API v2​:大多数私有仓库(如 Docker 官方 Registry、Harbor)都支持此版本的 API。
  2. 仓库需要身份验证​:如果仓库启用了身份验证,确保你有正确的用户名和密码。

API 请求格式

如果没有开启https,则改为http

Docker Registry API 提供了一个简单的 GET 请求来查询某个镜像的 tags 列表。请求的基本格式如下:

GET https://<your_private_registry>/v2/<image_name>/tags/list

其中:

  • <your_private_registry> 是你的私有镜像仓库地址(例如 your-registry.com)。
  • <image_name> 是你要查询的镜像名称(例如 my-app)。

示范

本文使用的镜像版本为ehub.ctcdn.cn/public/centos,用户名与密码为lolicp.com,都将以此进行示范。

获取指定镜像的Tags列表

本文使用的镜像仓库添加了密码,需要加-u

通过curl命令获取ehub.ctcdn.cn/public/centos镜像包含的tags列表:

curl -s -X GET -u 'lolicp.com:lolicp.com'  https://ehub.ctcdn.cn/v2/public/centos/tags/list|python -m json.tool

这个命令会返回一个 JSON 对象,列出所有的 tags。

API响应解析

无论是否需要身份验证,成功的请求会返回一个包含镜像 tags 的 JSON 响应。
例如,执行上述请求后,你会得到如下响应:

{
"name": "public/centos",
    "tags": [
        "7",
        "latest"
    ]
}

解析响应结果

  • "name" 表示镜像的名称。
  • "tags" 列表中包含了该镜像的所有可用版本,如 7latest

通过这些 tags,你可以选择具体的版本来拉取镜像或用于部署。

获取每个 Tag 的 Manifest

对于每个 tag,你需要获取它的 Manifest 以提取创建日期或构建时间。你可以使用以下命令:

[root@lolicp ~]# curl -X GET -u 'lolicp.com:lolicp.com' https://ehub.ctcdn.cn/v2/public/centos/manifests/latest
{
   "schemaVersion": 2,
   "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
   "config": {
      "mediaType": "application/vnd.docker.container.image.v1+json",
      "size": 2754,
      "digest": "sha256:eeb6ee3f44bd0b5103bb561b4c16bcb82328cfe5809ab675bb17ab3a16c517c9"
   },
   "layers": [
      {
         "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
         "size": 76097157,
         "digest": "sha256:2d473b07cdd5f0912cd6f1a703352c82b512407db6b05b43f2553732b55df3bc"
      }
   ]
}
演示的镜像仓库无该关键字。

在返回的 JSON 中,如果存在 created 字段。这个字段通常位于 history 数组中某个对象的 v1Compatibility 字段内,表示镜像的创建时间。

提取日期信息*

通过脚本或手动提取每个 tag 对应的日期信息。例如,使用 jq 命令行工具可以更容易地提取数据:

[root@lolicp ~]# curl -s -X GET -u 'lolicp.com:lolicp.com' https://ehub.ctcdn.cn/v2/public/centos/manifests/latest | jq -r '.history[0].v1Compatibility | fromjson | .created'
2022-12-06T14:39:50.077592413Z

你可以将这个命令用于所有 tags 来获取每个 tag 的创建日期。

自动化查询多个Tags创建时间

使用bash脚本查询指定镜像的tags列表,并查询所有tag的创建时间。

#!/bin/bash
# 查询镜像tags创建时间
# Author: lolicp.com

tags=$(curl -s -X GET -u 'lolicp.com:lolicp.com' https://ehub.ctcdn.cn/v2/public/centos/tags/list | jq -r '.tags[]')

for tag in $tags; do
    date=$(curl -s -X GET -u 'lolicp.com:lolicp.com' https://ehub.ctcdn.cn/v2/public/centos/manifests/$tag | jq -r '.history[0].v1Compatibility | fromjson | .created')
    echo "Tag: $tag - Date: $date"
done

这个脚本会输出每个 tag 及其对应的创建日期。

[root@lolicp ~]# bash check_tags.sh
Tag: pipe-131-commit-b1a0c128 - Date: 2022-10-21T08:31:57.754980606Z
Tag: pipe-132-commit-61b5c72e - Date: 2022-10-21T08:33:15.865349475Z
Tag: pipe-134-commit-c1f0ca2b - Date: 2022-10-21T08:34:25.900578133Z
Tag: pipe-139-commit-5154ce2a - Date: 2022-10-21T09:01:37.884131107Z
Tag: pipe-131-commit-819fc822 - Date: 2022-10-21T10:31:11.18113037Z
Tag: pipe-135-commit-d1bfc928 - Date: 2022-10-21T11:13:55.827228169Z
Tag: pipe-139-commit-7142c324 - Date: 2022-10-21T12:25:16.126039988Z
Tag: pipe-144-commit-0111c222 - Date: 2022-10-22T07:50:46.300171442Z
END

本文标题:通过接口查询私有镜像仓库指定镜像名称的tags列表

本文作者:宇宙最帅的男人

本文链接:https://lolicp.com/linux/202404696.html

版权声明:转载或者引用本文内容请注明来源及原作者,本文著作权归 (lolicp.com) 所有。

除非另有说明,本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

最后修改:2024 年 10 月 04 日
如果觉得我的文章对你有用,请随意赞赏