Apprenez à diagnostiquer et corriger les goulots d'étranglement de Docker Desktop sur macOS et Windows. Ce guide couvre l'allocation des ressources, l'optimisation des entrées-sorties disque, la latence réseau et les flux de travail d'optimisation sûrs avec des commandes concrètes et les sorties attendues.
---
Introduction
Docker Desktop est devenu le moyen par défaut pour de nombreux développeurs d'exécuter des conteneurs sur macOS et Windows. Il regroupe une machine virtuelle Linux légère, un démon de gestion et une interface graphique conviviale, mais cette commodité peut avoir un coût : partage de fichiers lent, utilisation élevée du processeur et démarrage lent des conteneurs. Ces problèmes sont rarement causés par les conteneurs eux-mêmes ; ils proviennent généralement de la manière dont Docker Desktop est configuré pour votre machine et votre charge de travail.
Ce guide propose une approche systématique pour optimiser Docker Desktop afin d'en améliorer les performances. Vous apprendrez à inventorier votre environnement, à ajuster les limites de ressources, à optimiser les paramètres de disque et de réseau, et à vérifier les résultats avec des métriques concrètes. Les étapes sont pratiques et réversibles, ce qui vous permet d'expérimenter en toute sécurité.
---
Inventaire de la version et de l'environnement
Avant de modifier un quelconque paramètre, enregistrez votre version actuelle de Docker Desktop, les détails du système d'exploitation et les spécifications matérielles. Cette base de référence vous aidera à suivre les améliorations et à revenir en arrière si nécessaire.
Prérequis
- Docker Desktop 4.10 ou version ultérieure (exécutez
docker versionpour vérifier) - macOS 11+ ou Windows 10/11 avec le backend WSL2 activé
- Au moins 8 Go de RAM, mais 16 Go recommandés pour un travail multi-conteneurs
- Privilèges administratifs pour modifier les paramètres de Docker Desktop
Vérifiez les versions de Docker et du système d'exploitation
Exécutez la commande suivante pour obtenir la version du serveur Docker :
docker version --format '{{.Server.Version}}'
Sortie attendue :
24.0.5
Sur macOS, vérifiez que le framework Hypervisor est disponible :
sysctl kern.hv_support
Sortie attendue si Hypervisor.framework est disponible :
kern.hv_support: 1
Sur Windows, vérifiez l'état de WSL2 :
wsl --status
Sortie attendue montrant la version par défaut comme étant 2 :
Default Version: 2
Comprendre l'allocation actuelle des ressources
Docker Desktop réserve du CPU et de la mémoire pour sa machine virtuelle. Dans l'interface graphique, accédez à Settings > Resources. Notez les curseurs pour les processeurs, la mémoire, le swap et la taille de l'image disque. Enregistrez également l'emplacement de l'image disque et sa taille actuelle :
du -sh ~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw # macOS
Pour Windows avec WSL2, listez les distributions :
wsl --list --verbose
Sortie attendue montrant la distribution docker-desktop-data :
NAME STATE VERSION
* docker-desktop Running 2
docker-desktop-data Running 2
Identifiez votre charge de travail
Exécutez-vous une base de données, un serveur web, un outil de build ou un mélange ? Utilisez docker stats pour voir l'utilisation des ressources en direct :
docker stats --no-stream
Extrait de sortie attendue :
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O
abc123def456 myapp 2.40% 128MiB / 1.945GiB 6.43% 1.2kB / 0B 0B / 0B
Enregistrez les noms des conteneurs et leur utilisation typique du CPU et de la mémoire. Cela vous indique quels conteneurs ont besoin de plus de ressources et lesquels sont inactifs.
---
Chemin de configuration sûr
Les paramètres de Docker Desktop peuvent être modifiés via l'interface graphique ou en éditant le fichier settings.json. Pour la reproductibilité, utilisez la CLI ou modifiez le fichier JSON après avoir quitté Docker Desktop.
Étape 1 : Ajustez le CPU et la mémoire
Commencez par des augmentations modestes. Si votre hôte possède 8 CPU, attribuez-en 4 à Docker. Si vous avez 16 Go de RAM, donnez 8 Go à Docker. Une sur-allocation peut affamer l'hôte et provoquer du swapping.
Exemple : Définir le CPU et la mémoire via le fichier de paramètres (macOS)
- Quittez Docker Desktop.
- Éditez
~/Library/Group Containers/group.com.docker/settings.json. - Trouvez les clés
cpusetmemoryMiBet définissez les valeurs :
{
"cpus": 4,
"memoryMiB": 8192,
"swapMiB": 2048
}
- Enregistrez et redémarrez Docker Desktop.
Sur Windows, le fichier se trouve à %APPDATA%\Docker\settings.json.
Étape 2 : Optimisez les entrées-sorties disque
Pour les montages bind (partage de répertoires hôte dans les conteneurs), Docker Desktop utilise différentes implémentations de partage de fichiers. Sur macOS, gRPC-FUSE est le défaut mais peut être lent pour de nombreux petits fichiers. Passer à VirtioFS (si disponible) peut améliorer considérablement le débit.
Activer VirtioFS (Docker Desktop 4.6+)
- Allez dans Settings > General et cochez « Use Virtualization framework » (macOS).
- Ensuite, allez dans Settings > Experimental Features et activez « Use the new Virtualization framework » et « Enable VirtioFS accelerated directory sharing ».
- Redémarrez Docker Desktop.
Pour Windows avec WSL2, assurez-vous que vos fichiers de projet sont stockés dans le système de fichiers WSL2 (par exemple, \\wsl$\Ubuntu\home\user\project) plutôt que sur le système de fichiers Windows (C:\Users\...). L'accès aux fichiers Windows depuis WSL2 est lent.
Étape 3 : Ajustez la taille de l'image disque
La VM Docker utilise une image disque dynamique qui croît mais ne rétrécit jamais automatiquement. Si vous voyez no space left on device, augmentez la taille de l'image disque. Le paramètre se trouve sous Settings > Resources > Disk image size.
Étape 4 : Réglage du réseau
Le réseau par défaut de Docker (bridge) ajoute une surcharge NAT. Pour la communication inter-conteneurs, utilisez un réseau bridge défini par l'utilisateur ou le réseau hôte (si approprié).
Créez un réseau défini par l'utilisateur :
docker network create --driver bridge mynet
Sortie attendue :
3f9a2b1c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b
Exécutez les conteneurs avec --network mynet pour contourner le bridge par défaut.
Pour les conteneurs qui doivent exposer des ports à l'hôte, utilisez --publish avec des ports spécifiques au lieu de --publish-all pour réduire la surcharge.
---
Vérification et diagnostics
Après avoir appliqué les modifications, vérifiez que les performances se sont améliorées et que le système reste stable.
Mesurer le temps de démarrage des conteneurs
Utilisez time pour mesurer combien de temps un conteneur met à démarrer et à devenir prêt :
time docker run --rm alpine echo "hello"
Sortie attendue incluant le temps d'exécution :
hello
real 0m3.412s
user 0m0.034s
sys 0m0.020s
Un temps real plus faible indique une réponse plus rapide de la VM.
Benchmark des entrées-sorties disque à l'intérieur d'un conteneur
Exécutez un test simple d'écriture/lecture avec dd :
docker run --rm -v /tmp:/data alpine sh -c "dd if=/dev/zero of=/data/testfile bs=1M count=1000 oflag=direct && dd if=/data/testfile of=/dev/null bs=1M"
Sortie attendue montrant le débit en Mo/s. Comparez avant et après l'activation de VirtioFS.
Vérifiez la pression sur le CPU et la mémoire
Exécutez docker stats pendant que votre charge de travail est active et assurez-vous que l'utilisation du CPU n'atteint pas constamment 100 % et que l'utilisation de la mémoire est bien en dessous de la limite. Sur l'hôte, utilisez Activity Monitor (macOS) ou Task Manager (Windows) pour vous assurer que l'hôte n'effectue pas de swapping.
Tester la latence réseau entre conteneurs
Exécutez deux conteneurs sur le même réseau défini par l'utilisateur et effectuez un ping :
docker run -d --name test1 --network mynet alpine sleep 300
docker run --rm --network mynet alpine ping -c 4 test1
Sortie attendue montrant les temps d'aller-retour ; idéalement sous 1 ms sur le même hôte.
---
Modes de défaillance et récupération
L'optimisation des performances peut parfois causer de l'instabilité. Voici les modes de défaillance courants et comment récupérer.
Sur-allocation de CPU ou de mémoire
Symptôme : L'hôte devient lent, Docker Desktop peut geler, ou les conteneurs sont tués par manque de mémoire (OOM).
Récupération : Réduisez les CPU ou la mémoire alloués dans les paramètres. Si Docker Desktop ne démarre pas, modifiez directement settings.json pendant que Docker est arrêté.
Problèmes avec VirtioFS
Symptôme : Les fichiers ne se synchronisent pas, erreurs comme Too many open files, ou accès aux fichiers lent après activation.
Récupération : Désactivez VirtioFS et revenez à gRPC-FUSE. Consultez les journaux de Docker Desktop : ~/Library/Containers/com.docker.docker/Data/log/host/ sur macOS.
Image disque pleine
Symptôme : Erreurs no space left on device dans les conteneurs.
Récupération : Augmentez la taille de l'image disque via les paramètres. Pour récupérer de l'espace à partir d'images/conteneurs supprimés, exécutez :
docker system prune -a --volumes
Cela supprime toutes les données inutilisées. À utiliser avec précaution.
Mauvaise configuration réseau
Symptôme : Les conteneurs ne peuvent pas communiquer après la création de réseaux personnalisés ou le changement de DNS.
Récupération : Supprimez le réseau personnalisé et utilisez le bridge par défaut pour tester. Assurez-vous que les paramètres DNS dans Docker Desktop sont définis sur automatique ou des IP internes valides.
Plan de retour en arrière
Conservez toujours une sauvegarde du fichier settings.json original avant de le modifier. Si Docker Desktop ne démarre pas, vous pouvez restaurer la sauvegarde et redémarrer.
---
Liste de contrôle opérationnelle
Utilisez cette liste pour établir un processus d'optimisation des performances reproductible.
- [ ] Enregistrer la ligne de base : version de Docker, système d'exploitation, spécifications matérielles et paramètres de ressources actuels.
- [ ] Identifier les 3 principaux points douloureux de performance (par exemple, synchronisation de fichiers lente, CPU élevé, builds lents).
- [ ] Modifier un paramètre à la fois et tester après chaque changement.
- [ ] Benchmark avant et après en utilisant les méthodes de la section Vérification et diagnostics.
- [ ] Surveiller l'utilisation des ressources de l'hôte pendant les tests pour éviter la sur-allocation.
- [ ] Documenter les modifications et les résultats dans un journal partagé.
- [ ] Planifier des revues périodiques (par exemple, mensuelles) pour ajuster les paramètres à mesure que les charges de travail changent.
- [ ] Maintenir Docker Desktop à jour pour bénéficier des améliorations de performance.
- [ ] Utiliser
.dockerignorepour réduire la taille du contexte des builds. - [ ] Optimiser la mise en cache des couches du Dockerfile pour accélérer les builds d'images.
---
Conclusion
L'optimisation des performances de Docker Desktop est un processus itératif. Commencez par un inventaire clair de votre environnement et de votre charge de travail, apportez une modification à la fois et vérifiez avec des métriques concrètes. En ajustant le CPU et la mémoire, en optimisant le partage de fichiers avec VirtioFS sur macOS ou le placement du système de fichiers WSL2 sur Windows, et en utilisant des réseaux personnalisés, vous pouvez améliorer considérablement la réactivité des conteneurs. Gardez la liste de contrôle opérationnelle à portée de main pour une optimisation continue. N'oubliez pas de revenir en arrière sur tout changement qui cause de l'instabilité, et sauvegardez toujours les fichiers de configuration avant de les modifier.