WindowsでDockerを利用する場合、以前は様々な苦労がありましたが、現在はWSL 2(Windows Subsystem for Linux 2)の登場により、MacやLinuxとほぼ変わらない快適な環境が構築できるようになりました。
WindowsユーザがDockerを扱う上で、特に知っておくべき重要なポイントを5つにまとめました。
1. 「WSL 2」バックエンドが必須かつ最強
現在の「Docker Desktop for Windows」は、WSL 2ベースのエンジンを使用するのが標準です。
- メリット: 従来のHyper-Vを使った方式に比べて、起動が圧倒的に速く、メモリの消費も効率的です。また、Windows HomeエディションでもDockerが動くようになりました。
- 注意点: インストール時に必ず「Use WSL 2 based engine」にチェックを入れるようにしてください。
2. ファイルの置き場所でパフォーマンスが激変する
Windows側(C:\ など)にソースコードを置き、それをコンテナ(Linux)にマウント(Bind Mount)すると、OS間のファイル変換処理が発生して動作が非常に遅くなります(特にNode.jsの node_modules などファイル数が多い場合)。
- 解決策: ソースコードは**WSL 2のファイルシステム内(
\\wsl$\Ubuntu\home\user\...など)**に配置してください。これにより、ネイティブのLinux環境と同等のI/O速度が出ます。 - 開発手法: VS Codeの拡張機能「WSL」や「Dev Containers」を使うと、WSL内のファイルをWindows側のVS Codeでシームレスに編集できて非常に快適です。
3. 改行コード問題(CRLF vs LF)
Windowsユーザが最もハマりやすい罠です。Windowsの標準の改行コードは CRLF ですが、Linux(Dockerコンテナ内)は LF です。
- 起きる問題: Windows上で作成したシェルスクリプト(
.sh)などをコンテナ内で実行しようとすると、「コマンドが見つからない」といった謎のエラーが起きます。 - 解決策: エディタの設定で改行コードを
LFにして保存する癖をつけるか、Gitの設定でcore.autocrlfを適切に設定(またはプロジェクトに.gitattributesを配置)して、勝手にCRLFに変換されないように防ぐ必要があります。
4. WSL 2のメモリ・CPU制限(.wslconfig)
WSL 2は初期設定のままだと、Windowsのシステムメモリを最大で50%(またはそれ以上)も確保しようとするため、PC全体の動作が重くなることがあります。
- 解決策: Windowsのユーザーフォルダ(
C:\Users\<ユーザー名>\)直下に.wslconfigという設定ファイルを作成し、WSL 2(つまりDocker)が使えるメモリ上限を設定しておくことを強くおすすめします。
.wslconfigの記述例:Ini, TOML
[wsl2] memory=8GB processors=4
5. 「Linuxコンテナ」と「Windowsコンテナ」の違い
Docker for Windowsには、通常のLinux環境を動かす「Linuxコンテナ」モードと、Windows Server環境などを動かす「Windowsコンテナ」モードの2つが存在し、タスクトレイのアイコンから切り替えることができます。
- 基本はLinux: Web開発などで使うイメージ(Ubuntu、Alpine、Python、Node、Nginxなど)はすべてLinuxコンテナ向けです。基本的には「Linuxコンテナ」モードのままでOKです(標準設定です)。
WindowsでのDocker開発は、**「WSL 2内にコードを置き、VS CodeのDev Containersで繋ぐ」**というスタイルが現在のベストプラクティスです。

