Astuce pour optimiser Composer dans vos containers Docker

Partager le dossier de cache

Lorsque vous lancé Composer celui ci va télécharger la liste des packages au format JSON pour les stocker dans un dossier de cache.

Capture%20d%E2%80%99%C3%A9cran_2018-08-13_14-29-02.png

Quand vous lancé votre container celui ci est vide, donc vous perdez 30s à chaque fois que vous le lancer.

L'idée ici est d'aller chercher votre dossier de cache local pour le monter sous forme de volume

1) lancer la commande composer global config cache-dir pour voir où se trouve votre dossier de cache

Chez moi, j'ai  /home/ines/.cache/composer :

[ines@pcp-iw Drupal]$ composer global config cache-dir
Changed current directory to /home/ines/.config/composer
/home/ines/.cache/composer

2) Faite également la même chose dans votre container

root@3c78a91b1f8d:/project# composer global config cache-dir
Changed current directory to /root/.composer
Do not run Composer as root/super user! See https://getcomposer.org/root for details
/root/.composer/cache

3) Enfin monter le volume dans vos docker-compose

- ~/.cache/composer/:/root/.composer/cache/

 

Paralléliser les téléchargements

Une personne sur Twitter (merci Quentin) m'a indiqué un module composer (hirak/prestissimo) qui permet de paralléliser les téléchargements

Dans un container Docker Drupal (ou il y a 244 packages) sans le dossier de cache partagé et sans prestissimo d'installé

composer update met 4m42

Capture%20d%E2%80%99%C3%A9cran_2018-08-13_15-18-50.png

Même test avec prestissimo d'installé

composer update met 1m20

Capture%20d%E2%80%99%C3%A9cran_2018-08-13_15-22-30.png

 

Pour le mettre en place il suffit d'installer le package dans votre Dockerfile

RUN composer global require hirak/prestissimo --prefer-dist --no-progress --no-suggest --classmap-authoritative