問題: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を参考にやってみてください)