WindowsでDockerを使って開発するために知っておくこと良いこと

ファイルシステムの問題

Windows上のファイルシステムを使うとWSLとWindowsのファイルシステムの違いにより読み書きの速度が落ちてしまいます。

Linuxのファイルシステムだけで作業する

コマンドプロンプトやWindowsターミナルでwslとタイプして実行するとWSLにインストールしたLinuxのターミナルが起動します。


Windowsターミナルの場合、タブを追加して直接Linuxのターミナルを起動することもできます。
その時の初期のディレクトリが/mnt/c/Users/ユーザ名です。このままだとWindowsのファイルシステム上にファイルやディレクトリを作成することになり、LinuxとWindowsのファイルシステムの違いによる速度低下が起こります。P9による変換作業が実行されるためです。


cd ~とターミナルでタイプして実行することでLinuxのhomeディレクトリに移動できます。
こちらでディレクトリやファイルを作成するようにすると余計な変換作業が実行されないので速度低下は起こりません。

権限の問題

コンテナのユーザIDとホストのユーザIDは一致しないため、パーミッションを変更しないとコンテナ側のファイルを変更できません。


create-file-dockerはDockerでファイルを作成し、create-file-wslはWSLでファイルを作成しました。

Dockerに接続してパーミッションを確認

hat@tukumo:~/docker-laravel-vue-photo-album/$ docker compose exec app bash
root@2a762419a43f:/work/backend# ls -l create-file-*
-rw-r--r-- 1 root root 0 Nov  7 10:57 create-file-docker
-rw-r--r-- 1 1000 1000 0 Nov  7 10:51 create-file-wsl

WLSでパーミッションを確認

hat@tukumo:~/docker-laravel-vue-photo-album/backend$ ls -l create-file-*
-rw-r--r-- 1 root root 0 Nov  7 19:57 create-file-docker
-rw-r--r-- 1 hat  hat  0 Nov  7 19:51 create-file-wsl

Dockerに接続してファイルを作成するとユーザはrootになります。WSLでパーミッションを確認してもrootです。


WSLで作成したファイルは、DockerではユーザIDが1000になります。WSL上で編集するとDockerではユーザIDが1000で作業することになって想定していないユーザでファイルが作成されることになります。

Vscodeでroot権限で操作する

Vscodeの拡張機能でリモート先のコンテナに接続することができます。コンテナに接続するとroot権限で操作ができるのでどんなパーミッションのファイルでも編集できます。

理想的にはrootではない個別のユーザで権限を設定するのがLinuxとしては普通の使い方だと思うのですが、とりあえず個人で勉強するレベルではコンテナはrootで操作して問題なさそうです。
まずは動かしてみることが大事です。

気になる方は「docker 権限 root wsl」などのキーワードで検索すると対応策がたくさん出てきます。

Vscodeにエクセステンションを追加

コンテナにアタッチするにはエクステンションを追加します。

Remote - Containersです。VScodeをwslのターミナルでcode .とタイプして起動するとそのエクステンションがインストールされていないならオススメしてくるので間違えることはないと思います。私のときはおすすめエクステンションでインストールしろと言われたのでそのまま「はい」とインストールしました。

Vscodeでコンテナにアタッチする

Attach to Running Container

WSLターミナルでVScodeを起動すると、左下にWSLで起動していることが表示されます。そのアイコンをクリックするとコマンドメニューが表示されるので、Attach to Running Containerを選択します。


起動中のDockerイメージが選択出来るようになるので、開発のイメージを選択すると新しくDockerコンテナに接続したVScodeが起動します。


このVScode上で作業することでroot権限で、実行したり、ファイルを作成することも出来るようになります。

WSLが大量のメモリを使ってしまう

WSL2が大量のメモリを使って、私の環境の場合は全体で8G中WSLが5Gくらいメモリを使用すると、Windowsやブラウザなど他のアプリのメモリ利用でトータルのメモリ使用率が90%を超え始めて、Windowsの操作がもたつくようになります。そのまま使い続けるとマウスすら動きが怪しくなります。

WSLの設定ファイル

設定ファイルでWSLが利用できるメモリの上限を設定することができます。

設定ファイルのある場所に移動するには、おなじみのエクスプローラーを開いて、パスを示す場所にカーソル合わせて、%USERPROFILE%を入力します。


.wslconfigという名前のファイルを作成します。

[wsl2]
memory=4GB
swap=0

のように編集します。4GBはWSLの上限メモリ使用量です。各環境のパソコンの搭載メモリに応じて調整してみてください。

こちらを参考にしました。

私の場合は、全体で8GBのメモリでいろいろ試したところ4GBくらいでマウスが動かないなど挙動のおかしくなることはほとんどなくなりました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

先頭に戻る