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 :
- 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.targetExecStart : 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. - Recharger les configurations systemd pour qu'il prenne en compte le nouveau fichier de service :
# systemctl daemon-reload
- Activer le lancement du conteneur au démarrage de l'hôte :
# systemctl enable mycontainer.service
- Démarrer immédiatement le conteneur :
# systemctl start mycontainer.service
- 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