Comment installer et utiliser Podman pour exécuter des conteneurs sur Rocky Linux 8

Podman est une plateforme de conteneurs gratuite et open-source construite pour développer, gérer et déployer des conteneurs et des pods sur l’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 la CLI de Docker et le démon de Docker. Le fait de dépendre d’un daemon entraîne 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ûr que Docker car il ne nécessite pas d’accès root. Podman peut être utilisé en remplacement de Docker puisque les deux sont conformes aux normes OCI.

Cet article te montrera comment installer Podman et l’utiliser pour créer et gérer des images et des conteneurs.

Conditions préalables

  1. Un serveur basé sur Rocky Linux

  2. Un utilisateur non-sudo avec des privilèges root.

  3. Assure-toi que le serveur est mis à jour.

    $ sudo dnf update
    

Installer Podman

Podman est inclus dans le module container-tools, avec Buildah et Skopeo. Il est également disponible dans le dépôt AppStream pour Rocky Linux 8. Nous allons utiliser la méthode du module.

Installe Podman à l’aide de la commande dnf module.

$ sudo dnf module install container-tools

Vérifie la version de Podman pour voir si elle est installée correctement.

$ podman --version
podman version 3.2.3

Recherche et téléchargement des images du conteneur

Pour rechercher l’image de Nginx, utilise la commande suivante.

$ podman search nginx

Podman Search Image Result

Dans la sortie, tu verras le nom du registre d’où provient l’image et une description des images.

Pour télécharger l’image, utilise l’une des commandes suivantes.

$ podman pull docker.io/library/nginx

OR

$ podman pull nginx

Tu peux afficher les images téléchargées à l’aide de 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

Utilise la commande suivante pour exécuter un conteneur utilisant 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.

Lister et arrêter les conteneurs

Pour répertorier tous les conteneurs en cours d’exécution, utilise 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ête le conteneur en cours d’exécution.

$ podman stop webserver
webserver

Vérifie 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 répertorier tous les conteneurs, y compris ceux qui sont arrêtés, tu dois utiliser le drapeau -a.

$ 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é

Utilise la commande suivante pour démarrer un conteneur arrêté.

$ podman start webserver
webserver

Vérifie 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 un conteneur

Tu dois arrêter un conteneur avant de le supprimer.

$ podman stop webserver2

Supprime le conteneur.

$ podman rm webserver2

Tu peux supprimer un conteneur en cours d’exécution en utilisant le drapeau --force.

$ podman rm webserver2 --force
35a286ba5a553d5f88e3d9795780f893cfb58bf4a126c4912d1ec56b9d0e5a27

Tuer le conteneur

Arrêter et tuer un conteneur sont deux choses différentes qui aboutissent finalement à la même chose. La différence est que le fait d’arrêter un conteneur le ferme gracieusement alors que le fait de tuer un conteneur le termine de force, ce qui entraîne une perte de données.

Utilise la commande suivante pour tuer le conteneur.

$ podman kill -s 9 webserver2

La commande ci-dessus utilise l’option SIGNAL 9 (SIGKILL) pour tuer le conteneur.

Pour tuer tous les conteneurs, utilise l’option --all ou -a et pour tuer uniquement le dernier conteneur, utilise l’option --latest ou -l.

Supprimer une image

Tu peux supprimer les images à l’aide de la commande rmi.

$ podman rmi registry.redhat.io/rhel8/rsyslog

Tu peux 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 ton système, utilise le drapeau -a.

$ podman rmi -a

Afficher les journaux des conteneurs

Pour afficher les journaux des conteneurs, utilise 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
......

Tu peux limiter les journaux aux 5 dernières lignes en utilisant l’option --tail.

$ 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, tu n’auras pas d’horodatage sur les journaux. Utilise l’option -t pour ajouter des horodatages à tes 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
.....

Inspecter les 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, tu dois utiliser l’option --format. Pour savoir quand le conteneur a été lancé, exécute la commande suivante.

$ podman inspect webserver --format '{{.State.StartedAt}}'
2021-10-05 10:13:52.794806322 +0000 UTC

Accéder au Shell du conteneur

Tu peux accéder à l’invite Shell de n’importe quel conteneur en utilisant l’option exec.

$ podman exec -it webserver2 /bin/bash

Pods

Podman possède une fonctionnalité unique qui fait défaut à Docker. Podman peut créer des Pods à partir de conteneurs qui fonctionnent ensemble. Cela te permet de gérer plusieurs conteneurs en même temps.

Pour créer un Pod, utilise la commande suivante.

$ podman pod create --name mypod

Ajoute les conteneurs au pod nouvellement créé.

$ podman run --pod mypod --name myimage1 image:latest
$ podman run --pod mypod --name myimage2 diff-image:latest

Tu peux maintenant gérer les conteneurs à l’aide de simples commandes d’une 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 tu peux faire avec Podman que nous n’avons pas couvertes. Si tu as des questions, poste-les dans les commentaires ci-dessous.

Vous aimerez aussi...