Podman est une plate-forme de conteneurs gratuite et open source conçue pour développer, gérer et déployer des conteneurs et des pods sur un environnement Linux. Redhat a développé Podman en 2018. C'est un moteur de conteneurisation qui fonctionne différemment de Docker. Podman ne dépend pas d'un démon pour fonctionner, contrairement à Docker qui utilise Docker CLI et le démon Docker. Être dépendant d'un démon conduit à un point de défaillance unique.
Podman est conçu selon les normes OCI (Open Container Initiative) qui permettent à Podman d'interagir directement avec le noyau, les conteneurs et les images. Il est également plus sécurisé que Docker car il ne nécessite pas d'accès root. Podman peut être utilisé en remplacement direct de Docker, car les deux sont conformes à l'OCI.
Cet article vous montrera comment installer Podman et l'utiliser pour créer et gérer des images et des conteneurs.
Prérequis
-
Un serveur basé sur Rocky Linux
-
Un utilisateur non sudo avec des privilèges root.
-
Assurez-vous que le serveur est mis à jour.
$ sudo dnf update
Installer Podman
Podman est inclus dans les container-tools
module, ainsi que Buildah et Skopeo. Il est également disponible dans le référentiel AppStream pour Rocky Linux 8. Nous utiliserons la méthode du module.
Installez Podman à l'aide du dnf module
commande.
$ sudo dnf module install container-tools
Vérifiez la version de Podman pour voir si elle est correctement installée.
$ podman --version podman version 3.2.3
Rechercher et télécharger des images de conteneur
Pour rechercher l'image de Nginx, utilisez la commande suivante.
$ podman search nginx
Dans la sortie, vous verrez le nom du registre d'où provient l'image et une description des images.
Pour télécharger l'image, utilisez l'une des commandes suivantes.
$ podman pull docker.io/library/nginx OR $ podman pull nginx
Vous pouvez afficher les images téléchargées via la commande suivante.
$ podman images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/library/nginx latest f8f4ffc8092c 3 days ago 138 MB
Exécuter des conteneurs
Utilisez la commande suivante pour exécuter un conteneur à l'aide de l'image Nginx. Nous avons nommé le conteneur webserver .
$ podman run -d --name webserver nginx
Nous pouvons utiliser la même image pour lancer un autre conteneur avec un nom différent.
$ podman run -d --name webserver2 nginx
Nous pouvons lancer un nombre illimité de conteneurs en utilisant la même image.
Répertorier et arrêter les conteneurs
Pour répertorier tous les conteneurs en cours d'exécution, utilisez la commande suivante.
$ podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 19b6668bc627 docker.io/library/nginx:latest nginx -g daemon o... 31 seconds ago Up 31 seconds ago webserver 35a286ba5a55 docker.io/library/nginx:latest nginx -g daemon o... 2 seconds ago Up 3 seconds ago webserver2
Arrêtez le conteneur en cours d'exécution.
$ podman stop webserver webserver
Vérifiez s'il s'est arrêté.
$ podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 35a286ba5a55 docker.io/library/nginx:latest nginx -g daemon o... About a minute ago Up About a minute ago webserver2
Pour lister tous les conteneurs, y compris ceux arrêtés, vous devez utiliser -a
drapeau.
$ podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 19b6668bc627 docker.io/library/nginx:latest nginx -g daemon o... 2 minutes ago Exited (0) 35 seconds ago webserver 35a286ba5a55 docker.io/library/nginx:latest nginx -g daemon o... About a minute ago Up About a minute ago webserver2
Démarrer un conteneur arrêté
Utilisez la commande suivante pour démarrer un conteneur arrêté.
$ podman start webserver webserver
Vérifiez s'il a démarré.
$ podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 19b6668bc627 docker.io/library/nginx:latest nginx -g daemon o... 3 minutes ago Up 16 seconds ago webserver 35a286ba5a55 docker.io/library/nginx:latest nginx -g daemon o... 2 minutes ago Up 2 minutes ago webserver2
Supprimer le conteneur
Vous devez arrêter un conteneur avant de le supprimer.
$ podman stop webserver2
Supprimez le conteneur.
$ podman rm webserver2
Vous pouvez supprimer un conteneur en cours d'exécution en utilisant le --force
drapeau.
$ podman rm webserver2 --force 35a286ba5a553d5f88e3d9795780f893cfb58bf4a126c4912d1ec56b9d0e5a27
Tuer le conteneur
Arrêter et tuer un conteneur sont deux choses différentes qui aboutissent finalement au même résultat. La différence est que l'arrêt d'un conteneur le ferme gracieusement tandis que l'arrêt d'un conteneur le ferme de force, entraînant une perte de données.
Utilisez la commande suivante pour tuer le conteneur.
$ podman kill -s 9 webserver2
La commande ci-dessus utilise le SIGNAL 9 (SIGKILL)
option pour tuer le conteneur.
Pour tuer tous les conteneurs, utilisez --all
ou -a
flag et pour tuer uniquement le dernier conteneur, utilisez le --latest
ou -l
drapeau.
Supprimer l'image
Vous pouvez supprimer les images en utilisant le rmi
commande.
$ podman rmi registry.redhat.io/rhel8/rsyslog
Vous pouvez supprimer plusieurs images en les séparant par des virgules.
$ podman rmi registry.redhat.io/rhel8/rsyslog registry.redhat.io/ubi8/ubi
Pour supprimer toutes les images de votre système, utilisez le -a
drapeau.
$ podman rmi -a
Afficher les journaux du conteneur
Pour afficher les journaux du conteneur, utilisez la commande suivante.
$ podman logs webserver /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf 10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh /docker-entrypoint.sh: Configuration complete; ready for start up ......
Vous pouvez restreindre les journaux aux 5 dernières lignes en utilisant le --tail
option.
$ podman logs --tail=5 webserver 2021/10/05 10:13:52 [notice] 1#1: built by gcc 8.3.0 (Debian 8.3.0-6) 2021/10/05 10:13:52 [notice] 1#1: OS: Linux 4.18.0-305.19.1.el8_4.x86_64 2021/10/05 10:13:52 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 262144:262144 2021/10/05 10:13:52 [notice] 1#1: start worker processes 2021/10/05 10:13:52 [notice] 1#1: start worker process 23
Par défaut, vous n'obtiendrez aucun horodatage sur les journaux. Utilisez le -t
flag pour ajouter des horodatages à vos journaux.
$ podman logs -t webserver 2021-10-05T09:25:02.026967459Z /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration 2021-10-05T09:25:02.026967459Z /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ 2021-10-05T09:25:02.033956297Z /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh 2021-10-05T09:25:02.043751152Z 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf 2021-10-05T09:25:02.064561317Z 10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf .....
Inspection des conteneurs
L'inspection d'un conteneur imprimera les informations sur un conteneur.
$ podman inspect webserver [ { "Id": "19b6668bc6278a66b3ffc98ae1515af25f5bebcd20bf26de803cae41c4485f59", "Created": "2021-10-05T09:25:01.784949744Z", "Path": "/docker-entrypoint.sh", "Args": [ "nginx", "-g", "daemon off;" ], "State": { "OciVersion": "1.0.2-dev", "Status": "running", "Running": true, "Paused": false, "Restarting": false, "OOMKilled": false, "Dead": false, "Pid": 4423, ....
La commande par défaut imprimera une longue sortie au format JSON. Pour filtrer la sortie, vous devez utiliser le --format
option. Pour savoir quand le conteneur a été démarré, exécutez la commande suivante.
$ podman inspect webserver --format '{{.State.StartedAt}}' 2021-10-05 10:13:52.794806322 +0000 UTC
Accéder à Container Shell
Vous pouvez accéder à l'invite Shell de n'importe quel conteneur à l'aide de exec
option.
$ podman exec -it webserver2 /bin/bash
Pods
Podman a une fonctionnalité unique qui manque à Docker. Podman peut créer des pods à partir de conteneurs qui fonctionnent ensemble. Cela vous permet de gérer plusieurs conteneurs de manière agrégée.
Pour créer un pod, utilisez la commande suivante.
$ podman pod create --name mypod
Ajoutez les conteneurs au pod nouvellement créé.
$ podman run --pod mypod --name myimage1 image:latest $ podman run --pod mypod --name myimage2 diff-image:latest
Vous pouvez désormais gérer les conteneurs à l'aide de simples commandes sur une seule ligne.
$ podman kill mypod # Kill all containers $ podman restart mypod # Restart all containers $ podman stop mypod # Stop all containers $ podman pod ps # List all pods $ podman pod top mypod # Display running processes in a pod $ podman pod inspect mypod # Inspect a Pod $ podman pod rm mypod # Remove the pod
Conclusion
Ceci conclut notre tutoriel sur l'installation et l'utilisation de Podman pour exécuter des conteneurs. Il y a beaucoup de choses que vous pouvez faire avec Podman que nous n'avons pas couvertes. Si vous avez des questions, postez-les dans les commentaires ci-dessous.