Podman : alternative rootless à Docker — installation et migration

12 mai 2026 — par admin_libra

Docker a longtemps dominé le paysage des conteneurs Linux, mais il traîne un défaut structurel : son daemon central dockerd tourne en root et ouvre un socket système que n’importe quel processus autorisé peut exploiter pour obtenir des privilèges root sur la machine hôte. Podman (Pod Manager), développé par Red Hat et la communauté open source, propose une architecture radicalement différente : pas de daemon, pas de root par défaut, et une compatibilité quasi-totale avec l’interface de Docker.

Depuis RHEL 8, Podman est le moteur de conteneurs officiel de l’écosystème Red Hat — Docker n’y est tout simplement pas supporté. La version 5.x, disponible depuis 2024, consolide cette maturité avec une intégration systemd native, le support complet des pods et une compatibilité OCI exemplaire. Cet article vous guide à travers l’installation, les fondamentaux du mode rootless, et la migration depuis un environnement Docker existant.

Que vous administriez un serveur de production, un serveur partagé multi-utilisateurs ou un pipeline CI/CD, les garanties de sécurité apportées par Podman méritent sérieusement d’être considérées.

Pourquoi choisir Podman plutôt que Docker ?

L’argument central de Podman est la sécurité par architecture. Là où Docker délègue l’exécution de chaque conteneur à un daemon root unique, Podman lance chaque conteneur comme un processus enfant direct de l’utilisateur courant. Le tableau ci-dessous résume les différences fondamentales :

Aspect Docker Podman
Daemon central dockerd en root Aucun daemon
Socket /var/run/docker.sock (root) /run/user/$UID/podman/podman.sock
Processus conteneur Enfant de dockerd (root) Processus utilisateur direct
Mode rootless Opt-in depuis Docker 20.10 Activé par défaut
User namespaces Non par défaut Oui par défaut
Pods natifs Non Oui (comme Kubernetes)
Intégration systemd Limitée Quadlet (natif)

Le mode rootless expliqué

En mode rootless, Podman exploite les user namespaces du noyau Linux pour mapper les UIDs des processus conteneurisés vers des UIDs non-privilégiés sur l’hôte. Un processus qui « s’échappe » d’un conteneur se retrouve avec les droits d’un utilisateur ordinaire — sans aucun accès root réel sur la machine.

# Lancer un conteneur sans aucun sudo
podman run --rm -it nginx:alpine

# Vérifier l'UID réel sur l'hôte (UID non-privilégié mappé)
podman run --rm alpine id
# Affiche : uid=0(root) gid=0(root) — root dans le conteneur
# mais UID 100000+ sur l'hôte grâce au user namespace

Installation de Podman

Ubuntu 20.10+ et Debian 11+

Podman est disponible directement dans les dépôts officiels des distributions récentes :

sudo apt update
sudo apt install -y podman
podman --version
# → podman version 5.x

Pour Debian 10 ou Ubuntu 20.04, ajoutez le dépôt Kubic (project OBS) :

VERSION_ID=$(. /etc/os-release; echo $VERSION_ID)
echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/Debian_${VERSION_ID}/ /" 
  | sudo tee /etc/apt/sources.list.d/kubic.list

curl -fsSL "https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/Debian_${VERSION_ID}/Release.key" 
  | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/kubic.gpg

sudo apt update && sudo apt install -y podman

Fedora, RHEL, CentOS Stream

sudo dnf install -y podman
podman --version
# → podman version 5.8.2

Commandes essentielles : Docker vs Podman

La compatibilité CLI est quasi-totale. Voici les commandes les plus utilisées :

Docker Podman
docker run podman run
docker ps podman ps
docker build podman build
docker pull / push podman pull / push
docker exec podman exec
docker logs podman logs
docker network podman network
docker volume podman volume
docker inspect podman inspect
docker-compose up podman-compose up

Migration depuis Docker

Alias rapide pour une transition transparente

La migration la plus simple consiste à ajouter un alias dans votre shell :

# Dans ~/.bashrc ou ~/.zshrc
alias docker=podman
alias docker-compose=podman-compose
source ~/.bashrc

# Vos scripts existants fonctionnent sans modification
docker run --rm hello-world
docker ps
docker images

Certaines distributions proposent un paquet dédié qui crée ces alias automatiquement :

# Fedora/RHEL
sudo dnf install podman-docker

# Ubuntu/Debian
sudo apt install podman-docker

Migrer docker-compose vers podman-compose

podman-compose implémente la Compose Specification en utilisant Podman comme moteur. Vos fichiers docker-compose.yml existants sont utilisables sans modification :

# Installation
sudo dnf install -y podman-compose      # Fedora/RHEL
sudo apt install -y podman-compose      # Ubuntu/Debian
# ou via pip3
pip3 install podman-compose

# Utilisation identique à docker-compose
podman-compose up -d
podman-compose ps
podman-compose logs -f
podman-compose down

Passerelle vers Kubernetes avec podman kube

Podman offre une fonctionnalité unique : générer du YAML Kubernetes valide depuis vos conteneurs existants, facilitant une migration progressive vers l’orchestration :

# Créer un pod avec plusieurs conteneurs
podman pod create --name mon-app -p 8080:80
podman run -dt --pod mon-app nginx:alpine
podman run -dt --pod mon-app redis:alpine

# Générer le YAML Kubernetes depuis le pod
podman kube generate mon-app -f mon-app.yaml

# Déployer depuis le YAML (sans Kubernetes !)
podman kube play mon-app.yaml

# Arrêter et supprimer via le YAML
podman kube down mon-app.yaml

Gestion des services avec Quadlet (intégration systemd)

Podman s’intègre nativement avec systemd grâce à Quadlet, qui remplace l’ancienne commande podman generate systemd (dépréciée depuis Podman 4.4). Quadlet génère automatiquement des unités systemd à partir de fichiers de configuration simples au format INI.

Les fichiers portent l’extension .container et se placent dans :

  • Système (root) : /etc/containers/systemd/
  • Utilisateur (rootless) : $HOME/.config/containers/systemd/

Exemple : Nginx géré par systemd

Créez le fichier /etc/containers/systemd/nginx.container :

[Unit]
Description=Nginx containerisé
After=network-online.target
Wants=network-online.target

[Container]
Image=docker.io/library/nginx:alpine
PublishPort=8080:80
Volume=/srv/www:/usr/share/nginx/html:ro,z
ContainerName=nginx-prod

[Service]
Restart=always
TimeoutStartSec=60

[Install]
WantedBy=multi-user.target
# Recharger systemd — génère automatiquement nginx.service
sudo systemctl daemon-reload

# Activer et démarrer
sudo systemctl enable --now nginx.service

# Vérifier le statut
sudo systemctl status nginx.service

Mode rootless avec lingering

mkdir -p ~/.config/containers/systemd/

Créez ~/.config/containers/systemd/mon-app.container :

[Unit]
Description=Mon application
After=network-online.target

[Container]
Image=quay.io/monorg/mon-app:latest
PublishPort=3000:3000
Environment=NODE_ENV=production

[Service]
Restart=on-failure

[Install]
WantedBy=default.target
systemctl --user daemon-reload
systemctl --user enable --now mon-app.service

# Démarrage automatique même sans session active
loginctl enable-linger $USER

Bonnes pratiques en production

Registres de confiance

Configurez /etc/containers/registries.conf pour définir vos registres préférés et éviter des pull ambigus :

[registries.search]
registries = ['registry.access.redhat.com', 'quay.io', 'docker.io']

[registries.insecure]
registries = []

Volumes et SELinux

# Créer un volume nommé
podman volume create mes-donnees

# Monter avec :z pour le relabeling SELinux automatique
podman run -v mes-donnees:/data:z mon-image

Nettoyage et audit

# Supprimer images, conteneurs et volumes orphelins
podman system prune -a --volumes

# Vérifier l'espace disque utilisé par Podman
podman system df

# Inspecter la configuration de sécurité en vigueur
podman info | grep -A5 security

À lire également

Références

Index complet

Tous les articles (35)

Date Article Tags
27/05/2026 LXD 6.x : orchestration de conteneurs Linux avec profils et clustering administration clustering conteneurs 27/05/2026 Keepalived — VIP flottante et load balancing sans matériel dédié debian failover haute-disponibilité 27/05/2026 Btrfs sur Linux — snapshots, sous-volumes et compression en pratique administration btrfs compression 21/05/2026 CVE-2026-42945 (NGINX Rift) : analyse et remédiation sur Debian/Ubuntu cve debian heap-overflow 21/05/2026 Tuning kernel Linux — paramètres sysctl essentiels pour la production debian kernel mémoire 21/05/2026 DRBD : réplication de blocs entre deux serveurs en temps réel cluster debian drbd 15/05/2026 CVE-2026-23918 — vulnérabilité Apache 2.4.66 : analyse et correctifs sur Debian/Ubuntu (hors Debian 11) apache cve debian 15/05/2026 CVE-2026-31431 (Copy Fail) — Analyse et remédiation sur Debian/Ubuntu algif_aead copy-fail cve 12/05/2026 Pacemaker et Corosync — cluster haute disponibilité Linux cluster corosync debian 12/05/2026 WireGuard : monter un VPN mesh entre plusieurs serveurs Linux chiffrement linux mesh 12/05/2026 Netdata — monitoring temps réel sans configuration complexe alertes dashboard linux 12/05/2026 nftables en pratique — remplacer iptables sur Debian/Ubuntu debian firewall iptables 12/05/2026 Podman : alternative rootless à Docker — installation et migration conteneurs docker kubernetes 02/05/2026 Prometheus et Grafana sur Debian — installation, configuration et dashboards pratiques alertmanager dashboard debian 02/05/2026 Ansible : automatiser la gestion de serveurs Linux avec des playbooks administration ansible automation 28/04/2026 ZFS sur Linux : snapshots, clones et RAID-Z en pratique administration compression filesystem 28/04/2026 eBPF sur Linux : observabilité et traçage kernel avec bpftrace et BCC bcc bpftrace diagnostic 23/04/2026 Analyse de la mémoire sur Linux — vmstat, free, smem diagnostic mémoire monitoring 23/04/2026 Sécurité Linux — Firewall iptables et nftables firewall iptables nftables 23/04/2026 ZFS sur Linux — Installation et gestion avancée administration filesystem stockage 23/04/2026 Gestion des services avec systemd sur Debian et Ubuntu administration debian services 23/04/2026 Gestion des ressources cgroups v1/v2 avec LXC cgroups conteneurs lxc 23/04/2026 Centralisation logs avec ELK Stack — Elasticsearch, Kibana, Filebeat elasticsearch elk filebeat 23/04/2026 Supervision avec Zabbix 7.0 LTS sur Debian/Ubuntu debian monitoring supervision 23/04/2026 Plusieurs versions PHP-FPM sur Apache Debian/Ubuntu apache debian php-fpm 23/04/2026 Sécurisation avancée PHP-FPM — Multi-VirtualHosts Apache/Nginx apache nginx php-fpm 23/04/2026 Optimisation PHP-FPM — Guide de tuning d'un pool optimisation performance php-fpm 29/07/2025 Docker sur Debian/Ubuntu : Installation, Configuration et Utilisation conteneurs debian docker 03/07/2025 Serveur VPN WireGuard sous linux réseau sécurité vpn 03/07/2025 Authentification par clé publique sur un serveur SSH authentification cryptographie sécurité 27/06/2025 Surveillance et diagnostic d’un serveur Linux avec vmstat, iotop et htop diagnostic htop monitoring 27/06/2025 Mémoire : Utilisation des Huge Pages et implémentation hugepages mémoire noyau 27/06/2025 Mémoire Swap et paramétrage swappiness mémoire noyau performance 18/06/2025 Installation et Configuration des Conteneurs LXC sur Linux administration conteneurs lxc 18/06/2025 Gestion des journaux avec syslog et journalctl administration journalctl logs