昨天已经使用了利用curl
工具 与 podman restful
服务器交互,非常有趣吧,这次我们继续来看curl
工具调用podman restful
并且与之交互。
我们之前已经学习了,如何启动podman api
、podman 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
我们先将podman
实验环境的的容器 和 镜像全部删除,并且查看
命令:
podman images
podman ps -a
命令操作
拉取镜像
我们通常拉取镜像,默认有如下几种源
当我们选择某个源后,该记录会记录到/var/cache/containers/short-name-aliases.conf
文件中,以便后续拉取镜像时,不会出现交互选择。
大概内容是这样的,容器名称="仓库"
拉取镜像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'
查看镜像
再拉一个nginx
镜像
创建容器
在创建容器的过程中,我发现 使用 tcp
和podman
进行通信的时候,会出现问题,比如 端口映射不成功,搞了好久。。。最后使用socket
去尝试一下,又可以了,,,靠,还是有坑呀,这个还有待验证,所以,我们采取socket
进行通信
我们使用containers/create
来创建容器,配置非常多,本次就演示创建一个最简单的容器,启动一个nginx
,并且将端口 9982 映射进容器中
检查宿主机端口9982
创建待会要Post
的json
文件postFiles.json
内容为
{ "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: 这里指的是上传的数据格式
- @: 这里指的是从文件中上传,后面跟着文件即可
利用podman
来看一下容器的信息
命令: podman ps -a
可以发现已经创建成功了,只不过状态是 Created
而言
列出容器
我们使用/containers/json?all=true
来查看全部容器
all=true
为列出所有容器
那我们来查看一下容器
命令: curl -s --unix-socket /tmp/podman.sock http://d/containers/json?all=true | jq
启动容器
我们使用containers/[name]/start
来启动容器
例如,我们启动 frosty_goodall
容器
我们使用podman ps
查看一下
可以看到,容器已经启动了
我们使用curl
访问一下看看是否正常返回nginx
信息呢?
发现正常,赞。
停止容器
和【启动容器】类似,使用url: containers/[name]/stop
来停止容器
我们尝试下
命令: curl -X POST -s --unix-socket /tmp/podman.sock http://d/containers/frosty_goodall/stop
再使用podman
查看一下容器
发现容器已经停止掉了
删除容器
删除容器使用的请求方式为DELETE
url: containers/容器名称
命令: curl -X DELETE -s --unix-socket /tmp/podman.sock http://d/containers/frosty_goodall
我们再次使用podman
查看一下容器列表
删除镜像
镜像删除和【容器删除类型】,也是使用 DELETE
请求方式
我们查看一下images
我们删除一下docker.io/library/busybox
命令: curl -X DELETE -s --unix-socket /tmp/podman.sock http://d/images/docker.io/library/busybox
我们使用podman images
来查看一下镜像
发现果然被删除了
问题和总结
本来还想继续完善podman api shell
小工具的
结果遇到问题了,我来描述一下问题吧
我们之前介绍过,podman api
有2种调用方式,其一就是使用 tcp
,其二就是使用unix socket
,但是当今天在使用tcp
时候去创建容器的时候有问题
我来模拟一下
操作系统环境
podman
版本
我们启动podman api``tcp
命令: podman --log-level=debug system service -t0 tcp:127.0.0.1:8881
检测api是否正常
发现正常
我们使用上面的json
配置来创建容器
创建好后,我们发现,端口映射没了。。。
我们使用podman api
来启动容器
启动之后,发现端口映射,还是没有
之后就切换至 socket
,然后再来创建容器,就可以了,就这玩意耽搁我一段时间
我也通过查询相关log
,没有发现解决方案,后面脚本,再补充吧。