podman REST API 的images操作

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: podman REST API 的images操作

我们之前已经基本了解了podman api的组成,我总结一下,大概可以区分为2类

第一类是兼容 docker api的,主要由2类路由

/v3.4.4/containers/create

containers/create

第二类便是podman自己提供的,区别于docker api


例如

/v3.4.4/libpod/container/create

如果你还未尝试使用过任何一种api,那么随便选择一个都可以

之前已经看过一些列流程操作,从拉取镜像,到启动容器,再到删除镜像,这次我们来详细看看images的操作

前提: 已经启动podman api服务,其中遇到的命令参数再做解释




images API 操作


查看images

请求路由: 版本号/libpod/images/json

请求方式: GET

在使用podman api查看images的时候,我们不仅可以查询所有的出来,而且还可以搜索相应的数据,例如: labelid


使用podman cli查看images

命令: podman images

image.png


使用podman api查看images

命令: curl -s -X GET http://127.0.0.1:8881/v3.4.4/libpod/images/json | jq

-s: Silent模式,不输出任何东西

image.png



使用podman参数信息


例如,我们只想返回docker.io/library/nginx:latest这个容器列表(额,,虽然说毫无暖用,但是我们可以看下curl对于map[string][]string的语法是怎样的,后面使用label的信息去抓取才能得心应手)


命令: curl -sG -X GET "http://127.0.0.1:8881/v3.4.4/libpod/images/json" --data-urlencode 'filters={"since":["docker.io/library/nginx:latest"]}' | jq

  • -s: Silent模式,不输出任何东西
  • -X: 指定该请求方式,例如: GETPOSTDELETE
  • -G: 使用http GET发送请求数据
  • since: 是podman api``filters定义的参数之一,镜像名称,可以为IDimagesname:tagimages@tag


image.png


list images会列出podman images,当镜像过多的时候,尽量使用filters去做赛选,不要将全部数据全部请求回服务器,然后由服务器做赛选,那样得不偿失。


搜索images

请求方式: GET

请求URL: 版本/libpod/images/search


使用podman搜索images

使用podman搜索官方发布的nginx


image.png



使用命令行搜索nginx且未官方发布的


命令: curl -G --data-urlencode 'filters={"is-official":["true"]}' '127.0.0.1:8881/v3.4.4/libpod/images/search?term=nginx' | jq

  • is-official: 在搜索镜像中,该参数为bool值,用于检索是否是官方发布的镜像
  • term: 搜索的容器关键词

命令含义: 搜索nginx镜像且未官方发布的


image.png




拉取镜像

请求方式: POST

请求路由: 版本号/libpod/images/pull


使用podman api拉取镜像

拉取一下redis容器

命令: curl -X POST http://127.0.0.1:8881/v3.4.4/libpod/images/pull?reference=docker.io/library/redis:latest&quiet=true&policy=newer

命令含义


  • reference: 指定镜像名称
  • quiet: 静默输出(层数pull省略了)
  • policy: 拉取规则 always(总是)、newer(更新时)、never(从不)、missing(没有的时候)
  • credentials: 认证,(username:password)
  • tlsVerify: 是否使用TLS验证,默认true ,私有库很多是没有做加密的,所以一般在拉取私有库镜像的时候,应当使用false


image.png



删除未使用的镜像


请求方式: POST

请求路由: 版本号/libpod/images/prune


使用podman api删除未使用的镜像

命令: curl -X POST http://127.0.0.1:8881/v3.4.4/libpod/images/prune?all=true

  • all: true: 删除全部未使用的镜像

image.png



删除容器


请求方式: DELETE

请求路由: 版本号/libpod/images/remove

删除容器,不仅可以想我们之前讲过的那样,删除未使用的镜像,还可以删除正常使用的镜像(启动该镜像的容器就会被停掉且删除掉)


我们看看具体操作呢


使用podman api强制删除镜像


删除命令: curl -X DELETE http://127.0.0.1:8881/v3.4.4/libpod/images/remove?images=docker.io/library/nginx&force=true

  • images: 指定要删除的容器
  • force: 强制删除(并且删除正在运行的容器)

image.png



导出镜像


请求方式: GET

请求路由: 版本号/libpod/images/镜像名称或ID/get

使用podman api也能导出镜像来,不过这玩意比较鸡肋

我们来尝试一下


查看镜像

image.png




使用podman api导入镜像


我们将使用podman apiredis导出至本地

命令: curl -X GET http://127.0.0.1:8881/v3.4.4/libpod/images/bba24acba395/get?compress=true -o redis.tar.gz

  • -o: 是 curl命令重定向到文件
  • compress: 压缩


image.png



完善shell脚本


我们一般使用的images的操作为 搜索镜像拉取镜像查看镜像清理未建立容器的镜像 以及 删除镜像 ,好的,我们完善下podman api shell小脚本

这里就展示核心代码以及代码成功了哈

掘金文章包含的代码案例在gitee上: gitee.com/pdudo/podma…


删除未被使用的镜像

核心代码

image.png


代码执行

image.png



搜索容器

代码


ac2ed575a66c17b8a09ec703a3812ac.jpg



执行代码

b397092e185ced0019b975a00553961.jpg




问题与解决


  1. 导出镜像在使用podman import导入的时候,没有问题,在使用podman api导入镜像的时候出问题了,该问题应该是curl的问题,我找了一下,都没找到好的解决方案

image.png

  1. linux shell 执行命令失败

传统命令: curl -sG http://127.0.0.1:8881/v3.0.0/libpod/images/search?term=redis&limits=3&noTrunc=true --data-urlencode 'filters={"is-official":["true"],"is-automated":["false"],"stars":["100"]}'


脚本中执行的命令: curl -sG 'http://127.0.0.1:8881/v3.0.0/libpod/images/search?term=redis&limits=3&noTrunc=true' --data-urlencode ''''filters={"is-official":["true"],"is-automated":["false"],"stars":["100"]}''''


该命令会导致filters失效,所以临时策略是 将命令输出到文件,然后再从文件读取命令并且执行。

这些东西看着简单,但是当实际操作的时候,就会出现很多问题,这恰恰锻炼了我,我也希望在工作和生活中,永远保持空杯心态,遇到不会的学习之,遇到会的巩固之。





相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
4月前
|
JSON API 开发工具
【Azure 应用服务】调用Azure REST API来获取 App Service的访问限制信息(Access Restrictions)以及修改
【Azure 应用服务】调用Azure REST API来获取 App Service的访问限制信息(Access Restrictions)以及修改
|
1月前
|
缓存 API 网络架构
掌握现代API开发:GraphQL vs REST
【10月更文挑战第24天】本文深入探讨了现代API开发中两种主流技术——GraphQL和REST的设计理念、技术特点及实际开发中的对比分析。GraphQL通过声明式数据请求和强类型系统提供更高的灵活性和性能,而REST则以其无状态特性和成熟的生态系统见长。文章还讨论了两者在客户端-服务器交互、安全性和工具支持方面的优劣,帮助开发者根据项目需求做出明智选择。
|
3月前
|
JSON 中间件 API
开发REST API3-11
开发REST API3-11
|
3月前
|
JSON JavaScript API
编写REST API
编写REST API
66 2
|
2月前
|
Java API Maven
使用 Smart-doc 记录 Spring REST API
使用 Smart-doc 记录 Spring REST API
61 0
|
4月前
|
存储 JSON API
【Azure 存储服务】使用REST API操作Azure Storage Table,删除数据(Delete Entity)
【Azure 存储服务】使用REST API操作Azure Storage Table,删除数据(Delete Entity)
【Azure 存储服务】使用REST API操作Azure Storage Table,删除数据(Delete Entity)
|
4月前
|
XML 安全 API
REST 和 SOAP API 有什么区别?
【8月更文挑战第31天】
249 0
|
4月前
|
JSON API 数据安全/隐私保护
哇塞!Django REST framework 太逆天啦!构建 API 服务从未如此轻松,你还不来试试?
【8月更文挑战第31天】Django REST framework(DRF)是基于Django框架的高效Web API开发工具,提供序列化、视图集、路由等功能,简化API构建流程。使用DRF可轻松实现数据的序列化与反序列化,并支持权限管理和认证机制以保障API安全。安装DRF只需通过`pip install djangorestframework`命令。要创建基本项目,先安装Django并创建新应用,定义模型、序列化器及视图集,最后配置路由。测试API时,可通过Postman发送HTTP请求验证功能。无论项目大小,DRF均能提供强大支持。
48 0
|
4月前
|
中间件 API 网络架构
Django后端架构开发:从匿名用户API节流到REST自定义认证
Django后端架构开发:从匿名用户API节流到REST自定义认证
47 0
|
4月前
|
API 网络架构 C++
【Azure Key Vault】使用REST API调用Azure Key Vault Secret的示例步骤
【Azure Key Vault】使用REST API调用Azure Key Vault Secret的示例步骤