Nexus3 Docker 仓库中通过 v1 API 和 curl 命令查找、删除镜像
本文介绍:
- 如何设置 自建 Nexus3 Docker Hosted 仓库的 v1 API 可用;
- 如何使用 curl 命令查看 Nexus3 Docker 仓库的镜像信息;
- 如何使用 curl 命令删除某个在 Nexus3 Docker 仓库中的 Docker 镜像;
- 如何使用 Python 或 Shell 自动化实现 Nexus3 Docker 仓库的镜像查找与删除。
(注:本文使用的 OSS Nexus3 版本为:3.37.3-02)
1. 如何设置 自建 Nexus3 Docker Hosted 仓库的 v1 API 可用
进入 Nexus3 Web 页面,按图中提示设置 Docker 仓库的 V1 API 可用
进入 设置 -> System -> API 页面,可以查看相关 API 操作使用方法,本文主要使用 Components API 来处理 Docker 镜像。
图中展示的每一项(GET | POST | DELETE)请求都可以点开,填写参数并测试运行的。
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 字典,其中:
- items 是一个列表,每个列表元素展示了在 docker 仓库中查询到的 镜像信息;但尤其注意的是!!items列表只会展示仓库中的部分镜像!!
- 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 的方法
提取 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'
返回值示例:
可以观察到,标准首次请求返回了一组十个记录;若访问后续记录,则需在请求 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字符串"
yang yang is good in study