Podman & Fedora Server

Guide technique pour développeurs et architectes système - Édition 2025

L'Alliance Fedora & Podman

Podman est le moteur de conteneurs privilégié de l'écosystème Fedora, remplaçant Docker par une architecture plus sécurisée et moderne. Les sources indiquent une intégration profonde allant des versions 32beta aux versions modernes (42+).

Le saviez-vous ? L'outil d'administration web Cockpit est installé par défaut sur Fedora Server et inclut désormais la gestion native des conteneurs Podman.

Pourquoi ce duo ?

Architecture : La Révolution "Daemonless"

Contrairement à Docker qui utilise un démon central (dockerd), Podman adopte une architecture décentralisée. C'est le cœur de sa proposition de valeur.

Comparatif Technique

Caractéristique Docker (Daemon) Podman (Daemonless)
Point de défaillance Unique (Si le daemon crash, tout tombe) Aucun (Processus indépendants)
Privilèges Root par défaut (souvent) Rootless par défaut (Sécurité++)
Supervision Interne au Daemon Via systemd (natif Linux)
Ressources (Idle) Consomme de la RAM en permanence Zéro (Lancement à la demande)

Gestion des Processus

Chaque conteneur est un processus enfant de la commande CLI. Cela signifie que :

Installation et Configuration

Bien que souvent pré-installé sur Fedora Server, voici les procédures pour garantir un environnement complet avec l'interface de gestion Cockpit.

1. Installation de Podman

# Mise à jour du système
$ sudo dnf update -y

# Installation du moteur
$ sudo dnf install podman -y

2. Installation de Cockpit et du Module Podman

Cockpit est l'interface web. Le module cockpit-podman est crucial pour voir l'onglet "Containers".

# Installation de Cockpit et du plugin Podman
$ sudo dnf install cockpit cockpit-podman -y

# Activation du socket Cockpit (écoute sur le port 9090)
$ sudo systemctl enable --now cockpit.socket

# Ouverture du pare-feu
$ sudo firewall-cmd --permanent --add-service=cockpit
$ sudo firewall-cmd --reload

3. Activation de l'API Podman (Critique pour Cockpit)

Attention : Pour gérer les conteneurs en mode Rootless via Cockpit, vous devez activer le socket Podman au niveau utilisateur, et non avec sudo.
# À exécuter avec votre utilisateur standard (ex: 'dev')
$ systemctl --user enable --now podman.socket

Sécurité, SELinux et UDICA

La sécurité est l'ADN de Fedora. Podman s'appuie sur trois piliers : le mode Rootless, les User Namespaces et SELinux.

1. Le Mode Rootless

Podman mappe l'utilisateur root (UID 0) à l'intérieur du conteneur vers votre UID utilisateur (ex: 1000) sur l'hôte.
Résultat : Si un attaquant sort du conteneur ("container breakout"), il se retrouve avec des droits limités sur le serveur, empêchant la compromission totale.

2. Le Défi SELinux & UDICA

SELinux bloque souvent l'accès aux volumes montés (erreur "Permission Denied").

Les Solutions :

# Exemple d'utilisation de UDICA
# 1. Inspecter le conteneur pour générer la politique
$ podman inspect my_container | udica my_policy

# 2. Charger la politique SELinux
$ sudo semodule -i my_policy.cil

# 3. Relancer le conteneur avec la nouvelle étiquette
$ podman run --security-opt label=type:my_policy.process ...

Vers Kubernetes : L'approche "Kube-First"

Podman n'est pas juste un remplaçant de Docker, c'est une passerelle vers Kubernetes (K8s).

Génération de Manifestes (YAML)

Vous avez créé un Pod ou un conteneur qui fonctionne parfaitement en local ? Exportez-le pour K8s.

# Générer le YAML d'un pod existant
$ podman generate kube mon_pod > deploy-k8s.yaml

Jouer des Manifestes (Play Kube)

À l'inverse, vous pouvez prendre un YAML Kubernetes et le jouer localement avec Podman sans avoir besoin d'installer Minikube ou un cluster lourd.

$ podman play kube deploy-k8s.yaml

Buildah : Le constructeur

Pour les pipelines CI/CD, Podman s'associe à Buildah. Il permet de construire des images OCI sans aucun démon et sans privilèges root, ce qui est idéal pour les runners GitLab CI ou Jenkins sécurisés.

Tutoriel Express : Déployer Nginx avec Cockpit

Mise en pratique : déployons un serveur web via l'interface graphique Cockpit.

  1. Accès : Connectez-vous à https://IP_SERVEUR:9090.
  2. Navigation : Allez dans l'onglet Podman containers à gauche.
  3. Création : Cliquez sur "Create Container".
  4. Configuration :
    • Nom: mon-site-web
    • Image: docker.io/library/nginx:latest
    • Mappage de port: Hôte 8080 -> Conteneur 80
    • Volume (Optionnel) : Mappez /home/user/site vers /usr/share/nginx/html (Mode: Shared/Z).
  5. Lancement : Validez. Le conteneur démarre.

Si SELinux bloque l'accès à votre page HTML personnalisée, allez dans l'onglet SELinux de Cockpit. Vous verrez une alerte. Cliquez sur "Troubleshoot" et appliquez la commande suggérée (souvent restorecon ou un ajustement de contexte).

Résultat : Votre site est accessible sur le port 8080, tourne sans root, et est supervisé par votre serveur Fedora.