Docker が遅い?WSL 側にプロジェクトを置くだけで劇的に速くなった話

四角ズボン
2026-03-11
2026-03-11

はじめに

Windows で Docker を使っていると、
「docker build が遅い」「npm install が重い」「レスポンスが遅い」「動きがもっさりする」
こんな悩みを抱える人は多いと思います。

自分も例外ではなく、特に Windows ファイルシステム(NTFS)上のプロジェクトを bind mount したときの I/O の遅さ にずっと困っていました。

ところが、プロジェクトを WSL 側(ext4)に置くだけで一気に改善したので、その内容をまとめます。

※本記事では「Ubuntu などの WSL2 Linux ディストリビューションをインストールしている」環境でDockerを起動している方を前提にしています。

なぜ遅いのか:Windows と WSL の I/O の違い

Docker Desktop は内部的に WSL2 上で動いています。
そのため、Windows 側のファイルを bind mount すると、WSL ↔ Windows 間の I/O が発生します。

  • NTFS は Linux から見ると I/O が遅い
  • 特に大量の小さなファイルを扱う npm / composer / pip 系は顕著
  • Docker build の COPY も遅くなる

つまり、Windows 側に置いたプロジェクトを Docker に渡すと、常に“境界越え”が発生してしまうわけです。

WSL 側に置くとどう変わるのか

WSL のファイルシステム(ext4)は Linux ネイティブなので、
Docker から見ると「同じ Linux 内の高速なファイルシステム」として扱われます。

結果として、

  • bind mount が高速化
  • npm install が体感で数倍速くなる
  • docker build の COPY が劇的に改善
  • DB の初期化もスムーズ

と、全体的に I/O が軽くなります。

実際の移行手順

1. WSL のディストリビューションを確認

コマンドプロンプト

>wsl -l -v

  NAME              STATE           VERSION
* Ubuntu            Running         2
  docker-desktop    Running         2

2. WSLターミナルを起動

 コマンドプロンプト

>wsl

3. プロジェクトを WSL 側へコピー

wslターミナル

$ mkdir ~/projects
$ cp -r /mnt/c/Users/xxx/projects ~/projects

4. VSCode で開く

wslターミナル

$ code ~/projects

※VS Codeの拡張機能「Remote - WSL」を使うとVSCode のサーバー部分が WSL 内で動いてファイルアクセスがLinuxネイティブになりとても快適です。

注意点・ハマりポイント

  • Windows 側のエディタで直接編集すると遅いので、VSCode Remote を使うのがベスト
  • Windows ↔ WSL 間のファイルコピーは少し遅い
  • WSL のディスクサイズが足りなくなる場合がある(後で拡張可能)

まとめ

  • Windows 上の Docker が遅い原因の多くは NTFS の I/O
  • プロジェクトを WSL 側に置くだけで高速化できる
  • 特に npm / docker build / DB 起動で効果が大きい
  • 手順も簡単

Docker のパフォーマンスに悩んでいる人は、試してみてください!