主題の件の通り、docker 上で npm run serve を実行すると1~2分くらい時間がかかり、地味にストレスを感じていました。
PCのスペックも悪くないので、さすがにこれはおかしいかも?と思い、ググって調べてみると10秒くらいに短縮できたので備忘録として残しておきます。
改善前
例によって、以下のような Dockerfile と docker-compose.yml を使用していました。
# Dockerfile
FROM node:slim
RUN apt-get update
RUN npm install -g @vue/cli
WORKDIR /work# docker-compose.yml
version: "3"
services:
  vue:
    build: ./
    ports:
      - 8082:8080
    stdin_open: true
    volumes:
      - ./dev/:/work
    tty: trueこれで以下のような感じで npm run serve します。
> docker-compose up -d
> docker exec -it <コンテナ名> bash
# コンテナに入る
root@***:/work# vue create.
# vue アプリが初期化されて作られる
root@***:/work# npm run serve
# ここで、アプリが立ち上がるまでに1~2分かかる改善後
Dockerfile には変更ありません。
docker-compose.yml を以下の通り変更します。
# docker-compose.yml (変更後)
version: "3"
services:
  vue:
    build: ./
    ports:
      - 8082:8080
    stdin_open: true
    volumes:
      - ./dev/:/work
      - node_modules_volume:/work/node_modules  # ←これ追加
    tty: true
volumes:    # ←これ追加
  node_modules_volume:  # ←これ追加どうやら node_modules もマウントしてホスト側と共有することで遅くなるみたいです。
これを docker 側のボリュームとしてマウントすることで共有しなくなるので遅さが解消されるようです。
詳細は下記の参考先を参照してみてください。
参考
こちらを参考にさせていただきました。

【JavaScript】Docker上でのnpm/yarnの操作を10倍早くする方法
【JavaScript】Docker上でのnpm/yarnの操作を10倍早くする方法
コメント