Skip to content

Podman vs Docker : conteneurs rootless sans daemon

Brandon Visca
Date de publication:

💡 TL;DR

  • C’est quoi ? Podman est un moteur de conteneurs Linux daemonless et rootless, compatible CLI Docker
  • Pourquoi ? Pas de daemon root qui tourne en permanence, pas de socket Unix root exposé, sécurité renforcée par défaut
  • Comment ? Installe Podman, utilise podman à la place de docker, active le mode rootless et migre tes Compose existants

Tu connais Docker. Tu l’utilises tous les jours pour déployer tes services, tester des applis ou builder des images. C’est devenu l’outil standard de la containerisation.

Mais il y a un truc qui te chatouille depuis un moment : ce daemon qui tourne en permanence avec les droits root. Et ce socket Unix /var/run/docker.sock que chaque tuto te dit de monter dans tes conteneurs sans jamais vraiment expliquer pourquoi.

Bonne nouvelle : Podman existe. Et il fait exactement la même chose que Docker, sans daemon, sans root obligatoire, et avec une compatibilité de commandes quasi parfaite.

Dans cet article, on va voir ce qui différencie vraiment Podman de Docker, comment l’installer, comment l’utiliser au quotidien, et surtout si tu peux (et si tu dois) le remplacer complètement.

Docker, le daemon root qui pose problème

Docker est génial. Il a démocratisé les conteneurs et aujourd’hui c’est incontournable. Mais son architecture a une faille fondamentale pour la sécurité.

Quand tu installes Docker, tu installes un daemon (dockerd) qui tourne en permanence en tant que root. Ce daemon gère tout : le cycle de vie des conteneurs, le réseau, les volumes, les images. Et pour communiquer avec lui, le client Docker (docker) utilise un socket Unix situé à /var/run/docker.sock.

Le problème ? Ce socket appartient à root. Et quiconque a accès à ce socket a un contrôle total sur ta machine. C’est équivalent à donner les droits root sans mot de passe.

Tu veux voir à quel point c’est dangereux ? Monte ce socket dans un conteneur et exécute ça :

docker run -it -v /var/run/docker.sock:/var/run/docker.sock alpine sh

Depuis l’intérieur du conteneur, tu peux lister tous les conteneurs, lancer de nouveaux conteneurs avec --privileged, ou même monter le système de fichiers hôte. C’est une évasion de conteneur en une commande.

C’est pour ça que dans mon article sur comment sécuriser Docker, je parle beaucoup de limiter les accès et de ne jamais exposer ce socket à la légère.

Mais imagine un outil qui te donne les mêmes fonctionnalités, sans ce daemon root omniprésent. C’est exactement ce que fait Podman.

Qu’est-ce que Podman exactement ?

Podman est un moteur de conteneurs open-source développé par Red Hat. Il utilise la même technologie sous-jacente que Docker (les namespaces Linux, cgroups, et overlayfs), mais avec une architecture totalement différente.

La différence clé : Podman n’a pas de daemon.

Quand tu lances un conteneur avec Podman (podman run), le processus du conteneur est un processus fils de ton shell. Il n’y a pas de service root intermédiaire qui gère tout. C’est toi qui lances le conteneur, et le conteneur tourne avec tes droits.

Ça change tout :

Podman est aussi compatible avec l’API de Docker. Tu peux faire alias docker=podman et dans 90% des cas, ça fonctionne sans rien changer.

Installer Podman en 2 minutes

Fedora / RHEL / CentOS Stream

sudo dnf install -y podman podman-compose

Fedora est le terrain de jeu natif de Podman. L’intégration est parfaite.

Debian / Ubuntu

sudo apt update
sudo apt install -y podman podman-compose

Depuis Debian 12 et Ubuntu 22.04, Podman est dans les dépôts officiels. Pas besoin d’ajouter de PPA.

Arch Linux

sudo pacman -S podman podman-compose

Vérifier l’installation

podman --version
podman info

Tu devrais voir la version installée et des infos sur ton stockage, ton réseau, et ta config rootless.

Les commandes de base : Podman vs Docker

La magie de Podman, c’est que les commandes sont presque identiques à Docker. Voici les principales :

Commande DockerCommande PodmanDescription
docker runpodman runLancer un conteneur
docker pspodman psLister les conteneurs actifs
docker imagespodman imagesLister les images locales
docker buildpodman buildBuilder une image
docker pullpodman pullTélécharger une image
docker rmpodman rmSupprimer un conteneur
docker rmipodman rmiSupprimer une image
docker logspodman logsVoir les logs
docker execpodman execExécuter une commande dans un conteneur
docker networkpodman networkGérer les réseaux
docker volumepodman volumeGérer les volumes

Exemple concret : Tu veux lancer un serveur Nginx ?

podman run -d --name mon-nginx -p 8080:80 nginx:alpine

C’est exactement la même syntaxe qu’avec Docker.

Tu peux même créer un alias pour ne pas changer tes habitudes :

alias docker=podman

Mets ça dans ton ~/.bashrc ou ~/.zshrc et tu oublieras presque que tu n’utilises plus Docker.

Le mode rootless : le vrai game changer

Le mode rootless est l’avantage numéro un de Podman. Il te permet de lancer des conteneurs sans aucun droit root.

Comment ça marche ?

Quand tu fais podman run en tant qu’utilisateur normal, Podman crée un user namespace. À l’intérieur du conteneur, le processus pense tourner en tant que root (UID 0). Mais sur l’hôte, ce processus est en réalité exécuté avec ton UID utilisateur.

Podman utilise un mapping défini dans /etc/subuid et /etc/subgid pour cette traduction. Exemple de mapping :

brandon:100000:65536

Ça signifie que l’UID 0 dans le conteneur = UID 100000 sur l’hôte. L’UID 1 = 100001, etc. Si un attaquant arrive à sortir du conteneur, il se retrouve avec un UID sans aucun droit sur le système hôte.

Activer le mode rootless

Sur la plupart des distributions modernes, c’est déjà configuré. Vérifie :

cat /etc/subuid
cat /etc/subgid

Si ton utilisateur n’y figure pas, ajoute-le :

sudo usermod --add-subuids 100000-165535 --add-subgids 100000-165535 $USER

Puis teste :

podman run --rm alpine whoami
# retourne : root (mais root à l'intérieur du conteneur seulement)

Les limites du rootless

Ce n’est pas magique non plus. En mode rootless :

Mais pour 95% des usages quotidiens (héberger des services web, des bases de données, des outils), le rootless suffit amplement.

Si tu déploies des services Docker en production, le combo Podman rootless + un pare-feu comme nftables te donne une posture de sécurité bien supérieure à Docker classique.

Podman Compose : remplacer Docker Compose

Docker Compose est l’outil standard pour définir des stacks multi-conteneurs. Podman peut l’utiliser aussi, avec podman-compose.

Installation

Déjà fait si tu as suivi les commandes d’installation plus haut. Sinon :

pip3 install podman-compose

Utilisation

Prends ton docker-compose.yml habituel et remplace simplement la commande :

# Avant
docker compose up -d

# Après
podman-compose up -d

podman-compose lit le fichier docker-compose.yml, crée un pod Podman (groupe logique de conteneurs), et lance tes services.

Attention aux subtilités

Tout n’est pas 100% identique. Quelques pièges :

Si tu pars de zéro et que tu veux un guide complet pour structurer tes projets Docker, tu peux appliquer les mêmes principes avec Podman sans presque rien changer.

Tableau comparatif complet : Podman vs Docker

CritèreDockerPodman
ArchitectureDaemon client-serveurDaemonless, fork-exec direct
Mode rootlessPossible mais complexe (rootlesskit)Natif et simple dès l’installation
Socket Unix/var/run/docker.sock (root)Aucun socket root requis
Sécurité par défautNécessite des réglages manuelsRootless et namespaces par défaut
CLIdockerpodman (compatible à 99%)
Docker Composedocker compose natifpodman-compose (compatible)
OrchestrationDocker Swarm natifPas de Swarm, utilise Kubernetes ou systemd
ImagesCompatible OCICompatible OCI, utilise les mêmes registres
PodsNon natifNatif (un pod = groupe de conteneurs partageant le réseau)
Intégration systemdComplexeNative (tu peux générer des unités systemd)
Systèmes supportésLinux, macOS, WindowsLinux natif, macOS/Windows via machine virtuelle
ÉcosystèmeÉnorme, docs partoutGrandissant, très bien sur RHEL/Fedora

Le point le plus fort de Podman est clair : la sécurité par défaut. Docker te laisse tout ouvert et c’est à toi de verrouiller. Podman verrouille par défaut et c’est à toi d’ouvrir si besoin.

Migration de Docker vers Podman : le guide pratique

Tu veux basculer sans casser ton homelab ? Voici les étapes.

Étape 1 : Installe Podman en parallèle

Ne désinstalle pas Docker tout de suite. Garde-le en backup.

sudo dnf install -y podman podman-compose  # ou apt/podman

Étape 2 : Teste un conteneur simple

podman run --rm hello-world

Si ça marche, passe à la suite.

Étape 3 : Crée l’alias

echo 'alias docker=podman' >> ~/.bashrc
source ~/.bashrc

Étape 4 : Migre tes images

Podman peut utiliser les mêmes registres Docker Hub. Repull tes images :

podman pull nginx:alpine
podman pull postgres:16

Étape 5 : Migre tes volumes

Docker stocke ses volumes dans /var/lib/docker/volumes/. Podman rootless les stocke dans ~/.local/share/containers/storage/volumes/.

Pour un fichier de données simple (bind mount), aucun changement nécessaire. Si tu utilises des volumes nommés, tu devras recréer les données ou copier les dossiers.

Étape 6 : Migre ton Docker Compose

Copie ton docker-compose.yml et teste :

podman-compose up -d

Si tu as des erreurs réseau, ajoute explicitement le réseau dans ton Compose :

networks:
  mon-reseau:
    driver: bridge

Étape 7 : Remplace Docker par Podman

Une fois que tout est stable :

sudo systemctl stop docker
sudo systemctl disable docker
sudo dnf remove docker-ce docker-ce-cli  # ou apt remove

Conseil : Fais ça progressivement. Migre un service, attends une semaine, puis migre le suivant. Ne bascule pas tout en production d’un coup.

Les limites réelles de Podman

Podman n’est pas parfait. Voici les cas où Docker reste plus pertinent.

Docker Desktop sur macOS et Windows

Sur Linux, Podman est natif. Sur macOS et Windows, Docker Desktop est bien plus intégré et fluide. Podman existe sur ces OS via podman machine (une VM Linux), mais l’expérience est moins polie.

Si tu es sur Mac ou Windows et que tu veux juste faire tourner des conteneurs sans te prendre la tête, Docker Desktop reste le plus simple.

Docker Swarm

Podman ne remplace pas Docker Swarm. Si tu as un cluster Swarm avec plusieurs nœuds, tu dois migrer vers Kubernetes (ou utiliser d’autres outils d’orchestration).

Pour un homelab mono-serveur, ça ne change rien. Pour une infra multi-nœuds, c’est un vrai sujet.

Intégrations CI/CD

Beaucoup de pipelines CI/CD utilisent docker build et docker push. Podman est compatible (podman build, podman push), mais certains runners CI sont configurés spécifiquement pour Docker et nécessitent des ajustements.

Documentation et communauté

Docker a 10 ans d’avance sur la documentation. Quand tu cherches un problème sur Stack Overflow, 95% des réponses parlent de Docker. Avec Podman, tu dois parfois traduire mentalement la réponse.

Mais l’écart se réduit rapidement. Red Hat pousse fort sur Podman, et la documentation officielle est très complète.

Podman et systemd : l’intégration parfaite

Un truc génial avec Podman : il peut générer des unités systemd à la volée.

Tu as un conteneur qui tourne ? Génère un service systemd :

podman generate systemd --new --name mon-nginx --files

Ça crée un fichier container-mon-nginx.service que tu peux copier dans ~/.config/systemd/user/ et activer :

systemctl --user daemon-reload
systemctl --user enable --now container-mon-nginx

Ton conteneur démarre automatiquement au boot, géré par systemd, sans aucun droit root. C’est propre, c’est standard, et ça remplace avantageusement les hacks avec restart: unless-stopped dans Docker Compose quand tu veux une gestion de service propre.

Quand choisir Podman plutôt que Docker ?

Podman est clairement le meilleur choix dans ces situations :

Docker reste pertinent si :

Conclusion

Podman n’est pas un jouet expérimental. C’est un outil mature, utilisé en production par Red Hat et des milliers d’administrateurs système. Il fait tout ce que fait Docker, avec une sécurité fondamentalement meilleure grâce à son architecture rootless et daemonless.

Si tu débutes dans la containerisation, mon conseil est simple : commence par apprendre les bases avec Docker, car la documentation et les exemples sont partout. Mais dès que tu maîtrises les concepts, teste Podman. La migration est quasi transparente et le gain en sécurité est immédiat.

Pour un homelab ou un serveur de production, tourner des conteneurs sans daemon root et sans socket Unix exposé n’est pas un luxe. C’est une posture de sécurité de base que Podman te offre gratuitement. Docker est un excellent outil, mais Podman est l’évolution logique pour ceux qui prennent la sécurité au sérieux sans sacrifier la simplicité.

Next
Romm Docker : gestionnaire de ROMs et rétro-gaming auto-hébergé