ウチのWin10もようやくこの前のWindowsUpdateでWSL2が有効になりました。
早速、公式の手順に従ってDockerをWSL2に対応させて行きましょう
https://docs.docker.com/docker-for-windows/wsl/
その前に、What's WSL2
WSLはWindowsSubsystemForLinuxの略称
WindowsのコマンドラインでLinuxのコマンドが使えるよー的なものだとおもって貰えば良いでしょう。
WSL2はWSLのバージョン2になります。ただし、WSL1の完全上位互換ではなくメリットとデメリットがあります。
https://docs.microsoft.com/ja-jp/windows/wsl/compare-versions
まずは前提確認
- Docker、バージョンは2.3.0.2以上
- Windows10、バージョン 2004、ビルド 19041 以上
WSL2をインストールする
まずは、MicrosoftストアからUbuntuを入手
WSLにつかうLinuxOSは汎用性を考えてUbuntuにしました。
ファイルサイズが大きいですが、WSL用には一番オススメできるかと思います。
https://www.microsoft.com/ja-jp/p/ubuntu/9nblggh4msv6?activetab=pivot:overviewtab
WSL2にアップデート
そのままだと、WSL1でインストールされるので、WSL2にアップデートしましょう。
# インストールされているWSLとバージョンを確認
wsl -l -v
NAME STATE VERSION
* Ubuntu Running 1
*
がついているのがデフォルトのWSLです。WSLに複数のLinuxを入れているとたくさん出ます。
通常は、デフォルトのWSLがDockerと統合されます。
# WSLをバージョンアップ
wsl --set-version Ubuntu 2
# インストールされているWSLとバージョンを再確認
wsl -l -v
NAME STATE VERSION
* Ubuntu Running 2
UbuntuのVersionが2になっていれば成功です。
早速 Docker For WindowsでWSL2を有効に
-
Settings > General
と進んで、Use WSL 2 based engine
にチェックしてApply & Restart
-
Settings > Resources > WSL Integration
デフォルトのWSLで統合機能が有効になっています。
これで、いままでHyper-V上の仮想マシンで動いていたDockerが、WSL2で動くようになりました。
が、落とし穴
WSL2は完全なLinuxになったもののWindowsのファイル共有でパフォーマンスが落ちてしまうデメリットがあります。
そのため、volumesでWindowsのローカルフォルダをコンテナに共有していた場合、体感的にかなり遅くなってしまいました。
Linuxのファイルシステムにソースコードを配置することで解決
wslのWindowsとの共有領域である/mnt/c/
配下をvolumesで共有すると遅くなってしまうので、
プログラムのコードはそれ以外の場所に置きましょう。
公式のベストプラクティスにもそう書いてあります。
https://docs.docker.com/docker-for-windows/wsl/#best-practices
WSL2のDockerでVSCodeのDevContainer開発
WSL内でcode
コマンドを実行すれば、WindowsのVSCodeがRemote-WSLモードで開く!!!
code ~/hoge_workspace/
あとは、WSL内のフォルダにdevcontainer.json
を用意していつもの手順でReopen in Container
DevContainer関連
WSLのディレクトリにWindows10のエクスプローラーからアクセス
WSL内のLinuxが起動した状態で以下のネットワークパスにアクセスすることで、WSL内のフォルダにエクスプローラーでアクセス可能です。
そのままWindowsからファイルを編集することも可能です。
\\wsl$\