Déploiement avec Podman Compose¶
Créer et lancer un premier projet Compose en mode rootless.
Structure du projet¶
Organisez vos projets Compose dans un répertoire dédié :
Convention : ~/compose/<nom-projet>/ — un dossier par application, chacun avec son docker-compose.yml.
Compose minimal — Nginx¶
Créez le fichier Compose :
cat > ~/compose/monapp/docker-compose.yml << 'EOF'
services:
web:
image: docker.io/library/nginx:alpine
ports:
- "8080:80"
restart: always
volumes:
- ./html:/usr/share/nginx/html:Z
EOF
Créez la page HTML de test :
Le flag :Z est obligatoire
Sur AlmaLinux (et tout système avec SELinux actif), le flag :Z sur les volumes déclenche un relabeling automatique des fichiers montes. Sans ce flag, le conteneur recevra un Permission denied à l'accès des fichiers. Le :Z est spécifique a un seul conteneur — utilisez :z (minuscule) si plusieurs conteneurs partagent le même volume.
Lancement et test¶
Verifiez que le conteneur tourne :
Testez l'accès HTTP :
Pour arrêter :
Aller plus loin — Compose multi-services
Un exemple plus realiste avec un reverse proxy nginx et une application Python :
services:
proxy:
image: docker.io/library/nginx:alpine
ports:
- "8080:80"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf:Z
restart: always
depends_on:
- app
app:
image: docker.io/library/python:3.12-alpine
command: python -m http.server 5000
volumes:
- app-data:/data:Z
restart: always
volumes:
app-data:
Avec un fichier nginx.conf :
Les conteneurs communiquent entre eux via le réseau Podman interne — app est résolu automatiquement par le nom de service.
Compatibilité docker-compose.yml
Podman Compose supporte la majorité des directives docker-compose.yml standard. Les différences notables :
network_mode: hostfonctionnebuild:fonctionne via Buildah- Les volumes nommes sont supportes
- Les healthchecks sont supportes
- Les secrets Docker Swarm ne sont pas supportes (Swarm n'existe pas dans Podman)
L'application tourne, mais elle ne survivra pas a un reboot. Pour ca, il faut un service systemd.