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'
curl
outil pour interagir avec lepodman restful
serveur , c'était très intéressant, cette fois nous allons continuer à voir l'curl
appel de l'outilpodman restful
et interagir avec lui.
Nous avons déjà appris comment démarrer podman api
, podman api
surveiller les vérifications, afficher podman api
les 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 shell
opération cette fois-ci. Examinons le cycle du conteneur. Nous allons probablement introduire podman api shell
les 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 shell
gadget
Avant d'exécuter la commande, voyons podman api
si elle est active
Commande:curl -s http://127.0.0.1:8881/v3.0.0/libpod/_ping
Nous podman
supprimons 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.conf
fichier, 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' busybox
image
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 nginx
miroir
Créer un conteneur
在创建容器的过程中,我发现 使用 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
查看一下容器列表
删除镜像
La suppression d'image et [Type de suppression de conteneur] utilisent également la méthode de DELETE
requê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 images
un 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 shell
le 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 api
existe 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 socket
de son utilisation aujourd'huitcp
je vais simuler
Environnement du système d'exploitation
podman
Version
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 json
configuration 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 api
pour 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
log
Je n'ai pas non plus trouvé de solution via la requête , et j'ajouterai le script plus tard.