Windowsユーザのためのdockerで知っておくべき点は?

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で繋ぐ」**というスタイルが現在のベストプラクティスです。