Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
25
Help us understand the problem. What are the problem?

posted at

updated at

WSL2 のDocker for Windowsで動作が重い時の原因と対処方法

問題:WSL2のDocker for Windowsの動作が重い・・・

Windows10 Homeの環境に、WSL2でDocker for Windowsがインストールできるようになって、よかったなぁと思って使っていたら、Dockerコンテナの動作が遅かったり、Docker buildコマンドでイメージ作成がにやたらと時間がかかったりするようで、なんだかおかしいなと思っていました。

原因:WindowsとWSL2(Ubuntu)のファイルシステム変換処理に時間がかかっていた。

これまで、ソース群をWindowsの「C:\Source\Project」みたいなところに入れてました。WSL2(Ubuntu)では、この場所は「/mnt/c/Source/Project」に該当します。
実はこのように「/mnt/」以下の場所は、WindowsのファイルシステムからWSL2(Ubuntu)のファイルシステムに変換かける処理が発生するようで、このために動作がめっちゃ遅くなってたようです。

対処方法:ソース群をWindowsファイルシステム配下のフォルダから、WSL2(Ubuntu)ファイルシステム配下のフォルダに移動させる。

WSL2とDocker for Windowsがこの問題を解決してくれたら良いのですが、まだ対応方法がないようです。
現状のベストプラクティスとしては、ソース群をWindowsファイルシステムである「/mnt/」以下に配置せず、WSL2(Ubuntu)のファイルシステム管理下のフォルダに配置して、Dockerを動作させることみたいです。

私の場合Ubuntuのbashで、 mvコマンドを使い、「mv /mnt/c/Source/Project /home/username/Source」みたいなコマンドで、ソース群を「/home/username」配下に配置しました。
このファイル移動はファイルシステム変換があるため、かなり時間がかかります。

ファイル移動の後、Dockerコンテナを起動して動作を確認したところ、軽くなっていました。
また、Docker buildコマンドでイメージ作成したところ、COPYコマンドがめっちゃ早くなり、使用上耐えられるまでのビルド速度になりました。

ファイル操作とGit操作にはVisual Studio codeを使う。

Windowsファイルシステム配下のフォルダから、WSL2(Ubuntu)ファイルシステム配下のフォルダに移動するということは、WindowsのGUIでどうやって使うようにするかが問題になります。

Windowsのエクスプローラーで使いたい場合は、パスに「\\wsl$」を入れると、ネットワークフォルダとして表示させることができます。
しかしエクスプローラーでは、ファイルシステム変換がかかるため、1つ1つのファイルを操作するにはいいですが、まとめてファイルを操作するときに、アプリによっては激重だったりエラーになったりするようです。

GitのGUIクライアントとしてSourcetreeを使っていましたが、この場合もファイルをまとめて操作するので、動作が重くならないか心配です。

おすすめな方法としては、ファイル操作とGit操作にはVisual Studio codeを使います。
https://azure.microsoft.com/ja-jp/products/visual-studio-code/

①「Remote Development」プラグインで「Remote WSL」プラグインを入れる。

Visual Studio codeに「Remote Development」というプラグインを入れると「Remote WSL」というプラグインが入ります。
https://code.visualstudio.com/blogs/2019/05/02/remote-development
こちらをつかうと、WSL2(Ubuntu)配下のファイル群にアクセスして、自由にファイルを操作したり、編集して開発できるようになります。

②「Git History」プラグインを入れる。

Visual Studio codeでは標準で基本的なGit操作ができますが、標準ではGitログ履歴がありません。
Visual Studio codeに「Git History」というプラグインを入れると、Sourcetreeのように、Gitのログ履歴をみながらGit操作ができるようになります。
https://marketplace.visualstudio.com/items?itemName=donjayamanne.githistory

③WSL2(Ubuntu)でGitHubにアクセスするためのキーペアを作ってGitHubに登録する

Visual Studio codeのWSLでは、「/home/username/.ssh/」配下にある、下記のファイルがGitへのアクセス情報として使われますのでWSL2(Ubuntu)でキーペアを作って、GitHubに登録しておきましょう。
そうすると、Visual Studio codeのWSLでもGitHubを使えるようになります。

/home/username/.ssh/id_rsa
/home/username/.ssh/id_rsa.pub
/home/username/.ssh/known_hosts

https://docs.github.com/ja/free-pro-team@latest/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent
(Linuxを参考にやってみてください)

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
25
Help us understand the problem. What are the problem?