Aller au contenu
Conteneurs & Orchestration medium

Podman Desktop : apprenez les conteneurs visuellement

20 min de lecture

logo podman desktop

Vous voulez apprendre les conteneurs sans vous noyer dans les commandes ? Podman Desktop est votre porte d’entrée. Ce guide vous enseigne les concepts fondamentaux — images, conteneurs, volumes, réseaux — en vous montrant visuellement ce qui se passe à chaque étape.

Podman est un moteur de conteneurs (comme Docker). Mais par défaut, il s’utilise en ligne de commande. Podman Desktop ajoute une interface graphique qui vous permet de :

Ce que vous voulez faireCLI (texte)Desktop (visuel)
Voir les conteneurs qui tournentpodman psListe avec états colorés
Lire les logspodman logs mon-appOnglet Logs, temps réel
Ouvrir un terminal dans le conteneurpodman exec -it mon-app shClic → onglet Terminal
Voir l’utilisation CPU/mémoirepodman statsGraphiques en direct
Comprendre les erreursMessages brutsDiagnostics guidés

Desktop ne remplace pas la CLI, il la complète. Vous apprenez visuellement, puis vous passez à la CLI quand vous êtes prêt.

Selon votre système d’exploitation, l’architecture est différente. Comprendre cela vous évitera beaucoup de confusion.

Architecture Podman Desktop sur Linux

Desktop parle directement au moteur Podman qui tourne sur votre machine. Simple.

Les conteneurs Linux ne peuvent pas tourner nativement sur macOS ou Windows. Podman crée donc une machine virtuelle (VM) Linux légère :

Architecture Podman Desktop sur macOS/Windows avec VM

  1. Podman (le moteur qui fait tourner les conteneurs)
  2. Podman Desktop (l’interface graphique)
Fenêtre de terminal
# Debian / Ubuntu
sudo apt update && sudo apt install -y podman
# Fedora
sudo dnf install -y podman
Fenêtre de terminal
podman --version

Vous devez voir quelque chose comme :

podman version 5.4.0

Méthode recommandée — Flatpak :

Fenêtre de terminal
flatpak install flathub io.podman_desktop.PodmanDesktop

Ou téléchargez depuis podman-desktop.io/downloads.

Lancez Podman Desktop. Quel que soit votre système, vous devez voir :

  • “Podman is running” avec un point vert
  • ✅ La version de Podman affichée
  • ✅ Sur macOS/Windows : la Machine dans l’état “Running”

Podman Desktop prêt à l'emploi

Objectif : comprendre le cycle de vie d’un conteneur (créer → démarrer → utiliser → arrêter → supprimer).

  • Télécharger une image depuis un registre
  • Créer un conteneur à partir d’une image
  • Accéder à votre application via le navigateur
  • Voir les logs du conteneur
  • Nettoyer proprement

Une image est un “modèle” de conteneur. Nous allons utiliser nginx, un serveur web populaire, dans sa version légère alpine.

  1. Dans le menu gauche, cliquez sur Images
  2. Cliquez sur Pull an image
  3. Tapez : docker.io/library/nginx:alpine
  4. Cliquez Pull image

Attendez que le téléchargement se termine. L’image apparaît dans la liste.

  1. Dans Images, trouvez nginx:alpine
  2. Cliquez sur l’icône ▶️ (Run)
  3. Configurez :
    • Container name : mon-premier-conteneur
    • Port mapping : Host port 8080, Container port 80
  4. Cliquez Start Container

Ouvrez votre navigateur à l’adresse : http://localhost:8080

Vous devez voir :

Welcome to nginx!

🎉 Félicitations ! Vous avez lancé un serveur web dans un conteneur.

Les logs vous montrent ce qui se passe à l’intérieur du conteneur.

  1. Allez dans Containers
  2. Cliquez sur mon-premier-conteneur
  3. Onglet Logs

Rafraîchissez la page http://localhost:8080 — vous voyez apparaître les requêtes HTTP dans les logs.

Logs dans Podman Desktop

Vous pouvez “entrer” dans le conteneur pour explorer son système de fichiers.

  1. Cliquez sur le conteneur
  2. Onglet Terminal
  3. Tapez des commandes Linux :
Fenêtre de terminal
whoami # → root
cat /etc/os-release # → Alpine Linux
ls /usr/share/nginx/html/ # → la page web

Terminal dans un conteneur via Podman Desktop

  1. Dans Containers, trouvez votre conteneur
  2. Cliquez sur ⏹️ Stop
  3. Une fois arrêté, cliquez sur 🗑️ Delete
ActionDesktopCLI
Télécharger une imageImages → Pullpodman pull
Créer un conteneurImage → Runpodman run
Voir les logsContainers → Logspodman logs
Terminal dans le conteneurContainers → Terminalpodman exec -it
Arrêter⏹️ Stoppodman stop
Supprimer🗑️ Deletepodman rm

Exercice 2 : Comprendre pourquoi les volumes sont essentiels

Section intitulée « Exercice 2 : Comprendre pourquoi les volumes sont essentiels »

Objectif : découvrir que les modifications dans un conteneur sont perdues à la suppression, puis apprendre à les sauvegarder.

  • Pourquoi les conteneurs sont “éphémères”
  • La différence entre le système de fichiers du conteneur et vos fichiers
  • Comment utiliser les volumes pour persister des données
  1. Lancez un conteneur nginx

    Fenêtre de terminal
    podman run -d --name test-ephemere -p 8080:80 nginx:alpine
  2. Modifiez la page web

    Fenêtre de terminal
    podman exec test-ephemere sh -c 'echo "<h1>Ma super page</h1>" > /usr/share/nginx/html/index.html'
  3. Vérifiez

    Ouvrez http://localhost:8080 — vous voyez “Ma super page”.

  4. Supprimez le conteneur

    Fenêtre de terminal
    podman rm -f test-ephemere
  5. Relancez un conteneur

    Fenêtre de terminal
    podman run -d --name test-ephemere -p 8080:80 nginx:alpine
  6. Vérifiez à nouveau

    http://localhost:8080 → “Welcome to nginx!”

    Votre modification a disparu. 😱

Fenêtre de terminal
# Nettoyez avant de continuer
podman rm -f test-ephemere

Un volume est un espace de stockage extérieur au conteneur. Il survit à la suppression du conteneur.

Comparaison : conteneur sans volume vs avec volume

  1. Créez un volume nommé

    1. Menu VolumesCreate volume
    2. Nom : mes-pages-web
    3. Cliquez Create
  2. Lancez un conteneur qui utilise ce volume

    Fenêtre de terminal
    podman run -d --name nginx-persistent -p 8080:80 \
    -v mes-pages-web:/usr/share/nginx/html \
    nginx:alpine

    L’option -v mes-pages-web:/usr/share/nginx/html dit :

    “Monte le volume mes-pages-web dans le dossier /usr/share/nginx/html du conteneur.”

  3. Créez du contenu

    Fenêtre de terminal
    podman exec nginx-persistent sh -c 'echo "<h1>Contenu persistant !</h1>" > /usr/share/nginx/html/index.html'

    Vérifiez : http://localhost:8080 → “Contenu persistant !”

  4. Supprimez le conteneur

    Fenêtre de terminal
    podman rm -f nginx-persistent
  5. Relancez avec le même volume

    Fenêtre de terminal
    podman run -d --name nginx-persistent -p 8080:80 \
    -v mes-pages-web:/usr/share/nginx/html \
    nginx:alpine
  6. Vérifiez

    http://localhost:8080“Contenu persistant !” est toujours là ! ✅

Dans le menu Volumes, vous voyez :

  • Le nom du volume
  • Sa taille
  • Les conteneurs qui l’utilisent (colonne “Used by”)

Liste des volumes dans Podman Desktop

TypeSyntaxeUtilisation
Volume nommé-v nom-volume:/cheminProduction — Podman gère le stockage
Bind mount-v /chemin/local:/cheminDéveloppement — vous éditez les fichiers localement

Exemple de bind mount (pour le développement) :

Fenêtre de terminal
# Créez un dossier avec votre site
mkdir -p ~/mon-site
echo "<h1>Édité depuis mon PC</h1>" > ~/mon-site/index.html
# Montez-le dans le conteneur
podman run -d --name nginx-dev -p 8080:80 \
-v ~/mon-site:/usr/share/nginx/html:Z \
nginx:alpine

Maintenant, si vous modifiez ~/mon-site/index.html, la modification est visible immédiatement dans le navigateur.

Fenêtre de terminal
podman rm -f nginx-persistent nginx-dev
# Le volume existe toujours - supprimez-le si vous n'en avez plus besoin :
podman volume rm mes-pages-web

Objectif : comprendre comment les conteneurs se parlent entre eux.

  • Par défaut, les conteneurs sont isolés
  • Comment les regrouper pour qu’ils communiquent
  • La différence entre Pod et réseau

Vous voulez :

  • Un serveur web nginx qui répond aux visiteurs
  • Une application whoami qui indique quel serveur a répondu
  • Que nginx puisse contacter whoami

Un Pod est un groupe de conteneurs qui partagent le même “espace réseau”. Ils se voient comme s’ils étaient sur la même machine.

Architecture d'un Pod Podman : nginx et whoami communiquent via localhost

  1. Créez un Pod

    Fenêtre de terminal
    podman pod create --name mon-pod -p 8080:80

    Le pod expose le port 8080 vers l’extérieur. Les conteneurs à l’intérieur partagent ce port.

  2. Ajoutez nginx

    Fenêtre de terminal
    podman run -d --pod mon-pod --name nginx nginx:alpine
  3. Ajoutez whoami

    Fenêtre de terminal
    podman run -d --pod mon-pod --name whoami traefik/whoami --port 8000
  4. Vérifiez que nginx peut joindre whoami

    Fenêtre de terminal
    # Depuis nginx, appelez whoami (ils sont sur le même localhost)
    podman exec nginx wget -qO- http://localhost:8000

    Vous voyez les informations de whoami — ils communiquent !

Dans le menu Pods, vous voyez :

  • Le pod mon-pod
  • En cliquant dessus : les conteneurs nginx et whoami à l’intérieur
  • L’état de chaque conteneur

Pod dans Podman Desktop

Solution 2 : Compose (pour des stacks plus complexes)

Section intitulée « Solution 2 : Compose (pour des stacks plus complexes) »

Si vous avez un fichier compose.yaml, Podman sait le lire :

compose.yaml
services:
web:
image: nginx:alpine
ports:
- "8080:80"
app:
image: traefik/whoami
Fenêtre de terminal
podman compose up -d

Avec Compose, chaque service peut joindre l’autre par son nom (web, app).

Fenêtre de terminal
# Supprime le pod et tous ses conteneurs
podman pod rm -f mon-pod

Desktop est parfait pour apprendre et diagnostiquer. Mais certaines tâches sont plus efficaces en CLI :

TâcheDesktopCLI
Découvrir, explorer✅ Idéal⚠️ Verbeux
Diagnostiquer (logs, inspect)✅ Visuel⚠️ Moins pratique
Automatiser (scripts, CI/CD)❌ Impossible✅ Indispensable
Opérations répétitives⚠️ Lent✅ Rapide
Serveurs sans écran❌ Impossible✅ Seule option

Symptôme : Desktop affiche “Engine not running” ou “Podman is not running”.

Cause : Sur macOS/Windows, la Machine (VM) n’est pas démarrée.

Solution :

Fenêtre de terminal
podman machine start

Ou dans Desktop : section Podman → Start.

Symptôme : “Bind for 0.0.0.0:8080 failed: port is already allocated”

Cause : Un autre programme utilise déjà ce port.

Solution :

Fenêtre de terminal
# Trouvez qui utilise le port
ss -tlnp | grep 8080 # Linux
lsof -i :8080 # macOS

Puis arrêtez ce programme, ou utilisez un autre port (-p 8081:80).

Symptôme : Le conteneur ne peut pas lire/écrire les fichiers montés.

Cause : SELinux (Linux) ou permissions du fichier.

Solution :

Fenêtre de terminal
# Ajoutez :Z pour les bind mounts
podman run -v ~/mon-dossier:/data:Z ...

Le conteneur démarre puis s’arrête immédiatement

Section intitulée « Le conteneur démarre puis s’arrête immédiatement »

Symptôme : Le conteneur passe à “Exited” en quelques secondes.

Cause : Le processus principal du conteneur s’est terminé (ou a planté).

Solution : Regardez les logs :

Fenêtre de terminal
podman logs nom-conteneur

Les concepts

  • Image = moule, Conteneur = instance
  • Les conteneurs sont éphémères par défaut
  • Les volumes permettent de persister les données
  • Les pods permettent la communication entre conteneurs

Les actions

  • Télécharger une image (pull)
  • Créer et lancer un conteneur (run)
  • Voir les logs et ouvrir un terminal
  • Créer et utiliser des volumes
  • Regrouper des conteneurs en pod

Vous maîtrisez maintenant les bases. Voici comment approfondir :

Ce site vous est utile ?

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

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.