Aller au contenu
Conteneurs & Orchestration medium

Maîtriser Podman : conteneurs rootless, systemd et pods

11 min de lecture

logo podman

Podman est un moteur de conteneurs sans démon obligatoire (daemonless), pensé pour une utilisation Linux native : rootless par défaut, intégration propre à systemd via Quadlet, et support des pods façon Kubernetes. Sur macOS et Windows, il s'appuie sur Podman Machine (une VM Linux). Ce guide couvre la version stable 5.8 et signale les changements de Podman 6.

Retenez trois piliers (et un bonus) :

  1. Rootless : les conteneurs tournent avec les droits de votre utilisateur, via les user namespaces.
  2. Daemonless : pas de service central permanent pour gérer vos conteneurs au quotidien.
  3. Systemd-first : avec Quadlet, un conteneur devient un service propre (restart, logs, dépendances).
  4. Bonus, pods et kube play : regrouper des conteneurs façon Kubernetes et lancer des manifests sans cluster.

Pour le « pourquoi » et les détails d'architecture, voir les concepts Podman.

Objectif : valider que Podman tourne, savoir exposer un port, lire des logs, monter un volume, puis nettoyer.

Fenêtre de terminal
# Vérifier la version
podman version
# Lancer un conteneur nginx
podman run -d --name web -p 8080:80 docker.io/library/nginx:alpine
# Vérifier qu'il tourne
curl http://localhost:8080
# Voir les logs
podman logs web
# Tester un volume (SELinux : :Z)
podman run -d --name web2 -v ~/html:/usr/share/nginx/html:Z -p 8081:80 docker.io/library/nginx:alpine
# Nettoyer
podman rm -f web web2

L'objectif n'est pas une comparaison exhaustive, mais de vous aider à décider vite, puis de vous envoyer vers les guides.

Comparaison architecture Docker vs Podman

  • Vous voulez rootless par défaut (multi-utilisateurs, postes partagés, moindre risque).
  • Vous voulez des services systemd propres (serveur, self-hosting, edge).
  • Vous voulez rester proche de Kubernetes (pods, kube play, kube generate).
  • Vous voulez éviter un daemon central obligatoire sur la machine.
  • Votre quotidien dépend d'un Docker Compose complexe et d'intégrations « Docker-only ».
  • Vous êtes dans un contexte où l'écosystème Docker Desktop est imposé.

Le mode rootless est le gros avantage de Podman, mais il a des implications concrètes.

Podman utilise les user namespaces pour mapper les identités du conteneur vers des UID/GID non privilégiés sur l'hôte :

Hôte Conteneur
─────────────────────────────────────────────
UID 1000 (vous) UID 0 (root)
UID 100000-165535 (subuid) UID 1-65535
FrictionSymptômeRéflexe
Ports basbind: permission denied sur 80/443utiliser ≥1024 ou sysctl net.ipv4.ip_unprivileged_port_start
Volumesfichiers root:root ou permission denied--userns=keep-id ou options de volume
RéseauDNS ou perf surprenantsréseau dédié + backend adapté

En rootless, c'est souvent le réseau qui surprend. L'objectif : un réseau où les conteneurs se résolvent par nom avec une perf correcte. Depuis Podman 5, le backend par défaut est Netavark (avec Aardvark pour le DNS) et la pile réseau rootless par défaut est Pasta.

Fenêtre de terminal
# Créer un réseau applicatif (résolution DNS par nom)
podman network create app-network
# Un conteneur "db" et un client qui le joint par son nom
podman run -d --network app-network --name db docker.io/library/postgres:16-alpine
podman run --rm --network app-network docker.io/library/alpine ping -c 1 db

Pour du « prod-like » sur un serveur Linux, Quadlet est le point d'inflexion : un conteneur devient un service (journalctl, restart, dépendances). C'est la voie recommandée par l'écosystème Podman ; l'ancien podman generate systemd est déprécié (toujours utilisable, mais ce n'est plus la direction).

[Container]
Image=docker.io/library/nginx:alpine
PublishPort=8080:80
Volume=/data/nginx:/usr/share/nginx/html:ro,Z
[Service]
Restart=always
[Install]
WantedBy=default.target

Activation en rootless :

Fenêtre de terminal
mkdir -p ~/.config/containers/systemd
# placer nginx.container dans ce dossier
systemctl --user daemon-reload
systemctl --user start nginx
systemctl --user enable nginx
journalctl --user -u nginx -f

Bonus, pods et intégration Kubernetes (sans cluster)

Section intitulée « Bonus, pods et intégration Kubernetes (sans cluster) »

Quand vous avez besoin d'un modèle mental « mini-Kubernetes » sans déployer de cluster, les pods Podman sont parfaits.

Fenêtre de terminal
podman pod create --name webapp -p 8080:80
podman run -d --pod webapp --name db \
-e POSTGRES_PASSWORD=secret docker.io/library/postgres:16-alpine
podman run -d --pod webapp --name app \
-e DATABASE_URL=postgres://postgres:secret@localhost:5432 \
mon-app:latest

podman kube play : exécuter un manifest sans cluster

Section intitulée « podman kube play : exécuter un manifest sans cluster »
Fenêtre de terminal
# Lancer un manifest Kubernetes localement
podman kube play deployment.yaml
# Arrêter et supprimer
podman kube play deployment.yaml --down
# Exporter un pod existant vers un manifest Kubernetes
podman kube generate webapp > webapp.yaml

Les commandes historiques podman play kube et podman generate kube restent des alias, mais la forme moderne est podman kube play / podman kube generate.

Sur macOS et Windows, les conteneurs Linux nécessitent une VM, car ils dépendent du kernel Linux. Podman Machine la gère pour vous.

Fenêtre de terminal
podman machine init
podman machine start
podman run -d -p 8080:80 docker.io/library/nginx:alpine
podman machine ssh

Choisissez votre point d'entrée, puis avancez module par module.

ModuleObjectif
Installationêtre opérationnel (Linux/macOS/Windows)
Conceptsrootless, daemonless, pods, architecture
Commandes de baserun, ps, exec, logs, images, nettoyage
Run avancérootless, namespaces, sécurité, options
Volumespersistance et permissions
RéseauxDNS, ports, isolation, multi-tier
BuildContainerfile, multi-stage, optimisation
Podspods, infra container, mapping Kubernetes
kube playdéployer des manifests sans cluster
Quadletconteneurs comme services systemd
Manifests multi-archimages multi-architecture

Podman évolue vite et chaque distribution embarque une version différente. La branche stable de référence pour ce guide est la 5.8 (dernière 5.x : 5.8.4). La 6.0.0 est sortie fin juin 2026 ; elle arrive d'abord sur les distributions rolling et via Homebrew.

BaseVersion Podman
Arch Linux, Homebrew (macOS)6.0
Amont (dernières)5.8.4 (5.x) / 6.0.0
Fedora 43 (à jour)5.8
Debian 13, Ubuntu 25.105.4
Fedora 425.4
Ubuntu 24.04 LTS4.9
Debian 124.3

Pour un environnement critique, épinglez la version et testez les comportements par défaut, qui changent d'une majeure à l'autre (réseau, volumes, cgroups).

Sortie fin juin 2026, Podman 6 finalise plusieurs suppressions entamées en 5.x et corrige la faille CVE-2026-57231 (fuite de variables d'environnement de l'hôte via des images malveillantes). Elle exige des composants compagnons alignés : Buildah 1.44, Skopeo 1.23, Netavark/Aardvark 2.0. Le dépôt a par ailleurs rejoint l'organisation CNCF podman-container-tools.

  • CNI supprimé au profit de Netavark (le backend réseau par défaut depuis Podman 5).
  • slirp4netns supprimé au profit de Pasta pour le réseau rootless.
  • cgroups v1 et iptables supprimés (passez à cgroups v2 et nftables).
  • BoltDB supprimé : migration automatique vers SQLite au premier démarrage.
  • Intel Mac et Windows 10 ne sont plus supportés.
  • podman volume prune ne supprime plus que les volumes anonymes par défaut ; utilisez --all pour l'ancien comportement.
  • Quadlet range désormais chaque unité et ses fichiers dans un sous-répertoire au lieu du fichier .app.
  • podman volume prune --dry-run et --all pour un nettoyage maîtrisé.
  • podman quadlet ls (nouvel alias) avec une colonne Pod.
  • podman info expose les répertoires CDI et les périphériques découverts.
  • --gpus compatible AMD, adresses IP statiques multiples, routes blackhole/unreachable.
  • podman machine os update et gestion multi-provider des VM.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn