Podman le moteur de conteneur alternatif à Docker
Mise à jour :
Les conteneurs sont devenus essentiels pour les environnements de développement, permettant le déploiement d’applications de manière rapide, portable et reproductible. Historiquement dominé par Docker, ce domaine a vu émerger d’autres outils répondant à des besoins spécifiques, notamment en matière de sécurité et de flexibilité.
Podman, acronyme de POD Manager, est une alternative open source qui se distingue par sa conception sans démon (daemonless), son exécution sans privilèges root (rootless) et son intégration native avec les pods, un concept clé de Kubernetes. Développé par Red Hat et soutenu par une large communauté, Podman se veut à la fois une solution moderne et compatible avec les outils existants comme Docker.
Pourquoi Podman est apparu
Il y a quelques années, Docker était très critiqué pour son manque de sécurité, principalement en raison de son architecture client-serveur avec un démon central (dockerd) qui doit s’exécuter en tant que root. Cette configuration posait des problèmes de sécurité importants.
En revanche, Podman a été conçu pour fonctionner sans démon (daemonless). Chaque commande exécutée avec Podman crée un processus isolé, ce qui élimine le besoin d’un démon central et améliore la sécurité globale du système.
Docker nécessite des privilèges root pour le démon, ce qui peut poser des risques de sécurité. Podman, quant à lui, permet une exécution rootless par défaut, réduisant ainsi les risques associés aux privilèges élevés.
De plus, Docker ne gère que des conteneurs individuels. Podman, en revanche, supporte nativement le concept de pods, emprunté à Kubernetes. Un pod dans Podman est composé d’un ou plusieurs conteneurs regroupés dans un espace de noms, un réseau et un contexte de sécurité uniques, offrant une gestion plus flexible et sécurisée des conteneurs.
Aspect | Docker | Podman |
---|---|---|
Architecture | Client-serveur avec démon (dockerd) | Sans démon (daemonless) |
Sécurité | Privilèges root nécessaires | Exécution rootless par défaut |
Gestion des conteneurs | Via le démon Docker | Conteneurs OCI directement |
Support des Pods | Non | Oui, nativement |
Syntaxe des commandes | docker <commande> | podman <commande> (compatible Docker) |
Intégration Kubernetes | Outils supplémentaires nécessaires | Intégration native via Podman Play |
Performances | Surcharge possible due au démon | Plus léger sans démon central |
Migration | Alias, compatibilité Dockerfiles, registres | Alias, compatibilité Dockerfiles, registres |
C’est quoi un pod pour Podman ?
Un pod dans Podman est un groupe de conteneurs qui partagent les mêmes ressources, notamment les espaces de noms, le réseau et le contexte de sécurité, similaire au concept de pod dans Kubernetes. Chaque pod inclut un conteneur spécial appelé “infra” ou “pause”, qui maintient les espaces de noms associés au pod et permet à Podman de connecter d’autres conteneurs au pod. Ce conteneur “infra” ne fait rien d’autre que de rester en veille, mais il est essentiel pour la gestion des ressources partagées au sein du pod.
L’utilisation de pods présente plusieurs avantages, notamment la capacité de regrouper des conteneurs qui doivent interagir étroitement. Par exemple, si vous avez plusieurs conteneurs nécessitant l’accès à une base de données MariaDB, vous pouvez les placer dans un même pod. Ainsi, ces conteneurs peuvent communiquer entre eux via l’adresse localhost du pod, sans exposer la base de données sur un réseau accessible, renforçant ainsi la sécurité.
En résumé, les pods dans Podman offrent une gestion flexible et sécurisée des conteneurs, en permettant à plusieurs conteneurs de partager des ressources communes tout en maintenant une isolation appropriée.
Installation de Podman
Installation de Podman sur Linux
Podman est largement pris en charge sur les principales distributions Linux, et peut être installé via les gestionnaires de paquets intégrés de ces systèmes. Toutefois, il arrive que les versions disponibles dans les dépôts officiels ne soient pas les plus récentes. Si vous avez besoin des dernières fonctionnalités ou correctifs, il est possible de compiler Podman directement depuis son code source.
Installation depuis les dépôts officiels
Les dépôts des distributions Linux fournissent souvent une version de Podman qui est testée pour garantir sa stabilité dans l’environnement concerné. Voici comment procéder pour les distributions populaires :
-
Ubuntu/Debian :
-
Fedora (la distribution native de Podman, toujours à jour) :
-
CentOS/RHEL : Activez le dépôt extras ou EPEL (selon la version) :
-
Arch Linux : Podman est disponible dans les dépôts communautaires :
-
openSUSE : Utilisez zypper pour installer Podman :
Installer la dernière version en compilant le code source**
Si la version dans votre gestionnaire de paquets est obsolète ou que vous souhaitez accéder aux dernières fonctionnalités, vous pouvez installer Podman depuis son code source ↗.
Installation de Podman sous MacOs et Windows
Voici le texte corrigé :
Podman fonctionne sur Linux, MacOS, et Windows, mais il est
important de noter que sur MacOS et Windows, il repose sur un
environnement Linux virtualisé pour exécuter les conteneurs. Contrairement à
Linux, où Podman peut fonctionner directement sur le système, MacOS et Windows
ne disposent pas d’une infrastructure Linux native pour supporter les
conteneurs. Podman résout ce problème en déployant une machine virtuelle Linux
minimaliste à l’aide de l’outil intégré podman machine
.
Cette machine virtuelle fournit :
- Un noyau Linux pour assurer la compatibilité avec les conteneurs.
- Un environnement isolé pour exécuter des applications conteneurisées sans impacter le système hôte.
Avec Podman Machine, l’installation et la gestion de cette VM sont automatisées, simplifiant considérablement la configuration.
Installation sur MacOS
-
Installer Podman via Homebrew :
-
Créer une VM Linux avec Podman Machine :
Cela initialise une machine virtuelle basée sur une distribution Linux légère.
-
Démarrer la machine virtuelle :
-
Vérifier l’installation et la VM : Vérifiez que Podman est installé et que la VM est en cours d’exécution :
Vous devriez voir une sortie similaire à :
-
Utilisation : Une fois la machine virtuelle démarrée, vous pouvez utiliser Podman pour exécuter des conteneurs comme sur un système Linux natif.
Installation sur Windows
-
Installer Podman Desktop : Téléchargez Podman Desktop depuis le site officiel ↗. Ce logiciel facilite l’installation et l’utilisation de Podman sur Windows.
-
Configurer la machine virtuelle : Une fois installé, utilisez Podman Machine pour créer et démarrer une VM Linux :
-
Vérifier la configuration : Vérifiez que Podman est opérationnel et que la machine virtuelle fonctionne :
-
Interopérabilité : La machine virtuelle permet d’exécuter des commandes Podman identiques à celles utilisées sur un système Linux.
Vérification de l’installation de Podman
Il suffit de lancer la commande suivante :
Commandes de base de Podman
Comme dis plus haut, La cli de Podman est très très proche de celles de Docker. Donc ceux qui connaissent Docker peuvent passer à la section sur la gestion des Pods.
Création d’une image
La création des images est gérée par Buildah
qui est intégré comme l’est
BuildKit
dans Docker
. La commande build de Podman permet de construire
des images.
Je ne vais re-documenter cette partie, car elle est déjà disponible [ici]((/docs/conteneurs/images-conteneurs/build/buildah/).
Gestion des images
Rechercher des images dans les registry
Pour trouver des images dans la plupart des registry, on utilise la commande
search
:
Pour obtenir la liste des images officielles, on ajoute l’option --filter is-official
:
Pour obtenir la liste des tags disponibles, on ajoute l’option --list-tags
:
Télécharger une image
Pour télécharger l’image Ubuntu possédant le tag 3.18.4
depuis le Docker Hub,
on utilise la commande pull
:
Lister les images
Pour afficher toutes les images disponibles localement, on utilise la commande
images
:
Obtenir des informations sur une image
On utilisera la commande image inspect
:
Détruire des images
Pour détruire les images locales, on utilise la commande rmi
:
Gestion des conteneurs
Lancer une image de conteneur
Pour lancer par exemple une image de conteneur alpine
on utilise la commande
run
:
Il ne se passe rien, c’est normal ! Notre image ne possède pas d’instruction
CMD
ou ENTRYPOINT
.
Lancer le conteneur en mode interactif
Pour lancer une exécution interactive, c’est-à-dire qu’on se retrouve avec
l’invite de commande du conteneur, on utilise l’option -it
:
Pour sortir, il suffit soit de taper la commande exit
ou la séquence de touche
[CTRL] + [D].
Le mode interactif est très utile dans les phases de construction des images ainsi que dans celui du DEBUG.
Lancer le conteneur en tâche de fond
Pour lancer une image de conteneur en tache de fond, il faut utiliser l’option
-dt
. Pour cela, nous aurons besoin d’un conteneur httpd
:
Maintenant lançons le en exposant le port 80 :
Testons :
Ça fonctionne.
Nommer votre conteneur
Pour fixer le nom, il faut ajouter l’option --name
:
Lister les conteneurs en cours d’exécution
Pour lister les conteneurs en cours, il faut utiliser commande ps
:
Stopper/Démarrer un conteneur
Pour stopper un conteneur, il faut utiliser commande stop
:
Vérifions :
Pour vérifier que notre conteneur juste stoppé, il faut utiliser l’option -a
à
la commande ps
:
Relançons le conteneur my-httpd
:
Afficher les logs d’un conteneur
Pour afficher les logs du conteneur, on utilise la commande logs
:
Se connecter à un conteneur en cours d’exécution
Pour se connecter à un conteneur tournant en tache de fond :
Détruire un conteneur
Pour détruire un conteneur, il faut utiliser la commande rm
:
Cela n’a pas fonctionné, car le conteneur est en cours d’utilisation. Pour
forcer la destruction, il faut ajouter l’option -f
:
Faire le ménage
Attention, Podman comme Docker utilise pas mal d’espace disque.
Heureusement, nous avons des commandes pour contrôler l’évolution de
l’utilisation de l’espace disque. À commencer par la commande system ps
.
Pour faire de la place, on utilise la commande system prune
:
Gestion des Pods sous Podman
Pour rappel, les pods sont des groupes de conteneurs qui partagent des
ressources. Les pods Podman sont la fonctionnalité qui distingue Podman
de Docker. Pour gérer les pods, il faut utiliser la commande podman pod
.
Créer un pod
Pour créer un pod, il faut utiliser la commande create
auquel on ajoute
l’option --name
pour le nommer :
L’exposition des ports se fait au niveau du pod et non du conteneur.
Attacher un conteneur à un pod
Pour attacher un conteneur à un pod, il faut, au moment du lancement du
conteneur, ajouter l’option --pod
:
Testons :
Cela fonctionne.
Les autres commandes
Les autres commandes sont identiques que celles utilisées pour la gestion des conteneurs.
Lister les pods
Pour lister les pods en cours, on utilise la commande ls
:
Problèmes courants
Podman est conçu pour être exécuté sans privilèges root
. Cependant,
certaines configurations peuvent nécessiter des ajustements pour fonctionner
correctement sans privilèges root
.
Des problèmes peuvent survenir lors de la configuration des réseaux de conteneurs. Il peut être nécessaire de configurer manuellement les réseaux ou de s’assurer que certaines règles de pare-feu sont correctement configurées.
Bien que Podman soit compatible avec les commandes et les images Docker, il peut y avoir des cas où des ajustements sont nécessaires pour faire fonctionner certaines images Docker sans modifications.
Conclusion
Que de progrès depuis mon dernier test. L’utilisation de Podman sur un
compte ne possédant pas les privilèges root
fonctionne plutôt bien. Podman
est devenu une alternative crédible à Docker.