Windowsで開発を進める中で、「本番環境と同じLinuxでテストしたい」「Macユーザーの同僚と環境を揃えたい」と感じたことはありませんか?あるいは、便利なDocker Desktopのライセンス変更で代替手段を探している方もいるかもしれません。
そんな課題を解決するのが、WSL2 (Windows Subsystem for Linux 2) と Docker の組み合わせです。
WSL2は、Windows上でLinuxカーネルを直接実行し、ネイティブに近いパフォーマンスでLinux環境を実現するMicrosoftの技術。一方、Dockerは、アプリケーションとその依存関係を「コンテナ」という軽量な仮想環境にパッケージ化し、どこでも同じように動かすためのプラットフォームです。
この二つを組み合わせることで、使い慣れたWindows PC上で、本番環境に近いLinuxベースの強力な開発環境を手軽に、しかも無料で構築できます。環境構築の手間を大幅に削減し、開発に集中できるのが大きな魅力です。
WSL2 + Dockerの主なメリット:
- Windows上でLinux環境をほぼネイティブに再現:OSの違いによる問題を最小限に。
- 軽量かつ高速なアプリ実行環境:Dockerコンテナで素早く環境を構築・破棄。
- 開発環境のコード化と共有:DockerfileやDocker Composeを使えば、チーム間で全く同じ環境を簡単に共有可能。
- Docker Desktopの代替:ライセンスを気にせず無料でDocker環境を利用可能。
- VS Codeとの優れた連携:Windows上のVS Codeからシームレスな開発体験。
この記事では、前提条件の確認からWSL2の導入、Dockerのセットアップ、基本的な使い方、開発を効率化するヒント、そしてトラブルシューティングまで、ステップバイステップで丁寧に解説していきます。
準備:前提条件の確認
スムーズな導入のために、まず以下の前提条件を確認しましょう。
- Windowsのバージョン:
- Windows 10: バージョン 2004 (ビルド 19041) 以降
- Windows 11: 全バージョン対応
- (確認方法: Windows設定 > システム > バージョン情報)
- ハードウェア仮想化支援機能:
- CPUが仮想化支援機能 (Intel VT-x または AMD-V) に対応し、BIOS/UEFI設定で有効になっている必要があります。
- (確認方法: タスクマネージャー > パフォーマンス > CPU の項目に「仮想化: 有効」と表示されているか確認。無効の場合はPC起動時にBIOS/UEFI設定画面に入り、関連項目を有効化してください。)
- 推奨リソース:
- メモリ(RAM): 8GB以上 (16GB以上推奨)
- ディスク空き容量: 20GB以上 (WSLディストリビューションやDockerイメージのサイズにより変動)
ステップ1:WSL2をWindowsにインストールする
前提条件を満たしていれば、WSL2をインストールします。
1. 必要なWindows機能を有効化する (手動の場合)
Windowsの比較的新しいバージョンでは wsl --install
コマンドが自動で試みますが、確実に行う場合やトラブル時に確認してください。
Windowsの検索バーで「Windowsの機能の有効化または無効化」と入力して設定画面を開きます。リストの中から以下の2つの項目にチェックを入れて「OK」をクリックしてください。
- Linux用Windowsサブシステム
- 仮想マシンプラットフォーム
(※これらの機能が有効になるまで、少し時間がかかる場合があります。完了後に再起動を求められることがあります。)
2. WSLをインストール (または更新) する
Windows PowerShell または コマンドプロンプトを「管理者として実行」で起動し、以下のコマンドを実行します。これにより、WSLのコアコンポーネントと、デフォルトのLinuxディストリビューション(通常はUbuntu)がインストールされます。
wsl --install
(すでにWSLがインストールされている場合は wsl --update
で最新版に更新できます。)
3. PCを再起動する
WSL2のインストールと有効化を完了させるために、Windowsパソコンを再起動してください。
4. Linuxディストリビューション (Ubuntu) の状態確認と起動
再起動後、インストールされたLinuxディストリビューションの状態を確認します。PowerShellまたはコマンドプロンプトで以下のコマンドを実行してください。
wsl -l -v
以下のように、インストールしたディストリビューション (例: Ubuntu) の STATE
が Stopped
と表示される場合があります。
NAME STATE VERSION
* Ubuntu Stopped 2
Stopped
状態の場合、または初めて起動する場合は、以下のコマンドで明示的に起動します。(Ubuntu
の部分は、上記 wsl -l -v
で表示された実際のディストリビューション名に置き換えてください)
wsl -d Ubuntu
初めて起動する場合、ここでLinux用のユーザー名とパスワードの設定を求められます。これらはWindowsのログイン情報とは別なので、自由に設定してください(パスワードは入力時に表示されませんが、入力されています)。
(もし wsl --install
でUbuntuがインストールされなかった場合や、他のディストリビューションを使いたい場合は、Microsoft Storeから希望のディストリビューション(例:「Ubuntu」)を検索してインストールしてください。)
5. 最終確認
Ubuntuの初期設定が完了し、プロンプトが表示されたら、念のためPowerShellに戻り、再度以下のコマンドを実行して、STATE
が Running
、VERSION
が 2
になっていることを確認します。
wsl -l -v
NAME STATE VERSION
* Ubuntu Running 2
これでWSL2の基本的な準備は完了です。
ステップ2:WSL2 (Ubuntu) にDocker Engineを導入する
WSL2 (Ubuntu) の準備ができたので、Docker Engineをインストールします。Docker公式の手順に従って進めます。
1. Ubuntuを起動し、パッケージリストを更新する
スタートメニューなどからUbuntuを起動し、以下のコマンドを実行して、パッケージ情報を最新の状態にします。
sudo apt update && sudo apt upgrade -y
2. Dockerリポジトリ利用に必要なパッケージをインストールする
HTTPS経由でDockerリポジトリにアクセスするために必要なツールをインストールします。
sudo apt install ca-certificates curl software-properties-common gnupg lsb-release -y
3. Docker公式のGPGキーを追加する
ダウンロードするDockerパッケージが公式のものであることを保証するためのGPGキーを追加します。
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
4. Dockerリポジトリを設定する
Ubuntuのパッケージマネージャー (apt) がDockerのパッケージをどこからダウンロードすればよいかを知るために、Dockerの公式リポジトリ情報を追加します。
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
5. Docker Engineをインストールする
リポジトリ情報を再度読み込み、最新版のDocker Engine、CLIツール、containerd、および関連プラグインをインストールします。
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
6. 動作確認
インストールが成功したか確認するため、バージョン情報を表示させてみましょう。
sudo docker --version
Dockerのバージョンが表示されれば、インストールは成功です!
ステップ3:WSL2とDockerを使いやすく連携させる設定
このままでは使いにくい部分を解消するための設定を行います。
1. Dockerサービスの自動起動
Ubuntu起動時にDockerサービスが自動で開始されるように設定します。Systemdを利用する方法 (推奨) と、簡易的な.bashrc
を利用する方法があります。
方法A: Systemdを利用する (推奨)
WSLでsystemdが有効になっている場合、または有効化する場合に推奨される、より安定した方法です。
① systemdの有効化 (まだの場合): Ubuntuターミナルで sudo nano /etc/wsl.conf
を実行し、以下の内容を追加または編集します。
[boot]
systemd=true
ファイルを保存 (Ctrl+O, Enter) して閉じた (Ctrl+X) 後、PowerShellで wsl --shutdown
を実行し、WSLを完全に再起動します。その後、再度Ubuntuを起動してください。
② Dockerサービスの有効化と起動: Ubuntuターミナルで以下を実行します。
sudo systemctl enable docker # PC起動時にDockerを自動起動するよう設定
sudo systemctl start docker # Dockerサービスを今すぐ起動
③ 状態確認 (任意): sudo systemctl status docker
でサービスの状態を確認できます (active (running)
ならOK)。
方法B: .bashrc
を利用する (簡易設定)
Systemdを使わない、または設定が難しい場合の簡易的な代替手段です。
以下のコマンドを実行して、シェル起動時にDockerサービスを開始するコマンドを .bashrc
ファイルの末尾に追加します。
echo 'sudo service docker status > /dev/null || sudo service docker start' >> ~/.bashrc
(status
を確認し、起動していなければ start
するように変更しました。)
(注意: この方法はシェル起動の度にDockerの起動/状態確認コマンドが実行されるため、わずかにシェル起動が遅くなる可能性があります。)
2. sudo
なしでDockerコマンドを実行する設定
毎回 sudo
を入力するのは手間なので、現在のLinuxユーザーを docker
グループに追加します。
sudo usermod -aG docker $USER
重要: このグループ変更を有効にするには、必ずUbuntuターミナルを一度閉じて再度開くか、PowerShellで wsl --shutdown
を実行後にUbuntuを起動し直してください。
3. 連携設定の動作確認
Ubuntuターミナルを再起動した後、以下のコマンドを実行して、Dockerが sudo
なしで正常に動作するか確認しましょう。
docker run hello-world
コンソールに「Hello from Docker!」というメッセージが表示されれば、連携設定は成功です!
ステップ4:Dockerコンテナを作成して実行してみる (基本操作)
Dockerの基本操作として、コンテナの作成・実行・確認方法を見ていきます。
1. Dockerイメージのダウンロード
コンテナの設計図である「Dockerイメージ」をDocker Hubからダウンロードします。例として最新のUbuntuイメージを取得します。
docker pull ubuntu:latest
2. コンテナの起動と対話的な操作
ダウンロードしたイメージを使ってコンテナを起動し、コンテナ内部のシェル (bash) に接続します。
docker run -it --rm ubuntu bash
-it
: 対話的な操作を可能にするオプション。--rm
: コンテナ終了時に自動的に削除するオプション (一時的な利用に便利)。ubuntu
: 使用するイメージ名。bash
: コンテナ内で実行するコマンド。
実行後、プロンプトが変わりコンテナ内に入ります。exit
でコンテナを終了できます (--rm
付きなので同時に削除されます)。
3. コンテナの確認
- 実行中のコンテナを確認:
docker ps
- 停止中のコンテナも含めて全て確認:
docker ps -a
開発効率を上げるヒント
WSL2+Docker環境をさらに活用するためのヒントを紹介します。
1. VS Code とのシームレスな連携
Visual Studio Code (VS Code) を使うことで、開発体験が劇的に向上します。以下の拡張機能をインストールしましょう。
- Remote – WSL: VS Codeから直接WSL環境に接続し、WSL内のファイルをWindows上から直接編集・デバッグできます。ターミナルもWSLのものをそのまま使えます。
- Docker: Dockerイメージ、コンテナ、ボリューム、ネットワークなどをVS CodeのサイドバーからGUIで管理できます。コンテナの起動/停止、ログ表示、ファイル操作などが簡単になります。
インストール後、VS Code左下の緑色のアイコン ><
をクリックし、「Connect to WSL」を選択するとWSL環境に接続できます。
2. Docker Compose で複数コンテナを管理
多くのアプリケーションはWebサーバー、データベースなど複数のサービスで構成されます。これらをまとめて定義・管理するには Docker Compose が便利です。
① プロジェクトディレクトリに compose.yaml
というファイルを作成します。(従来の compose.yml
や docker-compose.yml
でも認識されますが、新しいプロジェクトでは compose.yaml
が推奨されます)
(例: 簡単なNginxウェブサーバー)
version: '3.8'
services:
web:
image: nginx:latest
ports:
- "8080:80" # ホストの8080番ポートをコンテナの80番ポートに接続
② そのディレクトリで以下のコマンドを実行します。
docker compose up -d # バックグラウンドで起動 (-dオプション)
③ Windowsのブラウザで http://localhost:8080
にアクセスすると、Nginxのデフォルトページが表示されます。
④ 停止する場合は docker compose down
を実行します。
3. ボリュームマウントとファイル配置
コンテナにホストのファイルを共有したり、データを永続化したりするにはボリュームマウントを使います。
Windowsフォルダのマウント:
# Windowsのプロジェクトフォルダをコンテナの /app にマウント
docker run -v /mnt/c/Users/YourUser/project:/app nginx
(パスは環境に合わせて変更してください)
WSL内フォルダのマウント (推奨):
# WSLのホームディレクトリ下のプロジェクトフォルダをマウント
docker run -v ~/projects/my-app:/app nginx
パフォーマンスTip: ソースコードなど頻繁にアクセスするファイルは、/mnt/c/
以下のWindowsフォルダをマウントするよりも、WSLファイルシステム内 (例: ~/projects
) に配置し、それをマウントする方がI/Oパフォーマンスが大幅に向上します。
パフォーマンスとメンテナンス
環境を快適に保つためのヒントです。
1. WSLとDockerの更新
- WSLの更新: PowerShell (管理者) で
wsl --update
を実行します。 - Docker Engineの更新: Ubuntuターミナルで
sudo apt update && sudo apt upgrade -y
を実行します。
2. 不要なDockerリソースの削除
使わなくなったコンテナ、イメージ、ボリューム、ネットワークはディスク容量を圧迫します。定期的に整理しましょう。
docker system prune -a --volumes
-a
: 停止中のコンテナと未使用イメージ(danglingだけでなく全て)を削除。--volumes
: 未使用ボリュームも削除(注意:必要なデータが含まれていないか確認)。- (実行前に削除される内容が表示されるので確認してください)
3. WSLのリソース設定 (任意)
WSL2が使用するメモリやCPUコア数を制限したい場合は、Windowsのユーザーフォルダ ( C:\Users\YourUser
) に .wslconfig
というファイルを作成し、以下のように記述します (例: メモリ4GB、4コア)。
[wsl2]
memory=4GB
processors=4
設定後、PowerShellで wsl --shutdown
を実行してWSLを再起動すると反映されます。
4. セキュリティに関する簡単な注意
- コンテナ内では不必要にrootユーザーでプロセスを実行しない。
- 公式や信頼できる提供元のDockerイメージをベースにする。
- 機密情報(APIキーなど)をイメージに直接含めない(環境変数やDocker secretsを利用)。
トラブルシューティング:よくあるエラーと対処法
一般的な問題とその解決策です。
エラー1:Dockerサービスが起動しない / Cannot connect to the Docker daemon
対処法:
- 手動起動/状態確認: (Systemd利用時)
sudo systemctl start docker
やsudo systemctl status docker
を試す。(Systemd未使用時)sudo service docker start
を試す。 - WSLの再起動: PowerShellで
wsl --shutdown
を実行後、Ubuntuを再起動。 - 設定確認: ステップ3の自動起動設定や権限設定を見直す。
エラー2:権限不足のエラー / permission denied
対処法:
- グループ所属確認:
groups $USER
でdocker
グループに所属しているか確認。 - 再設定: 所属していない場合、
sudo usermod -aG docker $USER
を実行。 - WSL再起動/再ログイン: グループ変更後は必ずWSL再起動 (
wsl --shutdown
) またはUbuntuターミナルの再起動が必要。
エラー3:WSL自体の問題 / 起動が遅い、不安定
対処法:
- WSL更新: PowerShellで
wsl --update
を実行。 - リソース確認: PCのメモリやCPUが不足していないか確認。
.wslconfig
で制限しすぎていないか確認。 - Windows機能確認: ステップ1の「Windowsの機能」が有効になっているか再確認。
FAQ:よくある質問
Q1: Docker Desktopを使う方法と何が違うの?
A1: Docker DesktopはGUIツールを含む統合パッケージ、こちらはCLI中心のDocker Engine直利用です。
- GUI: Desktopは有り、こちらは基本CLI (VS Code拡張で補完可)。
- ライセンス: Desktopは企業利用等で有料の場合あり、こちらは無料。
- リソース: こちらの方が一般的に軽量。
- 連携: Docker Desktopをインストールしている場合、設定 (Settings > Resources > WSL Integration) でこのWSL環境と連携させることも可能です。どちらのDockerデーモンを使うか選択できます。
Q2: Windows 11でも同じ手順で使えますか?
A2: はい、Windows 11でも同様の手順で利用可能です。
Q3: WindowsのエクスプローラーからWSL2内のファイルにアクセスできますか?
A3: はい。エクスプローラーのアドレスバーに \\wsl$\Ubuntu
(またはお使いのディストリビューション名) と入力するか、左側のナビゲーションペインの「Linux」からアクセスできます。WSLターミナルで explorer.exe .
を実行するとカレントディレクトリをエクスプローラーで開けて便利です。
WSL環境の削除(アンインストール)
WSL環境が不要になった場合に、特定のLinuxディストリビューションやWSL自体を削除する手順です。
注意: Linuxディストリビューションを登録解除(アンインストール)すると、そのディストリビューション内に保存されていたすべてのデータ(ファイル、インストールしたソフトウェア、設定など)が完全に削除されます。 必要なデータは事前に必ずバックアップしてください。
1. 特定のLinuxディストリビューションの削除
特定のディストリビューション(例: Ubuntu)のみを削除したい場合は、以下の手順を実行します。
① インストールされているディストリビューションを確認する:
PowerShellまたはコマンドプロンプトを開き、以下のコマンドを実行して、削除したいディストリビューションの正確な名前を確認します。
wsl -l -v
出力例:
NAME STATE VERSION
* Ubuntu Running 2
Debian Stopped 2
② ディストリビューションの登録を解除する:
削除したいディストリビューション名を指定して、以下のコマンドを実行します。(<ディストリビューション名>
の部分を上記で確認した名前に置き換えてください)
wsl --unregister <ディストリビューション名>
例えば、Ubuntuを削除する場合は以下のようになります。
wsl --unregister Ubuntu
このコマンドを実行すると、指定したディストリビューションとそのデータがシステムから削除されます。
2. WSLコアコンポーネントの完全削除 (任意)
WSL機能自体をWindowsから完全に削除したい場合は、上記でディストリビューションをすべて登録解除した上で、以下のいずれかの操作を行います。
- 方法A: アプリと機能からアンインストール
- Windowsの設定を開き、「アプリ」>「インストールされているアプリ」(または「アプリと機能」)に移動します。
- 検索ボックスに「Linux 用 Windows サブシステム」と入力します。
- 表示された項目を選択し、「アンインストール」をクリックします。
- 方法B: Windowsの機能から無効化
- Windowsの検索バーで「Windowsの機能の有効化または無効化」と入力して設定画面を開きます。
- リストの中から以下の項目のチェックを外します。
- Linux用Windowsサブシステム
- 仮想マシンプラットフォーム
- 「OK」をクリックします。
どちらの方法でも、変更を適用するためにPCの再起動が必要になる場合があります。
まとめ:WSL2+Dockerで開発効率をブーストしよう!
この記事では、前提条件からインストール、設定、基本操作、開発Tips、メンテナンス、トラブルシューティングまで、WSL2とDockerを使った開発環境構築を包括的に解説しました。
設定手順は少し多いですが、一度構築すれば、Windows上でLinuxベースの開発・テストが驚くほど快適になります。特にVS Codeとの連携やDocker Composeの活用は、日々の開発効率を大きく向上させるでしょう。
ぜひこの記事を参考にして、あなたのWindows PCに快適なDocker開発環境を構築し、開発をもっと効率的に、もっと楽しくしてください!
