Aller au contenu
Conteneurs & Orchestration medium

Podman Desktop : apprenez les conteneurs visuellement

24 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

La procédure diffère selon le système, parce que l'architecture décrite plus haut n'est pas la même. Sur Linux, vous installez deux briques indépendantes : le moteur Podman puis l'interface. Sur macOS et Windows, l'interface prend en charge une partie du travail et il faut en plus créer la Machine virtuelle. Choisissez l'onglet correspondant à votre poste, les trois procédures ne se mélangent pas.

Sur Linux, le noyau exécute les conteneurs nativement : aucune machine virtuelle n'est nécessaire. Vous installez donc deux paquets distincts, et l'interface graphique reste optionnelle, le moteur fonctionne sans elle.

  1. Podman (le moteur qui fait tourner les conteneurs)
  2. Podman Desktop (l'interface graphique)

Le moteur est packagé dans les dépôts officiels des principales distributions, ce qui évite tout téléchargement de binaire hors gestionnaire de paquets. La version fournie dépend de votre distribution : une Debian stable livre une version plus ancienne qu'une Fedora récente, sans que cela gêne les exercices de cette page.

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 et 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.

Une image est un modèle en lecture seule ; le conteneur est l'exécution de ce modèle. Le paramètre décisif de cette étape est la redirection de port : sans elle, le serveur nginx écoute bien sur le port 80, mais à l'intérieur de son propre espace réseau, inaccessible depuis votre navigateur. Retenez la lecture de 8080:80 : à gauche le port de votre machine, à droite celui du conteneur.

  1. Dans Images, trouvez nginx:alpine
  2. Cliquez sur l'icône de lecture, 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

Ce tableau se lit de gauche à droite comme une table de conversion : chaque geste appris dans l'interface a son équivalent CLI exact. Mémoriser cette correspondance vous permettra de basculer sans effort vers le terminal quand une tâche deviendra répétitive, et surtout de comprendre les tutoriels en ligne, qui sont presque tous écrits en ligne de commande.

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êterBouton Stoppodman stop
SupprimerBouton 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 affiche toujours « Contenu persistant ! ».

Cette vue répond à la question qui revient le plus souvent en dépannage : quel volume est encore rattaché à quelque chose. La colonne Used by est celle à surveiller, un volume qui n'y affiche aucun conteneur est un volume orphelin, il occupe de l'espace disque sans être utilisé par rien. C'est le premier endroit à regarder quand votre disque se remplit sans raison apparente.

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.

Supprimer les conteneurs ne supprime pas les volumes, et c'est précisément le comportement recherché : vos données survivent. La conséquence pratique, c'est que les volumes orphelins s'accumulent silencieusement si personne ne les efface. La seconde commande ci-dessous est donc à exécuter en conscience, elle détruit définitivement le contenu du volume.

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

Cet exercice reproduit la situation la plus fréquente en développement : une application composée de plusieurs conteneurs qui doivent s'appeler entre eux. La difficulté n'est pas de les démarrer, c'est de leur donner un moyen de se joindre, car par défaut chaque conteneur possède sa propre pile réseau et ignore l'existence des autres.

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 !

Le menu Pods rend visible ce que la ligne de commande laisse implicite : la hiérarchie entre le pod et les conteneurs qu'il contient. Un détail mérite l'attention, podman pod ps compte un conteneur de plus que ce que vous avez lancé. Ce conteneur supplémentaire, suffixé -infra et bâti sur l'image podman-pause, détient l'espace réseau partagé du pod. C'est lui qui explique que nginx et whoami se joignent sur localhost.

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:1.31.3-alpine@sha256:4a73073bd557c65b759505da037898b61f1be6cbcc3c2c3aeac22d2a470c1752
ports:
- "8080:80"
app:
image: traefik/whoami:v1.11.0@sha256:200689790a0a0ea48ca45992e0450bc26ccab5307375b41c84dfc4f2475937ab
Fenêtre de terminal
podman compose up -d

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

Un pod se supprime d'un bloc : la commande ci-dessous détruit nginx, whoami et le conteneur d'infrastructure en une seule opération. L'option -f force l'arrêt des conteneurs encore actifs, ce qui vous évite un podman pod stop préalable. Sans cette suppression, le port 8080 reste réservé et l'exercice suivant échouera avec une erreur d'allocation de port.

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, explorerIdéalVerbeux
Diagnostiquer (logs, inspect)VisuelMoins pratique
Automatiser (scripts, CI/CD)ImpossibleIndispensable
Opérations répétitivesLentRapide
Serveurs sans écranImpossibleSeule 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

Relisez ce récapitulatif en deux temps. La colonne des concepts correspond à ce qui reste valable quel que soit le moteur employé, Podman comme Docker : ces notions se transposent sans effort. La colonne des actions est la mécanique quotidienne, celle qui rentre par la répétition. Si un point vous paraît flou, reprenez l'exercice correspondant plutôt que la définition, la manipulation ancre mieux que la lecture.

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 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