Aller au contenu

Symfony + Docker sur Windows : boostez vos performances avec WSL (BEAUCOUP plus fluide !)

DevOps & Outils

⏱️ 22 min

Sur Windows, un projet Symfony qui tourne dans Docker peut devenir très lent : premier chargement à 30–40 secondes, puis 2–3 secondes à chaque refresh… et dès que vous modifiez un contrôleur, vous repartez pour un gros délai.

La cause la plus fréquente : le projet est stocké dans le système de fichiers Windows (NTFS) et monté dans des conteneurs Linux. Résultat : énormément d’entrées/sorties (I/O) lentes (cache, vendor, autoload, fichiers temporaires…) et Symfony en souffre.

La solution la plus efficace (et la plus simple) : mettre le projet dans le système de fichiers Linux de WSL2 et lancer Docker depuis WSL.

Dans ce tutoriel, on reproduit exactement la démarche de la vidéo : installation d’un Ubuntu WSL dédié, copie du projet dans \\wsl$, configuration Docker Desktop, correction des permissions, puis mesure des gains.

Prérequis

  • Windows 10/11 avec WSL2 activé
  • Docker Desktop installé
  • Un projet Symfony (ici Symfony 8) avec un docker-compose.yaml
  • (Recommandé) PHPStorm (ou tout IDE compatible WSL)

1) Constater le problème

Dans la situation de départ :

  • Projet Symfony 8 installé sur Windows
  • Docker compose avec PHP + MySQL + Mailer + phpMyAdmin (donc “pas énorme” sur le papier)

Pourtant :

  • Premier chargement : ~35 secondes
  • Refresh : ~3 secondes
  • Après une modif (contrôleur, template…) : parfois 30 secondes à nouveau

Avant de changer quoi que ce soit, notez vos temps (même “à la louche”) : ça permettra de valider le gain après migration dans WSL.

2) Stopper votre stack Docker Windows

Dans votre terminal (PowerShell ou terminal Docker), arrêtez les conteneurs du projet :

docker compose down

Si vous voulez repartir propre (facultatif), vous pouvez aussi supprimer volumes/containers liés au projet. Mais ce n’est pas obligatoire.

3) Vérifier vos distributions WSL existantes

Ouvrez PowerShell et listez vos distributions :

wsl --list --verbose 

Vous devriez voir quelque chose du genre : Ubuntu, docker-desktop, etc.

4) Installer un Ubuntu WSL dédié (“demo”)

Dans la vidéo, l’idée est d’avoir un Ubuntu séparé (nommé demo) pour travailler.

Cas A — si votre Windows supporte l’installation avec renommage

Certaines versions récentes permettent d’installer une distribution en lui donnant un nom (comme dans la vidéo). Si ça fonctionne chez vous, utilisez :

wsl --install -d Ubuntu --name demo

Cas B — si --name n’existe pas chez vous

Pas de panique : installez Ubuntu “normalement”, puis vous pourrez créer une seconde instance via export/import (méthode classique). Dans ce cas :

wsl --install -d Ubuntu

Ensuite, vous pouvez dupliquer/renommer via wsl --export et wsl --import

Première ouverture

Au premier démarrage, Ubuntu vous demande :

  • un nom d’utilisateur
  • un mot de passe

Ensuite, vous arrivez dans votre home Linux, généralement vide :

cd ~
ls

5) Mettre le projet Symfony dans WSL (le point clé)

Objectif : avoir votre projet dans un chemin Linux du type :

/home/<user>/symfony-wsl

Méthode 1 : via l’explorateur Windows (\\wsl$)

  • Ouvrez l’explorateur Windows
  • Dans la barre d’adresse, allez sur :
\\wsl$\
  • Ouvrez votre distro demo
  • Allez dans :
\\wsl$\demo\home\<user>\
  • Créez un dossier (ex : symfony-wsl)
  • Copiez votre projet dedans

Note : dans la vidéo, MySQL est retiré avant copie pour éviter des soucis de permissions. Ça peut arriver, surtout si vous copiez des fichiers déjà créés par des conteneurs.

Méthode recommandée : copier depuis WSL

Si votre projet est sur C:\..., vous pouvez copier depuis WSL via /mnt/c/... (ça évite certains effets de bord) :

mkdir -p ~/symfony-wsl
# exemple : copier un dossier projet depuis Windows vers WSL cp -R /mnt/c/chemin/vers/votre-projet/* ~/symfony-wsl/

6) Ouvrir le projet “dans WSL” (important)

Vous devez travailler dans l’environnement WSL.

Deux options :

  • Ouvrir PHPStorm sur le dossier \\wsl$\demo\home\...
  • Ou depuis un terminal WSL, si vous utilisez VSCode :
cd ~/symfony-wsl
code .

Vous saurez que vous êtes “bien” dans WSL si votre terminal intégré est un bash Ubuntu et que vos chemins commencent par /home/....

7) Vérifier Docker Desktop : activer l’intégration WSL pour “demo”

C’est le piège classique : Docker fonctionne, mais pas dans la distro WSL tant que l’intégration n’est pas activée.

Dans Docker Desktop :

  • Settings
  • Resources
  • WSL Integration
  • Activez votre distro demo

Ensuite, retournez dans le terminal WSL.

8) Lancer Docker Compose depuis WSL

Dans votre dossier projet (dans WSL) :

docker compose up -d

Si tout va bien, vos services démarrent.

Si un service ne démarre pas (ex : souci de certificats .crt)

Dans la vidéo, un conteneur ne démarre pas car des fichiers .crt n’ont pas été copiés / ou ne sont pas accessibles (permissions).

Deux options simples en dev :

Option 1 : désactiver SSL pour ce projet (si vous n’en avez pas besoin)

Option 2 : corriger la copie + permissions (voir section suivante)

9) Corriger le gros classique : fichiers copiés mais “propriétaire = root”

Après une copie vers Linux, il arrive que les fichiers appartiennent à root (visible avec ls -l).

Dans ce cas, vous allez galérer (édition, suppression, copie de fichiers, etc.) et vous serez tenté de mettre sudo partout.

Solution : reprendre la propriété du projet.

Dans le dossier du projet :

cd ~/symfony-wsl
ls -l

Si vous voyez root root un peu partout, faites :

sudo chown -R $USER:$USER .

Re-vérifiez :

ls -l

Vous devez maintenant voir votre utilisateur comme propriétaire.

10) Corriger les permissions Symfony : var/cache et var/log

Une fois la stack démarrée, vous pouvez tomber sur des erreurs Symfony liées à l’écriture dans :

  • var/cache
  • var/log

Dans la vidéo, la correction appliquée consiste à donner ces dossiers à www-data (l’utilisateur web dans beaucoup d’images PHP/Apache ou PHP-FPM).

Option A : changer le owner du dossier var

Depuis WSL, à la racine du projet :

sudo chown -R www-data:www-data var

Option B : faire le chown dans le conteneur PHP

Si votre code est monté dans /app dans le conteneur :

docker compose exec php bash -lc "chown -R www-data:www-data /app/var" 

Important : selon votre Dockerfile / image, le service ne s’appelle pas forcément php et le chemin n’est pas forcément /app. Adaptez à votre docker-compose.yaml.

11) Constater le gain de performance

Rechargez votre Symfony.

Dans la vidéo, on passe à :

~24 ms, 10 ms, 14 ms sur des refresh

Un premier chargement autour de quelques centaines de ms au lieu de dizaines de secondes

C’est exactement l’objectif : Docker tourne “dans” un Linux (WSL2) avec un FS Linux, au lieu de faire transiter chaque lecture/écriture par NTFS.

12) Tester un vrai workflow dev (création d’un contrôleur)

On se connecte au conteneur PHP et on génère un contrôleur :

docker compose exec php bash

Puis dans le conteneur :

symfony console make:controller MainController

Vous retrouvez votre contrôleur dans votre projet, vous modifiez la route / le contenu, et vous constatez que :

  • le premier chargement après création est raisonnable
  • les refresh suivants sont instantanés
  • vous n’avez plus les “30 secondes à chaque modif”

Dépannage rapide (les soucis les plus fréquents)

“docker: command not found” dans WSL

  • Vérifiez Docker Desktop
  • Vérifiez WSL Integration activée pour votre distro (demo)

Permissions impossibles / “Operation not permitted”

  • Vérifiez le propriétaire des fichiers : ls -l
  • Reprenez la main : sudo chown -R $USER:$USER .

Symfony n’écrit pas dans var/

  • Faites sudo chown -R www-data:www-data var
  • Ou faites-le directement dans le conteneur (souvent mieux)

Certificats / .crt non copiés

  • En dev : désactivez temporairement SSL si ce n’est pas le sujet
  • Sinon : recopiez et corrigez les permissions après copie

Conclusion

Si vous développez Symfony sur Windows et que Docker est lent, la solution la plus efficace est :

  • Installer WSL2 (Ubuntu)
  • Mettre le projet dans le FS Linux (\\wsl$\... / /home/...)
  • Activer l’intégration WSL dans Docker Desktop
  • Lancer docker compose depuis WSL
  • Corriger les permissions (chown utilisateur + var/ pour www-data)

Résultat : un Symfony qui redevient fluide, même sur Windows.

Obtenir de l'aide

Pour obtenir de l'aide, vous pouvez accéder au serveur Discord pour une entraide par chat.

Symfony + Docker sur Windows : boostez vos performances avec WSL (BEAUCOUP plus fluide !)
Article publié le

Mots-clés : Configuration avancée de Docker

Partager :