针对podman REST API 的curl调用-2

简介: 针对podman REST API 的curl调用-2

昨天已经使用了利用curl工具 与 podman restful 服务器交互,非常有趣吧,这次我们继续来看curl工具调用podman restful并且与之交互。


我们之前已经学习了,如何启动podman apipodman api监控检查 、 查看podman api服务器信息 以及 查看podman images。我将代码上传到了该shell小工具也上传到了gitee哈,代码并同步更新。

我们本次继续来讲述podman rest api shell操作,我们来看一下容器的周期,我们大概会按照如下进程来介绍podman api shell的调用: 拉取镜像、创建容器、启动容器 、列出容器、停止容器、删除容器、删除镜像


还是和之前一致,我们先使用命令大致过一次操作,然后再丰富我们的shell小工具

在操作命令之前,我们先看podman api是否存活

命令: curl -s http://127.0.0.1:8881/v3.0.0/libpod/_ping

image.png

我们先将podman实验环境的的容器 和 镜像全部删除,并且查看

命令:

podman images

podman ps -a


image.png



命令操作


拉取镜像

我们通常拉取镜像,默认有如下几种源

image.png


当我们选择某个源后,该记录会记录到/var/cache/containers/short-name-aliases.conf文件中,以便后续拉取镜像时,不会出现交互选择。

大概内容是这样的,容器名称="仓库"

image.png


拉取镜像url: images/pull

协议: POST

核心参数: reference


例如

我们想拉取busybox镜像

curl -XPOST http://127.0.0.1:8881/v3.0.0/libpod/images/pull?reference='docker.io/library/busybox:latest'

image.png


查看镜像

image.png

再拉一个nginx 镜像



创建容器


在创建容器的过程中,我发现 使用 tcppodman进行通信的时候,会出现问题,比如 端口映射不成功,搞了好久。。。最后使用socket去尝试一下,又可以了,,,靠,还是有坑呀,这个还有待验证,所以,我们采取socket进行通信


我们使用containers/create来创建容器,配置非常多,本次就演示创建一个最简单的容器,启动一个nginx,并且将端口 9982 映射进容器中

检查宿主机端口9982


image.png


创建待会要Postjson文件postFiles.json

image.png


内容为

{
  "Image": "docker.io/library/nginx",
  "ExposedPorts": {
    "80/tcp": {}
  },
  "HostConfig": {
    "PortBindings": {
      "80/tcp": [
        {
          "HostIp": "",
          "HostPort": "9982"
        }
      ]
    }
  }
}



使用命令curl -X POST -H 'Content-Type: application/json' -d @postFiles.json --unix-socket /tmp/podman.sock http://d/containers/create来启动容器

curl参数简介

  • -X: 指定请求方式,这里为 POST
  • -H: 指定header , 这里为 Content-Type: application/json
  • -d: 这里指的是上传的数据格式
  • @: 这里指的是从文件中上传,后面跟着文件即可


image.png

利用podman来看一下容器的信息

命令: podman ps -a

image.png

可以发现已经创建成功了,只不过状态是 Created而言



列出容器

我们使用/containers/json?all=true来查看全部容器

  • all=true 为列出所有容器

那我们来查看一下容器

命令: curl -s --unix-socket /tmp/podman.sock http://d/containers/json?all=true | jq

image.png



启动容器

我们使用containers/[name]/start来启动容器

例如,我们启动 frosty_goodall 容器

image.png


我们使用podman ps查看一下

image.png

可以看到,容器已经启动了

我们使用curl访问一下看看是否正常返回nginx信息呢?


image.png

发现正常,赞。



停止容器


和【启动容器】类似,使用url: containers/[name]/stop来停止容器

我们尝试下

命令: curl -X POST -s --unix-socket /tmp/podman.sock http://d/containers/frosty_goodall/stop

image.png


再使用podman查看一下容器

image.png

发现容器已经停止掉了



删除容器


删除容器使用的请求方式为DELETE

url: containers/容器名称

命令: curl -X DELETE -s --unix-socket /tmp/podman.sock http://d/containers/frosty_goodall

image.png

我们再次使用podman查看一下容器列表

image.png



删除镜像


镜像删除和【容器删除类型】,也是使用 DELETE请求方式

我们查看一下images

image.png

我们删除一下docker.io/library/busybox

命令: curl -X DELETE -s --unix-socket /tmp/podman.sock http://d/images/docker.io/library/busybox

image.png

我们使用podman images来查看一下镜像

image.png

发现果然被删除了



问题和总结


本来还想继续完善podman api shell小工具的

结果遇到问题了,我来描述一下问题吧

我们之前介绍过,podman api有2种调用方式,其一就是使用 tcp ,其二就是使用unix socket,但是当今天在使用tcp时候去创建容器的时候有问题

我来模拟一下


操作系统环境

image.png


podman版本

image.png


我们启动podman api``tcp

命令: podman --log-level=debug system service -t0 tcp:127.0.0.1:8881

检测api是否正常

image.png


发现正常

我们使用上面的json配置来创建容器

image.png

image.png


创建好后,我们发现,端口映射没了。。。

我们使用podman api来启动容器

image.png


启动之后,发现端口映射,还是没有

之后就切换至 socket,然后再来创建容器,就可以了,就这玩意耽搁我一段时间

我也通过查询相关log,没有发现解决方案,后面脚本,再补充吧。




相关文章
|
27天前
|
缓存 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
61 2
|
2月前
|
Java API Maven
使用 Smart-doc 记录 Spring REST API
使用 Smart-doc 记录 Spring REST API
51 0
|
4月前
|
XML 安全 API
REST 和 SOAP API 有什么区别?
【8月更文挑战第31天】
206 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均能提供强大支持。
46 0
|
4月前
|
中间件 API 网络架构
Django后端架构开发:从匿名用户API节流到REST自定义认证
Django后端架构开发:从匿名用户API节流到REST自定义认证
43 0
|
14天前
|
JSON API 数据格式
淘宝 / 天猫官方商品 / 订单订单 API 接口丨商品上传接口对接步骤
要对接淘宝/天猫官方商品或订单API,需先注册淘宝开放平台账号,创建应用获取App Key和App Secret。之后,详细阅读API文档,了解接口功能及权限要求,编写认证、构建请求、发送请求和处理响应的代码。最后,在沙箱环境中测试与调试,确保API调用的正确性和稳定性。
|
26天前
|
供应链 数据挖掘 API
电商API接口介绍——sku接口概述
商品SKU(Stock Keeping Unit)接口是电商API接口中的一种,专门用于获取商品的SKU信息。SKU是库存量单位,用于区分同一商品的不同规格、颜色、尺寸等属性。通过商品SKU接口,开发者可以获取商品的SKU列表、SKU属性、库存数量等详细信息。
|
27天前
|
JSON API 数据格式
店铺所有商品列表接口json数据格式示例(API接口)
当然,以下是一个示例的JSON数据格式,用于表示一个店铺所有商品列表的API接口响应

热门文章

最新文章

下一篇
无影云桌面