Symfony Docker
Symfony cache et composer cache avec Docker :
1. Rôle du dossier /var/cache dans Symfony
Symfony utilise ce dossier pour : - Le cache applicatif (ex : compilation des templates Twig, cache des routes, annotations) - Le cache système (ex : fichiers de configuration compilés comme srcApp_KernelDevDebugContainer.php)
Problème avec Docker :
Par défaut, ce cache est régénéré à chaque démarrage du conteneur → ralentissements (surtout en dev).
2. Stratégies pour optimiser le cache avec Docker
A. Monter /var/cache en volume (pour le dev)
# docker-compose.yml
services:
php:
volumes:
- ./var/cache:/var/www/html/var/cache # Monte le cache Symfony
Avantages : - Le cache persiste entre les redémarrages du conteneur. - Meilleures performances en développement.
Inconvénients : - Peut causer des problèmes de permissions (solved avec chmod ou entrypoint.sh).
B. Utiliser un volume Docker nommé (prod + dev)
volumes:
symfony_cache: # Volume dédié pour le cache
services:
php:
volumes:
- symfony_cache:/var/www/html/var/cache
Bonus : Ajoutez un entrypoint.sh pour fixer les permissions :
#!/bin/bash
set -e
# Fixe les permissions du cache
chown -R www-data:www-data /var/www/html/var
exec "$@"
C. Cache warming en production
Dans votre Dockerfile :
FROM composer AS builder
WORKDIR /app
COPY . .
RUN composer install --no-dev --optimize-autoloader
FROM php:8.2-fpm
COPY --from=builder /app /var/www/html
RUN php bin/console cache:warmup # ⚡ Pré-chauffe le cache
3. Gestion des environnements
| Environnement | Recommandation |
|---|---|
| Développement | Volume monté (./var/cache:/...) + chmod
|
| Production | Volume nommé + cache warming dans l’image |
| CI/CD | Cache éphémère (pas de montage) |
4. Exemple complet (docker-compose.yml)
version: '3.8'
volumes:
symfony_cache: # Pour le cache
composer_cache: # Pour Composer
services:
app:
build: .
volumes:
- ./:/var/www/html
- symfony_cache:/var/www/html/var/cache
- composer_cache:/tmp/composer
environment:
APP_ENV: dev
COMPOSER_CACHE_DIR: /tmp/composer
5. Bonnes pratiques
En dev : Montez
var/cachepour éviter de tout recompiler.En prod : Utilisez
cache:warmupdans l’image + volume nommé.Permissions : Résolvez-les via
entrypoint.shoudocker-compose:user: "${UID:-1000}:${GID:-1000}"
Différence avec Composer Cache
Composer (~/.composer)
|
Symfony (/var/cache)
| |
|---|---|---|
| Type | Cache de dépendances | Cache applicatif |
| Montage | Toujours utile | Surtout en dev |
| Prod | Volume nommé recommandé | Warming dans l’image + volume |
Résumé
- Oui, on peut appliquer le même principe de volume monté pour
/var/cache.
- Mais : Symfony a besoin d’une gestion plus active (warming, permissions).
- Optimisez :
- Dev → Volume monté + permissions
- Dev → Volume monté + permissions
- Prod → Cache warming + volumes nommés
Cela garantit des performances optimales dans tous les cas ! 🚀