Docker Desktop sous windows - Améliorer les performances des volumes

Cet article a été écrit il y a plus de quatre ans, son contenu n'est peut-être plus d'actualité.

docker windows error

J'ai donné la semaine passé une formation sur deux jours à docker et docker compose. Les stagiaires étaient équipés pour certains de postes sous linux et d'autres sous windows 10.

Pas de soucis sur les petites images ou les petits projets, mais lors de l'installation de drupal-project avec la stack docker4drupal, nous avons rencontrés pas mal de soucis avec les machines sous windows. Outre le fait que la commande composer create-project était très longue (une vingtaine de secondes sous linux) elle tombait la plupart du temps en timeout...

Install of drupal/core failed
The following exception is caused by a process timeout
Check https://getcomposer.org/doc/06-config.md#process-timeout for details

In Process.php line 1204:

The process "'/usr/bin/unzip' -qq '/var/www/html/drupal/vendor/composer/tmp-d8567404fa0141121df2ec9512c3daa3' -d '/var/www/html/drupal/vendor/composer/bb103905'" exceeded the timeout of 300 seconds.
Docker error

En creusant un peu nous nous sommes rendu compte qu'il s'agissait d'une simple tache de dezippage qui finissait par planter.

Ce sont en fait les temps d'accès sur les volumes windows, montés par exemple sur c:/ ou tout autre disque géré par windows qui sont très lents

Point de montage windows

Il est possible d'améliorer grandement ça en utilisant le système de fichier linux fourni par WSL2 (Windows Subsystem for Linux)

Pour commencer dans les options de Docker Desktop, vérifiez bien que le wsl2 est bien activé :

wsl 2 activé

 

Ensuite nous allons installer une distribution de linux avec laquelle nous allons travailler, ouvrez le Microsoft Store et faite une recherche sur la distribution linux que vous souhaitez installer, dans mon cas, nous allons prendre la dernière version d'Ubuntu, cliquez sur installer :

ubuntu wsl

Cela va prendre quelques minutes, peut-être un peu plus suivant votre connexion. Une fois téléchargé, cliquez sur Ouvrir pour lancer l'installation :

Ubuntu wsl installation

Une langue vous sera demandée :

Ubuntu installation

Ainsi qu'un nom d'utilisateur et un mot de passe, j'ai choisi d'utiliser les même que ma session windows, parce que je ne suis pas très original.

Ubuntu wsl install

 J'ai laissé les options de montage par défaut :

ubuntu wsl installation mount

Et après quelques secondes et un "reboot" de la  machine ubuntu, le système est installé, vous pouvez maintenant fermer la fenêtre.

Retour dans les options de Docker Desktop, dans la section Resources / WSL Integration, activez l'intégration avec la distribution fraichement installée :

Docker enable distrib

 

Appliquez les changements, et ouvrez un explorateur windows, dans la barre d'adresse saisissez \\wsl$ c'est le chemin système vers les disques "linux", nous allons travailler

wsl disk

Nous allons naviguer dans le repertoire Ubuntu-22.04 dans le dossier home/[UTILISATEUR] dans lequel je vais créer un répertoire de travail (l'équivalent du c:/wamp/www) que je vais appeler www car les habitudes restent ! Je créé dans ce dossier un sous dossier drupal où je reprends les fichiers docker-compose, Makefile et .env fournis par docker4drupal.

Docker4drupal

 

j'ouvre mon terminal dans ce dossier et lance les containers via la commande docker compose up -d :

docker compose windows

Et je relance ma commande précédente qui plantait :


docker compose exec php composer create-project drupal-composer/drupal-project:9.x-dev mon-dossier --no-interaction

et cette fois, en une vingtaine de secondes, c'est un succès !

 

windows docker success

Je ne suis pas un expert de docker sous windows, il y a peut-être des solutions plus élégantes, je suis preneur de suggestions, mais cela fonctionne !

 

Écrit par Kevin Gautreau — développeur & formateur PHP/Drupal freelance en Auvergne. me contacter

Contenus en rapport

article · 2 Jun 2020 Utiliser une image docker pour exécuter les tâches Node / Gulp en dev ou CI En ayant marre d'avoir à gérer x versions de de NodeJS sur ma machine avec pour chacune ses dépendances et incompatibilités, et de devoir se souvenir pour… article · 4 Mai 2022 Déployer ses présentations sur gitlab pages, avec reveal.js, docker et gitlab-ci Comme souvent quand je commence un support de formation, je passe (perd ?) du temps à modifier mon process pour gérer mes slides. Après un site drupal me… snippet · 13 Nov 2019 Docker Compose & Traefik, répondre sur une URL et ses sous-domaines J'utilise maintenant docker-compose pour l'ensemble de mes projets, principalement avec la formidable pile « docker4drupal ». Cette pile utilise Traefik pour… snippet · 11 Mar 2022 Docker Mysql - Créer une seconde base de données automatiquement Si vous utilisez une image mysql, mariadb (ou dérivée comme wodby/mariadb de la suite docker4drupal) alors vous savez que par défaut une seule base de données…

Commentaires (1)

Comments

Tcho (non vérifié)

Une fois encore, Monsieur Kgaut ne se laisse pas abattre par l'adversité et ne nous a pas laissé tomber.



Merci pour avoir assuré le SAV et permettre à toute l'équipe de rentrer de plein pied dans une nouvelle dimension.