Github上でも議論されていました。
私の環境では、Dockerコンテナの/tmp上で npm install
を実行した後、node_modulesのsymlinkをアプリのディレクトリに設定することで動作を速くすることができました。検証結果を共有します。
改善前:
$ cd /mnt/app && npm install
改善後:
$ cp /mnt/app/package.json /tmp/.
$ cd /tmp && npm install
$ ln -s /tmp/node_modules /mnt/app/.
環境
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.11.6
BuildVersion: 15G31
$ vboxmanage --version
5.0.24r108355
$ vboxmanage showvminfo default | grep -E '(CPU|Memory)'
Memory size: 2048MB
CPU exec cap: 100%
Number of CPUs: 2
CPUID Portability Level: 0
CPUID overrides: None
$ docker -v
Docker version 1.11.2, build b9f10c9
$ docker-machine -v
docker-machine version 0.7.0, build a650a40
$ node -v
v4.4.7
$ npm -v
2.15.8
検証
検証プロジェクトとして、Material UIのdocsを使います。
$ git clone git@github.com:callemall/material-ui.git
$ cd material-ui/docs
ローカルディレクトリ
結果: 約3分
$ rm -rf node_modules
$ time npm install
...
npm install 148.11s user 51.25s system 117% cpu 2:50.11 total
Docker:マウントディレクトリ
結果: 約16分
$ rm -rf node_modules
$ docker run --volume $(pwd):/mnt/app -it node:4.4 bash
root@6d7dba381d3a:/# cd /mnt/app
root@6d7dba381d3a:/mnt/app# time npm install
...
real 15m55.132s
user 5m29.150s
sys 16m18.160s
Docker:/tmp
結果: 約4分
$ rm -rf node_modules
$ docker run --volume $(pwd):/mnt/app -it node:4.4 bash
root@65b6a6c739d5:/# cp /mnt/app/package.json /tmp/.
root@65b6a6c739d5:/# cd /tmp
root@65b6a6c739d5:/tmp# time npm install
...
real 4m4.300s
user 2m16.840s
sys 2m4.350s