
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.
Pourquoi Podman Desktop ?
Section intitulée « Pourquoi Podman Desktop ? »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 faire | CLI (texte) | Desktop (visuel) |
|---|---|---|
| Voir les conteneurs qui tournent | podman ps | Liste avec états colorés |
| Lire les logs | podman logs mon-app | Onglet Logs, temps réel |
| Ouvrir un terminal dans le conteneur | podman exec -it mon-app sh | Clic → onglet Terminal |
| Voir l'utilisation CPU/mémoire | podman stats | Graphiques en direct |
| Comprendre les erreurs | Messages bruts | Diagnostics 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.
Comment Podman Desktop fonctionne
Section intitulée « Comment Podman Desktop fonctionne »Selon votre système d'exploitation, l'architecture est différente. Comprendre cela vous évitera beaucoup de confusion.
Sur Linux : communication directe
Section intitulée « Sur Linux : communication directe »Desktop parle directement au moteur Podman qui tourne sur votre machine. Simple.
Sur macOS et Windows : une VM intermédiaire
Section intitulée « Sur macOS et Windows : une VM intermédiaire »Les conteneurs Linux ne peuvent pas tourner nativement sur macOS ou Windows. Podman crée donc une machine virtuelle (VM) Linux légère :
Installation pas à pas
Section intitulée « Installation pas à pas »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.
Ce que vous allez installer
Section intitulée « Ce que vous allez installer »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.
- Podman (le moteur qui fait tourner les conteneurs)
- Podman Desktop (l'interface graphique)
Étape 1 : Installer le moteur Podman
Section intitulée « Étape 1 : Installer le moteur Podman »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.
# Debian / Ubuntusudo apt update && sudo apt install -y podman
# Fedorasudo dnf install -y podmanÉtape 2 : Vérifier que ça fonctionne
Section intitulée « Étape 2 : Vérifier que ça fonctionne »podman --versionVous devez voir quelque chose comme :
podman version 5.4.0Étape 3 : Installer Podman Desktop
Section intitulée « Étape 3 : Installer Podman Desktop »Méthode recommandée, Flatpak :
flatpak install flathub io.podman_desktop.PodmanDesktopOu téléchargez depuis podman-desktop.io/downloads.
Ce que vous allez installer
Section intitulée « Ce que vous allez installer »macOS ne sait pas exécuter de conteneurs Linux directement. L'installation comporte donc une étape que Linux n'a pas : la création d'une Machine, la VM Linux qui héberge réellement vos conteneurs. Tant qu'elle n'est pas démarrée, aucune commande podman run n'aboutira.
- Podman Desktop (l'interface graphique)
- Une Machine (VM Linux qui exécute les conteneurs)
Étape 1 : Installer avec Homebrew
Section intitulée « Étape 1 : Installer avec Homebrew »Podman Desktop est distribué comme cask Homebrew, pas comme formule. L'option --cask évite toute ambiguïté de résolution de nom.
brew install --cask podman-desktopCe cask installe uniquement l'application. Le moteur Podman en ligne de commande n'en fait pas partie : Desktop propose de l'installer au premier lancement, via son assistant d'onboarding. Si vous préférez la ligne de commande, brew install podman fait le même travail.
Étape 2 : Créer et démarrer la Machine
Section intitulée « Étape 2 : Créer et démarrer la Machine »La Machine est la VM Linux dans laquelle tourneront vos conteneurs :
# Créer la Machine avec les paramètres par défautpodman machine init
# Démarrer la Machinepodman machine startÉtape 3 : Vérifier que ça fonctionne
Section intitulée « Étape 3 : Vérifier que ça fonctionne »podman machine listLa colonne qui vous intéresse est LAST UP : elle affiche Currently running tant que la VM tourne, et une durée écoulée sinon. L'astérisque après le nom signale la Machine active, celle que podman utilisera par défaut.
NAME VM TYPE CREATED LAST UP CPUS MEMORY DISK SIZEpodman-machine-default* applehv 2 minutes ago Currently running 4 2GiB 100GiBCe que vous allez installer
Section intitulée « Ce que vous allez installer »Sur Windows, la couche Linux est fournie par WSL2. Podman y crée ensuite une Machine, exactement comme sur macOS. La bonne nouvelle : l'assistant de Podman Desktop détecte les briques manquantes et les installe, vous n'avez pas à les enchaîner à la main.
- WSL2 (sous-système Linux pour Windows)
- Podman Desktop (installe le reste automatiquement)
- Une Machine (VM Linux dans WSL2)
Étape 1 : Installer Podman Desktop
Section intitulée « Étape 1 : Installer Podman Desktop »Le programme d'installation officiel est publié sur le site du projet. Téléchargez-le depuis podman-desktop.io/downloads, puis lancez-le comme n'importe quel installeur Windows.
Étape 2 : Suivre l'assistant d'onboarding
Section intitulée « Étape 2 : Suivre l'assistant d'onboarding »Au premier lancement, Desktop inspecte le poste et propose de combler ce qui manque. Répondez oui à chaque étape : les trois points ci-dessous s'enchaînent automatiquement, et l'assistant se rejoue sans dommage si vous l'interrompez.
- Vérification de WSL2 : si le sous-système est absent, Desktop propose de l'installer.
- Installation du moteur Podman : prise en charge automatiquement par l'assistant.
- Création de la Machine : cliquez sur Create.
Checkpoint : tout est prêt
Section intitulée « Checkpoint : tout est prêt »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 »

Exercice 1 : Lancer votre premier conteneur
Section intitulée « Exercice 1 : Lancer votre premier conteneur »Objectif : comprendre le cycle de vie d'un conteneur (créer → démarrer → utiliser → arrêter → supprimer).
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- 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
Étape 1 : Télécharger une image
Section intitulée « Étape 1 : Télécharger une image »Une image est un "modèle" de conteneur. Nous allons utiliser nginx, un serveur web populaire, dans sa version légère alpine.
- Dans le menu gauche, cliquez sur Images
- Cliquez sur Pull an image
- Tapez :
docker.io/library/nginx:alpine - Cliquez Pull image
Attendez que le téléchargement se termine. L'image apparaît dans la liste.
podman pull docker.io/library/nginx:alpineÉtape 2 : Créer et démarrer un conteneur
Section intitulée « Étape 2 : Créer et démarrer un conteneur »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.
- Dans Images, trouvez
nginx:alpine - Cliquez sur l'icône de lecture, Run
- Configurez :
- Container name :
mon-premier-conteneur - Port mapping : Host port
8080, Container port80
- Container name :
- Cliquez Start Container
podman run -d --name mon-premier-conteneur -p 8080:80 nginx:alpineExplication des options :
-d: détaché (tourne en arrière-plan)--name: nom pour identifier le conteneur-p 8080:80: redirige le port 8080 de votre PC vers le port 80 du conteneur
Étape 3 : Vérifier que ça fonctionne
Section intitulée « Étape 3 : Vérifier que ça fonctionne »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.
Étape 4 : Explorer le conteneur
Section intitulée « Étape 4 : Explorer le conteneur »Voir les logs
Section intitulée « Voir les logs »Les logs vous montrent ce qui se passe à l'intérieur du conteneur.
- Allez dans Containers
- Cliquez sur
mon-premier-conteneur - Onglet Logs
Rafraîchissez la page http://localhost:8080, vous voyez apparaître les requêtes HTTP dans les logs.
podman logs mon-premier-conteneurPour suivre en temps réel :
podman logs -f mon-premier-conteneur(Ctrl+C pour arrêter)

Ouvrir un terminal dans le conteneur
Section intitulée « Ouvrir un terminal dans le conteneur »Vous pouvez "entrer" dans le conteneur pour explorer son système de fichiers.
- Cliquez sur le conteneur
- Onglet Terminal
- Tapez des commandes Linux :
whoami # → rootcat /etc/os-release # → Alpine Linuxls /usr/share/nginx/html/ # → la page webpodman exec -it mon-premier-conteneur sh-it: mode interactif avec terminalsh: le shell à exécuter
Pour sortir : tapez exit

Étape 5 : Arrêter et supprimer
Section intitulée « Étape 5 : Arrêter et supprimer »- Dans Containers, trouvez votre conteneur
- Cliquez sur Stop
- Une fois arrêté, cliquez sur Delete
# Arrêterpodman stop mon-premier-conteneur
# Supprimerpodman rm mon-premier-conteneurOu en une commande (force l'arrêt et supprime) :
podman rm -f mon-premier-conteneurRécapitulatif de l'exercice 1
Section intitulée « Récapitulatif de l'exercice 1 »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.
| Action | Desktop | CLI |
|---|---|---|
| Télécharger une image | Images → Pull | podman pull |
| Créer un conteneur | Image → Run | podman run |
| Voir les logs | Containers → Logs | podman logs |
| Terminal dans le conteneur | Containers → Terminal | podman exec -it |
| Arrêter | Bouton Stop | podman stop |
| Supprimer | Bouton Delete | podman 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.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- 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
Le problème : tout disparaît
Section intitulée « Le problème : tout disparaît »-
Lancez un conteneur nginx
Fenêtre de terminal podman run -d --name test-ephemere -p 8080:80 nginx:alpine -
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' -
Vérifiez
Ouvrez http://localhost:8080, vous voyez "Ma super page".
-
Supprimez le conteneur
Fenêtre de terminal podman rm -f test-ephemere -
Relancez un conteneur
Fenêtre de terminal podman run -d --name test-ephemere -p 8080:80 nginx:alpine -
Vérifiez à nouveau
http://localhost:8080 → "Welcome to nginx!"
Votre modification a disparu.
# Nettoyez avant de continuerpodman rm -f test-ephemereLa solution : les volumes
Section intitulée « La solution : les volumes »Un volume est un espace de stockage extérieur au conteneur. Il survit à la suppression du conteneur.
Exercice : utiliser un volume pour sauvegarder
Section intitulée « Exercice : utiliser un volume pour sauvegarder »-
Créez un volume nommé
- Menu Volumes → Create volume
- Nom :
mes-pages-web - Cliquez Create
Fenêtre de terminal podman volume create mes-pages-web -
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:alpineL'option
-v mes-pages-web:/usr/share/nginx/htmldit :"Monte le volume
mes-pages-webdans le dossier/usr/share/nginx/htmldu conteneur." -
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 !"
-
Supprimez le conteneur
Fenêtre de terminal podman rm -f nginx-persistent -
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 -
Vérifiez
http://localhost:8080 affiche toujours « Contenu persistant ! ».
Voir les volumes dans Desktop
Section intitulée « Voir les volumes dans Desktop »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")

Deux types de montages
Section intitulée « Deux types de montages »| Type | Syntaxe | Utilisation |
|---|---|---|
| Volume nommé | -v nom-volume:/chemin | Production, Podman gère le stockage |
| Bind mount | -v /chemin/local:/chemin | Développement, vous éditez les fichiers localement |
Exemple de bind mount (pour le développement) :
# Créez un dossier avec votre sitemkdir -p ~/mon-siteecho "<h1>Édité depuis mon PC</h1>" > ~/mon-site/index.html
# Montez-le dans le conteneurpodman run -d --name nginx-dev -p 8080:80 \ -v ~/mon-site:/usr/share/nginx/html:Z \ nginx:alpineMaintenant, si vous modifiez ~/mon-site/index.html, la modification est
visible immédiatement dans le navigateur.
Nettoyage
Section intitulée « Nettoyage »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.
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-webExercice 3 : Faire communiquer deux conteneurs
Section intitulée « Exercice 3 : Faire communiquer deux conteneurs »Objectif : comprendre comment les conteneurs se parlent entre eux.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Par défaut, les conteneurs sont isolés
- Comment les regrouper pour qu'ils communiquent
- La différence entre Pod et réseau
Scénario
Section intitulée « Scénario »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
Solution 1 : le Pod (méthode Podman)
Section intitulée « Solution 1 : le Pod (méthode Podman) »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.
-
Créez un Pod
Fenêtre de terminal podman pod create --name mon-pod -p 8080:80Le pod expose le port 8080 vers l'extérieur. Les conteneurs à l'intérieur partagent ce port.
-
Ajoutez nginx
Fenêtre de terminal podman run -d --pod mon-pod --name nginx nginx:alpine -
Ajoutez whoami
Fenêtre de terminal podman run -d --pod mon-pod --name whoami traefik/whoami --port 8000 -
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:8000Vous voyez les informations de whoami, ils communiquent !
Voir le Pod dans Desktop
Section intitulée « Voir le Pod dans Desktop »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
nginxetwhoamià l'intérieur - L'état de chaque conteneur

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 :
services: web: image: nginx:1.31.3-alpine@sha256:4a73073bd557c65b759505da037898b61f1be6cbcc3c2c3aeac22d2a470c1752 ports: - "8080:80"
app: image: traefik/whoami:v1.11.0@sha256:200689790a0a0ea48ca45992e0450bc26ccab5307375b41c84dfc4f2475937abpodman compose up -dAvec Compose, chaque service peut joindre l'autre par son nom (web,
app).
Nettoyage
Section intitulée « Nettoyage »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.
# Supprime le pod et tous ses conteneurspodman pod rm -f mon-podQuand passer à la ligne de commande ?
Section intitulée « Quand passer à la ligne de commande ? »Desktop est parfait pour apprendre et diagnostiquer. Mais certaines tâches sont plus efficaces en CLI :
| Tâche | Desktop | CLI |
|---|---|---|
| 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 |
Dépannage
Section intitulée « Dépannage »"Engine not running"
Section intitulée « "Engine not running" »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 :
podman machine startOu dans Desktop : section Podman → Start.
Port déjà utilisé
Section intitulée « Port déjà utilisé »Symptôme : "Bind for 0.0.0.0:8080 failed: port is already allocated"
Cause : Un autre programme utilise déjà ce port.
Solution :
# Trouvez qui utilise le portss -tlnp | grep 8080 # Linuxlsof -i :8080 # macOSPuis arrêtez ce programme, ou utilisez un autre port (-p 8081:80).
Permission denied sur les fichiers montés
Section intitulée « Permission denied sur les fichiers montés »Symptôme : Le conteneur ne peut pas lire/écrire les fichiers montés.
Cause : SELinux (Linux) ou permissions du fichier.
Solution :
# Ajoutez :Z pour les bind mountspodman 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 :
podman logs nom-conteneurCe que vous avez appris
Section intitulée « Ce que vous avez appris »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
Prochaines étapes
Section intitulée « Prochaines étapes »Vous maîtrisez maintenant les bases. Voici comment approfondir :