Cours
Supposons que vous disposiez d'un fichier docker-compose.yml qui fonctionne depuis plusieurs mois. Cependant, il est désormais recommandé d'utiliser Podman à la place de Docker, et vous n'êtes pas certain s'il est nécessaire de modifier le fichier ou de recommencer depuis le début. Votre environnement de développement local dépend de ce fichier Compose, et vous n'avez pas nécessairement le temps de reconstruire l'ensemble de votre configuration.
La bonne nouvelle est que Podman Compose vous permet d'exécuter des fichiers Compose existants avec Podman au lieu de Docker. Il s'agit d'une couche de compatibilité basée sur Python qui convertit vos définitions Compose en commandes Podman, vous permettant ainsi de continuer à utiliser le flux de travail multi-conteneurs auquel vous êtes habitué.
Dans cet article, je vais vous présenter Podman Compose, vous expliquer comment l'installer et comment exécuter votre première application multi-conteneurs avec cet outil. Si certainsconcepts d' s présentés dans cet article sont nouveaux pour vous, nous vous invitons à vous inscrire à notre cours sur les concepts de conteneurisation et de virtualisation pour acquérir les bases.
Qu'est-ce que Podman Compose ?
Podman Compose est un outil basé sur Python qui lit vos fichiers d' docker-compose.yml s et les convertit en commandes Podman.
Vous continuez à rédiger un fichier Docker Compose avec des services, des réseaux et des volumes. Podman Compose analyse ce fichier et exécute les commandes d'podman s équivalentes pour démarrer vos conteneurs. Il effectue le travail de traduction à votre place, vous évitant ainsi de devoir convertir manuellement la syntaxe Compose en commandes CLI Podman.
Il est important de noter que Podman Compose ne remplace pas Docker Compose.
Il s'agit d'une couche de compatibilité. Certaines fonctionnalités de Docker Compose sont prêtes à l'emploi, d'autres nécessitent des ajustements, et quelques-unes ne fonctionnent pas du tout. Cet outil vise la compatibilité, mais il ne reproduit pas tous les comportements de Docker Compose.
Voici une autre façon d'envisager la question : Docker Compose communique directement avec le démon Docker. Podman Compose communique avec l'interface CLI Podman, qui gère ensuite les conteneurs sans démon. Le résultat final est similaire, mais les mécanismes sous-jacents sont différents.
Cela signifie que vous pouvez réutiliser la plupart de vos fichiers Compose existants, mais vous devrez comprendre où se situent les différences.
Pourquoi utiliser Podman Compose ?
Podman Compose vous permet d'exécuter des applications multi-conteneurs sans installer Docker.
Par rapport à Docker, vous obtenez par défaut des conteneurs sans accès root. Podman exécute des conteneurs sans nécessiter de privilèges root. En termes simples, le risque est moindre si un conteneur est compromis. Docker nécessite que le démon soit exécuté en tant que root, même si vous utilisez des conteneurs sans root par-dessus.
Cela rend Podman Compose plus adapté aux environnements axés sur la sécurité. Si vous travaillez sur des serveurs Linux verrouillés ou dans des environnements où l'exécution d'un démon au niveau racine n'est pas autorisée, Podman Compose vous offre le workflow multi-conteneurs dont vous avez besoin.
Il est également utile pour le développement et les tests. Vous pouvez créer des environnements locaux, tester des configurations de conteneurs et valider vos fichiers Compose sans avoir besoin d'installer Docker. Il est idéal pour les déploiements légers qui ne nécessitent pas d'orchestration complète.
Il convient toutefois de noter que Podman Compose n'est pas adapté à toutes les situations.
Si vous exécutez des charges de travail de production à grande échelle, il est recommandé d'utiliser Kubernetes ou Docker Swarm à la place. Podman Compose offre également une prise en charge moins performante sur macOS et Windows par rapport à Linux, ce qui peut affecter la fluidité de votre expérience de développement multiplateforme. Si votre équipe est déjà engagée dans l'écosystème Docker avec des plugins et des outils personnalisés, passer à Podman Compose implique de reconstruire certaines parties de ce flux de travail.
En conclusion, veuillez utiliser Podman Compose lorsque vous avez besoin de conteneurs sans root, d'environnements axés sur la sécurité ou d'une configuration de développement sans Docker.
Installation de Podman Compose
Podman Compose fonctionne de manière optimale sous Linux, où Podman s'exécute de manière native.
Vous pouvez l'installer sur macOS et Windows, mais il est nécessaire d'exécuter Podman au préalable dans une machine virtuelle. Cela ajoute à la complexité et n'est pas aussi fluide que l'expérience Linux. Si vous utilisez macOS ou Windows, veuillez noter que des étapes de configuration supplémentaires et d'éventuels problèmes de réseau sont possibles.
Installation sous Linux
La méthode la plus simple pour installer Podman Compose consiste à utiliser pip.
pip install podman-compose

Installation de Podman compose sur Linux
Cela installe la dernière version disponible sur PyPI. Il n'est pas nécessaire de vous préoccuper de la gestion des versions de Python. Si Python 3 est installé, vous êtes prêt à commencer.
Certaines distributions Linux intègrent également Podman Compose dans leurs référentiels. Sur Fedora, RHEL et CentOS, vous pouvez utiliser :
sudo dnf install podman-compose
Sur les systèmes Ubuntu et Debian, veuillez exécuter la commande suivante :
sudo apt install podman-compose
Les versions du gestionnaire de paquets ont tendance à être en retard par rapport à PyPI, il est donc possible que vous ne disposiez pas immédiatement des dernières fonctionnalités.
Installation sur macOS et Windows
Sous macOS et Windows, il est nécessaire de commencer par configurer Podman Desktop ou d'utiliser podman machine pour créer une machine virtuelle Linux. Une fois que cela fonctionne, veuillez installer Podman Compose à l'aide de la commande « pip » dans cet environnement.
La première étape consiste donc à se connecter à la machine :
podman machine ssh

Connexion SSH à la machine virtuelle Podman
Étant donné que la machine virtuelle est basée sur Fedora, vous pouvez exécuter cette commande pour installer Podman Compose :
sudo dnf install podman-compose

Installation de Podman Compose
Ce processus en deux étapes signifie que vous n'exécutez pas Podman Compose directement sur votre système d'exploitation hôte, mais plutôt à l'intérieur de la machine virtuelle Linux créée par Podman.
Vérification de l'installation
Veuillez exécuter cette commande pour vérifier que Podman Compose a été installé correctement :
podman-compose --version

Vérification de l'installation de Podman Compose
Le numéro de version devrait s'afficher sur le terminal. Si vous obtenez une erreur « commande introuvable », veuillez vérifier que le répertoire d' bin s Python se trouve bien dans votre PATH.
C'est tout ce dont vous avez besoin pour commencer à utiliser Podman Compose.
Exécution d'un fichier Compose avec Podman Compose
Vous avez installé Podman Compose. Permettez-moi maintenant de vous montrer comment exécuter une application réelle.
Utilisation d'un fichier Docker Compose existant
Podman Compose lit les fichiers d'docker-compose.yml s standard. Il n'est pas nécessaire de renommer quoi que ce soit ni de modifier le format.
Voici une application FastAPI simple définie dans un fichier Compose :
services:
web:
image: python:3.14-slim
container_name: fastapi-app
working_dir: /src
volumes:
- ./src:/src
ports:
- "8000:8000"
command: bash -c "pip install fastapi uvicorn && uvicorn main:app --host 0.0.0.0 --port 8000"
Avec le code de l'application dans src/main.py:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "Hello from FastAPI"}
@app.get("/health")
def health_check():
return {"status": "healthy"}
La plupart des fonctionnalités de Docker Compose sont immédiatement opérationnelles avec Podman Compose. Cela comprend :
- Extraction d'images et création de conteneurs
- Mappages de ports
- Montages de volumes (volumes nommés et montages liés)
- Variables d'environnement
- Réseau de base entre les services
Cependant, certaines fonctionnalités nécessitent des ajustements. Si votre fichier Compose utilise des plugins spécifiques à Docker, des pilotes réseau personnalisés ou des arguments de compilation avancés, il sera probablement nécessaire de modifier ces sections.
Podman Compose gère également le réseau différemment : les services ne se résolvent pas automatiquement les uns les autres par leur nom, contrairement à Docker Compose.
Commandes de base de Podman Compose
Vous pouvez maintenant démarrer vos services à l'aide de cette commande :
podman-compose up
Cela permet de récupérer les images, de créer des conteneurs et de démarrer tous les éléments définis dans votre fichier Compose. Veuillez ajouter « -d » pour exécuter en mode détaché si vous ne souhaitez pas que les journaux soient transmis à votre terminal.

Sortie Podman
Vous pouvez désormais ouvrir l'application sur le port 8000 de votre machine (ou sur une instance Ubuntu distante, comme celle que j'utilise). Vous verrez apparaître les éléments suivants :

Application FastAPI exécutée via Podman
Pour arrêter les services en cours d'exécution, veuillez exécuter la commande suivante :
podman-compose down
Cela permet d'arrêter et de supprimer les conteneurs. Les volumes persistent à moins que vous n'ajoutiez --volumes pour les supprimer également.
Pour vérifier vos journaux de service, veuillez exécuter la commande suivante :
podman-compose logs
Veuillez ajouter -f pour suivre les journaux en temps réel, ou spécifier un nom de service pour afficher uniquement les journaux de ce conteneur.
Pour nettoyer l'ensemble, y compris les conteneurs, les réseaux et les volumes, veuillez exécuter la commande suivante :
podman-compose down --volumes
Les commandes reflètent la syntaxe de Docker Compose. Par conséquent, si vous êtes déjà familier avec docker-compose, vous vous sentirez tout à fait à l'aise.
Podman Compose par rapport à Docker Compose et autres
Podman Compose et Docker Compose poursuivent le même objectif, mais leur fonctionnement interne est différent. Permettez-moi de vous expliquer comment.
Exécution sans racine
Docker Compose nécessite que le démon Docker soit exécuté en tant que root. Même lorsque vous configurez des conteneurs sans root, le démon lui-même nécessite des privilèges élevés. Podman Compose fonctionne entièrement sans accès root par défaut. Vos conteneurs démarrent en tant qu'utilisateur, et non en tant que service système, ce qui réduit les possibilités d'attaque et rend Podman Compose plus sûr dans les environnements multi-utilisateurs.
Comportement en matière de réseautage
Docker Compose établit un réseau pont par défaut pour vos services. Les conteneurs peuvent se contacter automatiquement par leur nom de service.
Podman Compose utilise plutôt l',un réseau basé sur les pods. Tous les conteneurs de votre fichier Compose sont regroupés dans un seul pod Podman et partagent le même espace de noms réseau. Cela signifie que les conteneurs communiquent via l'adresse IP ( localhost ) plutôt que via les noms de service, ce qui peut surprendre les utilisateurs de Docker.
Si votre application est configurée pour accéder à la base de données à l'adresse db:5432, il est nécessaire de la modifier en localhost:5432 lorsque vous l'exécutez avec Podman Compose.
Regroupement par pod
Docker Compose gère les conteneurs individuels. Podman Compose crée unpod d' , qui est un regroupement inspiré de Kubernetes dans lequel les conteneurs partagent le réseau et peuvent partager le stockage. Ce modèle de pod aligne Podman Compose sur les modèles Kubernetes, ce qui facilite la migration ultérieure des charges de travail si une orchestration est nécessaire.
Intégration de systemd
Podman s'intègre à systemd pour gérer les conteneurs en tant que services système. Vous pouvez générer des fichiers d'unité systemd à partir de conteneurs en cours d'exécution et les gérer comme n'importe quel autre service Linux. Docker n'offre pas d'intégration native à systemd au niveau des conteneurs.
Autres options
Si Podman Compose ne répond pas à vos besoins, voici quelques alternatives :
- Podman natif avec systemd vous permet de gérer les conteneurs en tant que services sans aucun fichier Compose.
- Kubernetes vous offre une orchestration complète si vous exécutez des charges de travail de production à grande échelle, bien qu'il soit beaucoup plus lourd que les outils de type Compose.
Podman Compose se situe entre les commandes de conteneur simples et l'orchestration complète. Il vous offre des workflows multi-conteneurs sans nécessiter le démon Docker.
Réseau et volumes dans Podman Compose (différences)
Les utilisateurs de Docker qui migrent vers Podman Compose se plaignent généralement de deux aspects : la mise en réseau et les volumes. Dans cette section, je vais aborder les différences.
Communication de service à service
Dans Docker Compose, vous vous connectez à d'autres services par leur nom de service. Si vous disposez d'un service Web et d'un service de base de données appelé db, votre application se connecte à db:5432.
Podman Compose regroupe tous les services dans un seul pod. Les conteneurs d'un même pod partagent un espace de noms réseau, ce qui signifie qu'ils utilisent tous localhost. Votre chaîne de connexion à la base de données passe de db:5432 à localhost:5432.
Cela surprend les gens. Votre application démarre, tente de se connecter à db:5432 et échoue car ce nom d'hôte ne peut être résolu. Il vous sera nécessaire de mettre à jour vos chaînes de connexion ou vos variables d'environnement afin d'utiliser localhost à la place.
Réseaux par défaut
Docker Compose établit un réseau pont pour vos services. Chaque conteneur dispose de sa propre adresse IP sur ce réseau, et le résolveur DNS de Docker gère les recherches de noms de service.
Podman Compose ne crée pas de réseaux distincts par défaut. Le modèle pod implique que les conteneurs partagent le réseau à un niveau inférieur. Si vous définissez des réseaux personnalisés dans votre fichier Compose, Podman Compose tentera de les créer, mais le comportement pourrait ne pas correspondre exactement à celui de Docker.
Comportement du montage de volumes et de reliures
Les volumes et les montages liés fonctionnent de manière similaire entre Docker Compose et Podman Compose. Vous les définissez dans votre fichier Compose, et Podman les crée.
Cependant, il existe une restriction en matière d'autorisations.
Podman s'exécute par défaut sans privilèges root, ce qui peut entraîner des différences dans le comportement des droits de propriété et des permissions des fichiers. Un montage lié qui fonctionne correctement dans Docker peut générer des erreurs d'autorisation dans Podman, car l'utilisateur du conteneur ne correspond pas à l'UID de votre utilisateur hôte.
Vous remarquerez également que les emplacements des volumes diffèrent. Docker stocke les volumes dans /var/lib/docker/volumes/ tandis que Podman les stocke dans ~/.local/share/containers/storage/volumes/ pour les conteneurs sans root.
Les corrections sont faciles à mettre en œuvre si l'on comprend bien le problème. Il suffit donc d'ajuster les chaînes de connexion pour le réseau et de vérifier les autorisations d'accès aux fichiers pour les problèmes de volume.
Limitations courantes et pièges à éviter
Podman Compose fonctionne efficacement pour les configurations multi-conteneurs de base, mais il présente certaines limites qu'il est important de connaître avant de l'adopter.
Fonctionnalités de composition non prises en charge
Toutes les fonctionnalités de Docker Compose ne sont pas disponibles dans Podman Compose. Les contextes de construction avec des arguments complexes échouent souvent ou se comportent différemment. Les plugins et extensions Docker Compose ne fonctionneront pas. Certaines fonctionnalités telles que le GPU passthrough, les contrôles de santé avancés et certains modes réseau ne fonctionnent pas ou nécessitent des solutions de contournement.
Si votre fichier Compose utilise largement les fonctionnalités de la version 3.x d' docker-compose.yml, il est probable que vous deviez procéder par essais et erreurs.
Attentes en matière de mise en réseau qui diffèrent de celles de Docker
Les services ne communiquent pas par leur nom, mais utilisent plutôt localhost. Cela affecte les applications qui intègrent de manière statique les noms de service dans les chaînes de connexion.
Les réseaux de ponts personnalisés ne fonctionnent pas de la même manière que Docker. La résolution DNS fonctionne différemment en raison du modèle de pod.
Veuillez noter qu'il sera nécessaire de consacrer un certain temps à la mise à jour des configurations et des variables d'environnement afin de les adapter au modèle réseau de Podman, mais il s'agit d'une opération ponctuelle.
Limitations de la plateforme sur macOS/Windows
Podman Compose fonctionne de manière optimale sous Linux. Sous macOS et Windows, vous exécutez tout dans une machine virtuelle Linux, ce qui ajoute plusieurs niveaux de complexité. La synchronisation des fichiers entre votre hôte et la machine virtuelle peut être plus lente. La mise en réseau entre votre hôte et les conteneurs nécessite une configuration supplémentaire.
Si votre équipe utilise des machines macOS ou Windows pour le développement, Docker Compose est généralement l'option la plus fluide.
Maturité des outils et lacunes de l'écosystème
Podman Compose est plus récent que Docker Compose. La communauté étant plus restreinte, il est nécessaire de mener des recherches plus approfondies pour trouver des réponses à des problèmes spécifiques. Les outils et intégrations tiers sont d'abord conçus pour Docker, puis pour Podman (le cas échéant). Le support IDE et les outils GUI sont en retard par rapport à l'écosystème Docker.
Vous ne trouverez pas autant de réponses sur Stack Overflow ou de problèmes GitHub concernant Podman Compose.
Ces limitations ne rendent pas Podman Compose inutilisable, mais elles doivent être prises en considération avant de s'engager. Les utilisateurs de Docker Compose n'ont pas à se préoccuper de ces difficultés.
Meilleures pratiques pour l'utilisation de Podman Compose
Voici comment éviter les problèmes les plus courants liés à Podman Compose.
-
Commencez par des fichiers Compose simples. Veuillez ne pas migrer en premier lieu votre configuration Docker la plus complexe. Commencez par une application à service unique, vérifiez qu'elle fonctionne, puis ajoutez-en d'autres. Cela vous permet d'isoler les problèmes dès qu'ils surviennent.
-
Veuillez tester le réseau sans racine dès que possible. Lancez une application multiservice et vérifiez que les conteneurs peuvent communiquer via
localhost. Veuillez modifier vos chaînes de connexion en remplaçant les noms de service parlocalhost. Si le réseau ne fonctionne pas comme prévu, vous le saurez immédiatement. -
Veuillez être explicite concernant les volumes et les ports. Veuillez ne pas vous fier aux paramètres par défaut. Veuillez indiquer les chemins d'accès complets pour les montages liés. Veuillez définir les mappages de ports. Veuillez définir explicitement les permissions des fichiers si vous montez des répertoires hôtes. Le modèle sans racine de Podman implique que les hypothèses qui fonctionnaient dans Docker pourraient ne pas fonctionner ici.
-
Veuillez utiliser Podman Compose principalement pour le développement et la production légère. Il gère efficacement les environnements de développement locaux et les déploiements à petite échelle. Pour une production à grande échelle, il est recommandé d'utiliser Kubernetes ou une autre plateforme d'orchestration. Podman Compose n'est pas conçu pour les clusters à haute disponibilité ou les maillages de services complexes.
Conclusion
Podman Compose vous offre un moyen pratique d'exécuter des applications multi-conteneurs avec Podman plutôt qu'avec Docker. Il lit vos fichiers Compose existants et les convertit en commandes Podman, vous évitant ainsi d'avoir à apprendre un tout nouveau flux de travail. Cependant, il ne s'agit pas d'une réplique exacte de Docker Compose. Le fonctionnement du réseau est différent, certaines fonctionnalités ne sont pas prises en charge et il sera nécessaire d'ajuster les chaînes de connexion et les configurations afin qu'elles correspondent au modèle basé sur les pods de Podman.
Enfin, je vous recommande de vous renseigner sur les différences entre Docker et Podman afin d'en savoir plus sur leurs approches architecturales respectives et leur compatibilité.
FAQ sur Docker Compose
Qu'est-ce que Podman Compose ?
Podman Compose est un outil basé sur Python qui lit les fichiers Docker Compose et les convertit en commandes Podman. Il vous permet d'exécuter des applications multi-conteneurs à l'aide de Podman au lieu de Docker, vous offrant ainsi le même flux de travail Compose sans nécessiter de démon ou de privilèges root.
Est-il possible d'utiliser les fichiers Docker Compose avec Podman Compose ?
Oui, Podman Compose lit les fichiers standard d'docker-compose.yml. La plupart des fonctionnalités de base de Docker Compose sont prêtes à l'emploi, mais il est nécessaire d'ajuster les chaînes de connexion des noms de service à localhost en raison du modèle de réseau basé sur les pods de Podman.
Quelle est la principale différence entre Podman Compose et Docker Compose ?
Podman Compose fonctionne par défaut sans root et ne nécessite pas de démon, tandis que Docker Compose nécessite que le démon Docker soit exécuté en tant que root. Podman Compose utilise également un réseau basé sur des pods, dans lequel les conteneurs partagent l'localhost, tandis que Docker Compose attribue à chaque service son propre nom d'hôte.
Pourquoi mes services ne parviennent-ils pas à se connecter lorsque j'utilise Podman Compose ?
Podman Compose regroupe tous les services dans un seul pod qui partage un espace de noms réseau, de sorte que les conteneurs communiquent via localhost au lieu d'utiliser des noms de service. Il vous sera nécessaire de modifier les chaînes de connexion telles que db:5432 en localhost:5432 dans les configurations de votre application.
Podman Compose est-il compatible avec macOS et Windows ?
Oui, mais vous devrez d'abord exécuter Podman dans une machine virtuelle Linux à l'aide de Podman Desktop ou d' podman machine. Cela ajoute une certaine complexité par rapport à Linux, où Podman fonctionne de manière native, et vous pourriez rencontrer des ralentissements dans la synchronisation des fichiers et des anomalies au niveau du réseau.
