Skip to content
Learni
Voir tous les tutoriels
Infrastructure

Comment maîtriser Podman rootless en production en 2026

Read in English

Introduction

Podman s'impose comme l'alternative daemonless à Docker, particulièrement adaptée aux environnements sécurisés et rootless. En 2026, sa capacité à générer des manifests Kubernetes et à s'intégrer nativement avec systemd via les quadlets en fait un outil indispensable pour les architectes DevOps. Ce tutoriel vous guide pas à pas dans la mise en place d'une stack production complète : configuration rootless avancée, gestion des pods multi-conteneurs, volumes persistants et déploiement automatisé. Vous apprendrez à éviter les pièges classiques tout en optimisant la sécurité et les performances.

Prérequis

  • Podman 5.2+ et podman-compose installés
  • Système Linux avec support user namespaces activé
  • Connaissances avancées de systemd et des réseaux Linux
  • Accès sudo pour la configuration initiale

Configuration rootless avancée

setup-rootless.sh
#!/bin/bash
sudo usermod --add-subuids 100000-165535 $(whoami)
sudo usermod --add-subgids 100000-165535 $(whoami)
echo "max_user_namespaces=65536" | sudo tee /etc/sysctl.d/99-podman.conf
sudo sysctl --system
podman system migrate

Ce script active les user namespaces pour un environnement rootless complet. La migration Podman met à jour les mappings UID/GID existants.

Création d'un Quadlet systemd

myapp.container
[Unit]
Description=MyApp Production Container
After=network-online.target

[Container]
Image=registry.example.com/myapp:2026.1
PublishPort=8080:8080
Volume=myapp-data:/data
Environment=ENV=production
HealthCmd=curl -f http://localhost:8080/health || exit 1
HealthInterval=30s

[Service]
Restart=always

[Install]
WantedBy=multi-user.target

Le quadlet définit un service systemd natif géré par Podman. Il inclut healthchecks et volumes nommés pour une gestion production fiable.

Déploiement du Quadlet

deploy-quadlet.sh
mkdir -p ~/.config/containers/systemd
cp myapp.container ~/.config/containers/systemd/
systemctl --user daemon-reload
systemctl --user start myapp.service
systemctl --user enable myapp.service
podman ps --filter name=myapp

Copiez le quadlet dans le dossier systemd utilisateur, rechargez et démarrez. Podman gère automatiquement le conteneur comme un service systemd.

Création d'un Pod multi-conteneurs

create-pod.sh
podman pod create --name prod-pod --publish 8443:8443 --network podman \
  -v prod-data:/data:Z
podman run -d --pod prod-pod --name api \
  -e DB_HOST=localhost registry.example.com/api:2026
podman run -d --pod prod-pod --name db \
  -v prod-data:/var/lib/postgresql/data:Z postgres:16

Un pod regroupe plusieurs conteneurs partageant réseau et IPC. L'option :Z assure les contextes SELinux corrects pour les volumes partagés.

Génération manifeste Kubernetes

generate-kube.sh
podman generate kube prod-pod > prod-pod.yaml
podman kube play prod-pod.yaml --replace
kubectl apply -f prod-pod.yaml --dry-run=client -o yaml

Générez un manifest Kubernetes valide directement depuis le pod Podman. Testez avec kubectl avant déploiement sur un cluster réel.

Bonnes pratiques

  • Toujours utiliser des quadlets pour la gestion des services en production
  • Configurer des healthchecks et des limites de ressources (CPU/mémoire)
  • Utiliser des volumes nommés avec labels SELinux appropriés
  • Générer systématiquement les manifests Kubernetes pour la portabilité
  • Surveiller les logs via journalctl --user -u nom-du-service

Erreurs courantes à éviter

  • Oublier d'activer les user namespaces avant la migration rootless
  • Lancer des conteneurs sans l'option :Z sur les volumes partagés
  • Négliger les healthchecks dans les quadlets
  • Utiliser des images sans digest pour les déploiements critiques

Pour aller plus loin

Approfondissez vos compétences avec nos formations Learni sur les conteneurs et Kubernetes. Explorez également la documentation officielle Podman pour les dernières fonctionnalités 2026.