« 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 === | ||