运维,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. qoftzhmvlq
    Sogo 10

    作者的情感表达细腻入微,让人在阅读中找到了心灵的慰藉。

  2. uzjrozgmky
    Sogo 10

    ?技术类评语?

  3. avfcjexmil
    Sogo 10

    文字流畅如丝,语言优美动人,读来令人心旷神怡。

  4. daddy
    Chrome 131 10

    yang yang is good in study

This is just a placeholder img.