运维,Docker

Nexus3 Docker 仓库中通过 v1 API 和 curl 命令查找、删除镜像

本文介绍:

  1. 如何设置 自建 Nexus3 Docker Hosted 仓库的 v1 API 可用;
  2. 如何使用 curl 命令查看 Nexus3 Docker 仓库的镜像信息;
  3. 如何使用 curl 命令删除某个在 Nexus3 Docker 仓库中的 Docker 镜像;
  4. 如何使用 Python 或 Shell 自动化实现 Nexus3 Docker 仓库的镜像查找与删除。

(注:本文使用的 OSS Nexus3 版本为:3.37.3-02)

1. 如何设置 自建 Nexus3 Docker Hosted 仓库的 v1 API 可用

进入 Nexus3 Web 页面,按图中提示设置 Docker 仓库的 V1 API 可用
2024-12-20T09:13:25.png

进入 设置 -> System -> API 页面,可以查看相关 API 操作使用方法,本文主要使用 Components API 来处理 Docker 镜像。
图中展示的每一项(GET | POST | DELETE)请求都可以点开,填写参数并测试运行的。
2024-12-20T09:02:22.png

2. 如何使用 curl 命令查看 Nexus3 Docker 仓库的镜像信息

标准首次请求:

curl -s -X GET -H "accept:application/json" "http://nexus3地址IP:端口号/nexus/service/rest/v1/components?repository=docker仓库名称"

标准首次请求会返回一个含有 items 属性 以及 continuationToken 属性的 json 字典,其中:

  1. items 是一个列表,每个列表元素展示了在 docker 仓库中查询到的 镜像信息;但尤其注意的是!!items列表只会展示仓库中的部分镜像!!
  2. continuationToken 是一个字符串,它的作用是:作为查询请求参数,使curl命令获取后续的镜像列表

标准后续请求:

curl -s -X GET -H "accept:application/json" "http://nexus3地址IP:端口号/nexus/service/rest/v1/components?continuationToken=${前一次请求返回的continuationToken值}&repository=docker仓库名称"

可以发现,在请求 url 中多出了 continuationToken=${前一次请求返回的continuationToken值}
标准后续请求的返回值格式与标准首次请求相同,此处不再赘述。

获取 items 列表 相关镜像属性值 的请求

以标准首次请求为例:items 列表元素中包含了 id, 镜像名(name), tag值(version)等属性,本文介绍如何提取 id, name, version 的方法
2024-12-20T09:47:32.png

提取 id:

curl -s -X GET -H "accept:application/json" "http://nexus3地址IP:端口号/nexus/service/rest/v1/components?repository=docker仓库名称" | jq -r 'items[].id'

提取 name:

curl -s -X GET -H "accept:application/json" "http://nexus3地址IP:端口号/nexus/service/rest/v1/components?repository=docker仓库名称" | jq -r 'items[].name'

提取 version:

curl -s -X GET -H "accept:application/json" "http://nexus3地址IP:端口号/nexus/service/rest/v1/components?repository=docker仓库名称" | jq -r 'items[].version'

返回值示例:
2024-12-20T09:55:52.png

可以观察到,标准首次请求返回了一组十个记录;若访问后续记录,则需在请求 url 为:

curl -s -X GET -H "accept:application/json" "http://nexus3地址IP:端口号/nexus/service/rest/v1/components?continuationToken=${前一次请求返回的continuationToken值}&repository=docker仓库名称 | jq -r 'items[].id"

3. 如何使用 curl 命令删除某个在 Nexus3 Docker 仓库中的 Docker 镜像

删除镜像需要凭借镜像的 id 信息,第2小节详细介绍了如何获取镜像的 id 信息;
具体的删除请求如下:

curl -s -X DELETE -H "accept:application/json" "http://nexus3地址IP:端口号/nexus/service/rest/v1/components/待删除镜像id字符串"

4. 如何使用 Python 或 Shell 自动化实现 Nexus3 Docker 仓库的镜像查找与删除

Python 脚本示例:(不包含删除功能,仅搜索所有镜像,并以 镜像名:tag名, id值 的形式按行输出)

2024-12-23T02:21:14.png
2024-12-23T02:21:56.png

Shell 脚本示例:(按 镜像名:tag名 查找镜像并删除,一旦找到便删除镜像,程序结束)

2024-12-23T02:24:57.png

回复

  1. daddy
    Chrome 131 10

    yang yang is good in study

This is just a placeholder img.