« Symfony Docker » : différence entre les versions

 
(5 versions intermédiaires par le même utilisateur non affichées)
Ligne 156 : Ligne 156 :
<li><p>La commande les intègre dans l’autoloader.</p></li></ul>
<li><p>La commande les intègre dans l’autoloader.</p></li></ul>
</li></ol>
</li></ol>
-----


=== '''Quand l’utiliser ?''' ===
=== '''Quand l’utiliser ?''' ===
Ligne 177 : Ligne 176 :
| <code>composer dump-autoload</code>
| <code>composer dump-autoload</code>
|}
|}
-----


=== '''Différence avec <code>composer install</code> et <code>composer update</code>''' ===
=== '''Différence avec <code>composer install</code> et <code>composer update</code>''' ===
Ligne 191 : Ligne 187 :
* '''<code>composer dump-autoload</code>''' :<br />
* '''<code>composer dump-autoload</code>''' :<br />
'''Ne touche pas aux dépendances''' – ne fait que mettre à jour l’autoloader.
'''Ne touche pas aux dépendances''' – ne fait que mettre à jour l’autoloader.
-----


=== '''Exemple concret dans un projet Symfony''' ===
=== '''Exemple concret dans un projet Symfony''' ===
Ligne 210 : Ligne 203 :
<syntaxhighlight lang="bash">composer dump-autoload</syntaxhighlight></li></ul>
<syntaxhighlight lang="bash">composer dump-autoload</syntaxhighlight></li></ul>
</li></ol>
</li></ol>
-----


=== '''Bonnes pratiques''' ===
=== '''Bonnes pratiques''' ===
Ligne 226 : Ligne 216 :
Si vous montez un volume (<code>./:/var/www/html</code>), exécutez la commande '''dans le conteneur''' :</p>
Si vous montez un volume (<code>./:/var/www/html</code>), exécutez la commande '''dans le conteneur''' :</p>
<syntaxhighlight lang="bash">docker-compose exec app composer dump-autoload</syntaxhighlight></li></ul>
<syntaxhighlight lang="bash">docker-compose exec app composer dump-autoload</syntaxhighlight></li></ul>
-----


=== '''Résumé''' ===
=== '''Résumé''' ===
Ligne 243 : Ligne 230 :


== '''Symfony cache et composer cache avec Docker''' : ==
== '''Symfony cache et composer cache avec Docker''' : ==
-----


=== '''1. Rôle du dossier <code>/var/cache</code> dans Symfony''' ===
=== '''1. Rôle du dossier <code>/var/cache</code> dans Symfony''' ===
Ligne 253 : Ligne 237 :
'''Problème avec Docker :'''<br />
'''Problème avec Docker :'''<br />
Par défaut, ce cache est régénéré à chaque démarrage du conteneur → '''ralentissements''' (surtout en dev).
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''' ===
=== '''2. Stratégies pour optimiser le cache avec Docker''' ===
Ligne 269 : Ligne 250 :


'''Inconvénients :''' - Peut causer des problèmes de permissions (solved avec <code>chmod</code> ou <code>entrypoint.sh</code>).
'''Inconvénients :''' - Peut causer des problèmes de permissions (solved avec <code>chmod</code> ou <code>entrypoint.sh</code>).
-----


==== '''B. Utiliser un volume Docker nommé (prod + dev)''' ====
==== '''B. Utiliser un volume Docker nommé (prod + dev)''' ====
Ligne 291 : Ligne 269 :


exec "$@"</syntaxhighlight>
exec "$@"</syntaxhighlight>
-----


==== '''C. Cache warming en production''' ====
==== '''C. Cache warming en production''' ====
Ligne 306 : Ligne 282 :
COPY --from=builder /app /var/www/html
COPY --from=builder /app /var/www/html
RUN php bin/console cache:warmup  # ⚡ Pré-chauffe le cache</syntaxhighlight>
RUN php bin/console cache:warmup  # ⚡ Pré-chauffe le cache</syntaxhighlight>
-----


=== '''3. Gestion des environnements''' ===
=== '''3. Gestion des environnements''' ===
Ligne 325 : Ligne 299 :
| Cache éphémère (pas de montage)
| Cache éphémère (pas de montage)
|}
|}
-----


=== '''4. Exemple complet (docker-compose.yml)''' ===
=== '''4. Exemple complet (docker-compose.yml)''' ===
Ligne 347 : Ligne 318 :
       APP_ENV: dev
       APP_ENV: dev
       COMPOSER_CACHE_DIR: /tmp/composer</syntaxhighlight>
       COMPOSER_CACHE_DIR: /tmp/composer</syntaxhighlight>
-----
=== '''5. Bonnes pratiques''' ===
=== '''5. Bonnes pratiques''' ===


Ligne 357 : Ligne 325 :
<li><p>'''Permissions''' : Résolvez-les via <code>entrypoint.sh</code> ou <code>docker-compose</code> :</p>
<li><p>'''Permissions''' : Résolvez-les via <code>entrypoint.sh</code> ou <code>docker-compose</code> :</p>
<syntaxhighlight lang="yaml">user: "${UID:-1000}:${GID:-1000}"</syntaxhighlight></li></ol>
<syntaxhighlight lang="yaml">user: "${UID:-1000}:${GID:-1000}"</syntaxhighlight></li></ol>
-----


=== '''Différence avec Composer Cache''' ===
=== '''Différence avec Composer Cache''' ===
Ligne 381 : Ligne 346 :
| Warming dans l’image + volume
| Warming dans l’image + volume
|}
|}
-----


=== '''Résumé''' ===
=== '''Résumé''' ===
Ligne 602 : Ligne 564 :
</li></ul>
</li></ul>
</li></ol>
</li></ol>


=== 8. Avantages de cette configuration ===
=== 8. Avantages de cette configuration ===
Ligne 655 : Ligne 616 :
exec docker-php-entrypoint "$@"</syntaxhighlight>
exec docker-php-entrypoint "$@"</syntaxhighlight>
Cela signifie : 1. Votre script fait d’abord son travail personnalisé (vérifier/vendor et installer les dépendances si besoin) 2. Ensuite, il “passe la main” au processus PHP-FPM officiel, devenant ainsi le processus principal du container
Cela signifie : 1. Votre script fait d’abord son travail personnalisé (vérifier/vendor et installer les dépendances si besoin) 2. Ensuite, il “passe la main” au processus PHP-FPM officiel, devenant ainsi le processus principal du container


=== Alternative sans <code>exec</code> ===
=== Alternative sans <code>exec</code> ===
Ligne 756 : Ligne 716 :


Voici une version complète optimisée avec '''un service Composer dédié''', tout en gardant la configuration pour vos bundles locaux et l’intégration avec PHPStorm.
Voici une version complète optimisée avec '''un service Composer dédié''', tout en gardant la configuration pour vos bundles locaux et l’intégration avec PHPStorm.


=== Structure finale recommandée ===
=== Structure finale recommandée ===
Ligne 933 : Ligne 892 :
#* Port : 8080
#* Port : 8080
#* Path mappings comme ci-dessus
#* Path mappings comme ci-dessus


=== ✅ Points clés de cette configuration ===
=== ✅ Points clés de cette configuration ===