😊

Dockerコンテナ内でnpmコマンドがやたらと遅い時にやってみること

2023/09/25に公開

はじめに

Nuxtの開発環境を作ろうとDocker内にNuxtのプロジェクトを作成し、ホスト上(今回はWindows)のフォルダをコンテナにマウントして作業しようとした場合、npm run devコマンド等がやたらと遅く作業に支障が出る場合、以下を試してみると速度が上がるかもしれません。

名前付きボリュームを使う

以下のようにnode_modulesの部分に名前付きボリュームを使用し、コンテナ内のみで取り扱うようにすると速度が改善されます。名前付きボリュームを使用しないと、大量のファイルをホストと同期し続ける必要があるためパフォーマンスに影響が出るようです。

version: "3.7"

services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: node
    ports:
      - "3000:3000"
    volumes:
      - ./app:/app
      - node_modules:/app/node_module
    stdin_open: true
    tty: true
    environment:
      - HOST=0.0.0.0
      - CHOKIDAR_USEPOLLING=true

volumes:
  node_modules:

具体的な設定の流れ

Nuxtの開発環境を構築後、以下の手順を実行すればnode_modulesはコンテナ内で管理されるようになります。

  • とりあえず名前付きボリュームを設定せずコンテナを立ち上げる
  • npx-create-nuxt-appでプロジェクトを作成する
  • コンテナを落とす
  • 名前付きボリュームを設定する
  • ホスト側に存在するnode_modulesは使用しないので削除してもよい
  • コンテナを立ち上げる
  • npm installを実行し、新しいnode_modulesに各種ライブラリをインストールする

まとめ

ホスト上(今回はWindows)のフォルダをコンテナにマウントして作業する再、npm run dev等がやけに遅いなぁと感じたら、node_modulesを名前付きボリュームで管理するようにするといいかもしれません。

Discussion