Les conteneurs sont au cœur de la technologie de conteneurisation, permettant d'exécuter des applications dans des environnements isolés.Techniquement, c'est grâce aux namespaces Linux que les conteneurs peuvent fonctionner comme s'ils étaient sur des systèmes séparés, même s'ils partagent le même noyau Linux avec l'hôte et d'autres conteneurs. Les Cgroups Linux complètent les namespaces en contrôlant les ressources système que les processus peuvent utiliser. Ils permettent de limiter, de prioriser, d'isoler, de contrôler et de comptabiliser l'utilisation des ressources telles que le CPU, la mémoire, le stockage, et la bande passante réseau. 

Exécuter un conteneur

Si on lance un conteneur sans pseudo TTY et sans spécifier de processus, il risque de ne rien se produire. Le conteneur va en effet se lancer puis se fermer immédiatement. Il faut donc soit spécifier un processus à lancer dans le conteneur, soit allouer un pseudo TTY.
Pour créer et lancer directement un conteneur à partir d'une image, on peut utiliser les commandes suivantes :

# podman run -d --name c1 docker.io/busybox sleep infinity
# podman run -dt --name c1 docker.io/busybox

crée et lance le conteneur "c1" basé sur l'image  "docker.io/busybox" et exécute à l'intérieur la commande "sleep infinity"

  • -d signifie que le conteneur s'exécutera en arrière-plan (mode détaché).
  • -t alloue un pseudo-TTY, ce qui permet à l'utilisateur d'intéragir avec le conteneur

Il est également possible de décomposer l'opération en deux étapes consistant à créer puis lancer le conteneur :

# podman create --name c2 docker/:busybox sleep infinity
# podman start c2

Arrêter un conteneur

Pour stoper un conteneur, il suffit d'exécuter la commande suivante :

# podman stop c2

Pour arrêter tous les conteneurs, on peut lancer la commande suivante :

# podman rm -f $(podman ps -q)

Lister des conteneurs

Pour lister les conteneurs actifs :

# podman ps

Et pour lister tous les conteneurs, qu'ils soient actif ou inactifs :

# podman ps -a

Interagir avec un conteneur

Les commandes podman exec et podman attach permettent d'interagir avec des conteneurs en cours d'exécution, mais elles servent à des fins un peu différentes.

podman exec

La commande podman exec est utilisée pour exécuter une commande à l'intérieur d'un conteneur en cours d'exécution. On peut l'utiliser pour démarrer un shell interactif à l'intérieur du conteneur, exécuter un script, ou tout autre commande nécessaire pour gérer ou inspecter le conteneur de l'intérieur. La syntaxe de base ressemble à ceci :

# podman exec -it mon_conteneur /bin/bash

Ici, -it rend la session interactive et attache un terminal (TTY) à la commande qu'on exécute, ce qui est souvent nécessaire pour des shells interactifs ou des applications textuelles.

podman attach

La commande podman attach permet de se connecter au terminal (stdin, stdout, stderr) d'un conteneur en cours d'exécution. Elle est utile pour interagir avec des conteneurs qui exécutent des applications en mode interactif ou pour simplement afficher la sortie d'une application en cours d'exécution dans le conteneur. La syntaxe est la suivante :

# podman attach mon_conteneur


On choisit donc généralement exec quand on a besoin de faire quelque chose de nouveau dans un conteneur en cours et on opte pour attach quand on veut juste écouter ou interagir avec ce qui se passe déjà.

Gestion avec Systemd

Pour lancer automatiquement un conteneur Podman au démarrage de la machine, on peut utiliser systemd sous Linux, qui est un système d'initialisation et un gestionnaire de services. Pour configurer cela, on peut suivre les étapes suivantes :

  1. Créer un fichier de service systemd par exemple /etc/systemd/system/mycontainer.service et y ajouter le contenu suivant. Ce fichier décrit le service que l'on souhaite démarrer au démarrage et contient des directives sur la manière de le démarrer, de l'arrêter, et de le redémarrer :
    [Unit]
    Description=Mon conteneur Podman
    Wants=network-online.target
    After=network-online.target

    [Service]
    Restart=always
    ExecStart=/usr/bin/podman run --name mycontainer -d myimage
    ExecStop=/usr/bin/podman stop mycontainer
    ExecStopPost=/usr/bin/podman rm mycontainer

    [Install]
    WantedBy=multi-user.target

    ExecStart : Commande pour démarrer le conteneur.
    ExecStop : Commande pour arrêter le conteneur.
    ExecStopPost : Commande pour supprimer le conteneur après l'arrêt.
    Restart : Configure le redémarrage automatique du conteneur.

  2. Recharger les configurations systemd pour qu'il prenne en compte le nouveau fichier de service :
    # systemctl daemon-reload
  3. Activer le lancement du conteneur au démarrage de l'hôte :
    # systemctl enable mycontainer.service
  4. Démarrer immédiatement le conteneur :
    # systemctl start mycontainer.service
  5. Vérifier le status du conteneur :
    # systemctl status mycontainer.service

Liens

https://podman.io/docs
https://github.com/containers/podman/blob/main/docs/tutorials/basic_networking.md

Ajouter un commentaire

Joomla templates by a4joomla