appel curl à l'API REST podman - 2

Prenez l'habitude d'écrire ensemble ! C'est le 14ème jour de ma participation au "Nuggets Daily New Plan·April Update Challenge", cliquez pour voir les détails de l'événement .

Hier j'ai utilisé l' curloutil pour interagir avec le podman restfulserveur , c'était très intéressant, cette fois nous allons continuer à voir l' curlappel de l'outil podman restfulet interagir avec lui.

Nous avons déjà appris comment démarrer podman api, podman apisurveiller les vérifications, afficher podman apiles informations sur le serveur et afficher podman images. J'ai téléchargé le code sur le gadget shell et je l'ai également téléchargé sur gitee, le code est mis à jour de manière synchrone.

Nous allons continuer à parler de l' podman rest api shellopération cette fois-ci. Examinons le cycle du conteneur. Nous allons probablement introduire podman api shellles appels selon le processus suivant : tirer l'image, créer le conteneur, démarrer le conteneur, lister le conteneur, arrêter le conteneur, supprimer le conteneur, supprimer l'image.

Toujours comme avant, nous utilisons la commande pour effectuer l'opération à peu près une fois, puis enrichir notre shellgadget

Avant d'exécuter la commande, voyons podman apisi elle est active

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

Nous podmansupprimons d'abord tous les conteneurs et images de l'environnement expérimental, et vérifions

Commande:

podman images

podman ps -a

Opération de commande

tirer l'image

Nous tirons généralement des miroirs, et il y a les sources suivantes par défaut

Lorsque nous sélectionnons une source, l'enregistrement sera enregistré dans le /var/cache/containers/short-name-aliases.conffichier, de sorte que lorsque l'image sera extraite ultérieurement, il n'y aura pas de sélection interactive.

Probablement le contenu est comme ça,容器名称="仓库"

Tirez l'URL du miroir :images/pull

protocole:POST

Paramètres de base :reference

Par exemple

Nous voulons tirer l' busyboximage

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

Voir le miroir

tirer un autre nginxmiroir

Créer un conteneur

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

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

检查宿主机端口9982

创建待会要Postjson文件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查看一下容器列表

删除镜像

La suppression d'image et [Type de suppression de conteneur] utilisent également la méthode de DELETErequête

Allons vérifierimages

supprimonsdocker.io/library/busybox

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

Jetons podman imagesun coup d'œil au miroir en utilisant

J'ai découvert qu'il avait été supprimé

Questions et résumé

Je voulais continuer à améliorer podman api shellle gadget

Par conséquent, j'ai rencontré un problème. Permettez-moi de décrire le problème.

Nous avons déjà présenté qu'il podman apiexiste deux façons d'appeler, l'une consiste à utiliser tcp, l'autre à utiliser , mais il y a un problème lors de la création d'un conteneur lors unix socketde son utilisation aujourd'huitcp

je vais simuler

Environnement du système d'exploitation

podmanVersion

nous commençonspodman api``tcp

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

Vérifiez si l'API est normale

trouvé normal

Nous utilisons la jsonconfiguration ci-dessus pour créer le conteneur

Après la création, nous avons constaté que le mappage de port avait disparu. . .

Nous utilisons podman apipour démarrer le conteneur

Après le démarrage, le mappage de port est trouvé, mais il n'y a toujours pas

Ensuite, passez à socket, puis créez à nouveau le conteneur, c'est tout, cette chose va me retarder pendant un moment

logJe n'ai pas non plus trouvé de solution via la requête , et j'ajouterai le script plus tard.

Je suppose que tu aimes

Origine juejin.im/post/7086397468455206926
conseillé
Classement