« Symfony Docker » : différence entre les versions

 
(8 versions intermédiaires par le même utilisateur non affichées)
Ligne 2 : Ligne 2 :


Pour pouvoir exécuter des commandes '''<code>composer</code>''', '''<code>symfony</code>''' et '''<code>bin/console</code>''' depuis votre machine locale tout en les faisant affecter le conteneur Docker, voici une approche optimale basée sur des '''volumes montés''' et des '''alias pratiques'''.
Pour pouvoir exécuter des commandes '''<code>composer</code>''', '''<code>symfony</code>''' et '''<code>bin/console</code>''' depuis votre machine locale tout en les faisant affecter le conteneur Docker, voici une approche optimale basée sur des '''volumes montés''' et des '''alias pratiques'''.
-----


=== '''1. Montage des volumes pour synchroniser les fichiers''' ===
=== '''1. Montage des volumes pour synchroniser les fichiers''' ===
Ligne 31 : Ligne 28 :
* <code>~/.composer:/tmp/composer</code> : Cache Composer pour éviter de retélécharger les dépendances.
* <code>~/.composer:/tmp/composer</code> : Cache Composer pour éviter de retélécharger les dépendances.
* <code>working_dir</code> : S’assure que les commandes s’exécutent dans <code>/var/www/html</code>.
* <code>working_dir</code> : S’assure que les commandes s’exécutent dans <code>/var/www/html</code>.
-----


=== '''2. Exécuter des commandes dans le conteneur depuis l’hôte''' ===
=== '''2. Exécuter des commandes dans le conteneur depuis l’hôte''' ===
Ligne 63 : Ligne 57 :
dc-console make:migration
dc-console make:migration
dc-symfony serve -d</syntaxhighlight>
dc-symfony serve -d</syntaxhighlight>
-----


=== '''3. Cas particulier : Développement d’un bundle local''' ===
=== '''3. Cas particulier : Développement d’un bundle local''' ===
Ligne 107 : Ligne 99 :
       - ./:/var/www/html
       - ./:/var/www/html
       - ~/.composer:/tmp/composer</syntaxhighlight>
       - ~/.composer:/tmp/composer</syntaxhighlight>
-----


=== '''Récapitulatif des bonnes pratiques''' ===
=== '''Récapitulatif des bonnes pratiques''' ===
Ligne 132 : Ligne 122 :
| Alias shell + volumes montés + Xdebug
| Alias shell + volumes montés + Xdebug
|}
|}
-----


==== '''Conclusion''' ====
==== '''Conclusion''' ====
Ligne 147 : Ligne 134 :


La commande '''<code>composer dump-autoload</code>''' est une commande essentielle dans l’écosystème PHP/Composer. Elle régénère le fichier d’'''autoloading''' (chargement automatique des classes) sans réinstaller les dépendances. Voici ce qu’elle fait en détail :
La commande '''<code>composer dump-autoload</code>''' est une commande essentielle dans l’écosystème PHP/Composer. Elle régénère le fichier d’'''autoloading''' (chargement automatique des classes) sans réinstaller les dépendances. Voici ce qu’elle fait en détail :
-----


=== '''À quoi sert <code>composer dump-autoload</code> ?''' ===
=== '''À quoi sert <code>composer dump-autoload</code> ?''' ===
Ligne 172 : 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 195 : 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 209 : 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 228 : 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 244 : 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 261 : 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 271 : 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 287 : 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 309 : Ligne 269 :


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


==== '''C. Cache warming en production''' ====
==== '''C. Cache warming en production''' ====
Ligne 324 : 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 343 : 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 365 : 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 375 : 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 399 : Ligne 346 :
| Warming dans l’image + volume
| Warming dans l’image + volume
|}
|}
-----


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


=== 8. Avantages de cette configuration ===
=== 8. Avantages de cette configuration ===
Ligne 673 : 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 774 : 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 951 : 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 ===