🐳

WindowsにWSL2をインストールする【Docker Desktopをインストールために必須】

2025/01/06に公開

Windows上でのLinux環境構築が
恐ろしいほど簡単になっていて驚きました。

こんにちは、
ワニかず@40歳 出戻りエンジニアです。

私がエンジニアとして働き始めた2007年ごろ、
WindowsでUNIX環境を構築するものといえば
Cygwinぐらいしか知らず、
設定もそこそこ面倒だった記憶があるのですが、
今は仮想環境の構築が簡単になりましたね。

この記事をご覧になることで、
WindowsでLinux動作をさせる環境
「WSL2」のインストールがわかるとともに、
DockerとWSL2の関係について理解することができます。

WSL2をインストール

PowerShellを起動

  • Windowsキー+R で「ファイル名を指定して実行」の画面を開く
  • 入力欄に「powershell」と入力
  • Enterで起動する

PowerShellでコマンドを実行

  • PowerShellに「wsl --install」と入力しEnter

  • 完了まで待つ

  • 再起動が促されているので、PCを再起動する。

  • 再起動後、Linuxで使用するアカウント設定画面が表示されるので、お好きなユーザー名とパスワードを設定する。その際、セキュリティの関係で入力内容は見えないようになっている点に注意。

Docker Desktopをインストールためには必須

Docker DesktopをWindowsで使うために、
「WSL2」のインストールが必須となるのですが、
その理由について、まとめたいと思います。(Claudeが)

なぜ?(固めの回答)

  1. コンテナランタイム環境
  • WSL2 は軽量な Linux カーネルを提供
  • Docker のコンテナは Linux カーネル機能に依存
  • WSL2 によって、Windows 上でネイティブな Linux 環境が実現
  1. パフォーマンスの向上
  • WSL2 は完全な仮想化を提供
  • メモリ管理やファイルI/Oが効率的
  • Windows と Linux 間のシステムコールの変換が不要
  1. リソース管理の効率化
  • WSL2 はダイナミックなメモリ割り当てが可能
  • ホストのリソースを効率的に使用
  • コンテナの起動と停止が高速
  1. 開発環境の統一
  • Linux ベースのツールチェーンが利用可能
  • 本番環境(多くの場合 Linux)との互換性が向上
  • クロスプラットフォームの開発が容易

これらの理由から、Docker Desktop for Windows は
WSL2 を前提条件としています。Dockerは
元々 Linux 向けに設計されたため、WSL2の
Linux 環境を活用することで、最適なパフォーマンスと
互換性を実現しています。

というのが、Claude様の答えなのですが、
・・・・うーん、わからん(笑)
ということで、柔めの回答をしてもらいました。

なぜ?(柔めの回答)

Dockerは「Linuxの技術を使って作られている」
WindowsはもともとLinuxの技術を直接使えない

ここで WSL2 の役割が重要になります:
WSL2がない場合:

Windows ━╳━ Docker
(Linuxの技術が使えないので、直接動かせない)

WSL2がある場合:

Windows ━━ WSL2(LinuxのOS) ━━ DockerWSL2が「通訳」のように働いてくれる)

身近な例えで説明すると:
Dockerは「日本語しか話せない人」
Windowsは「英語しか話せない人」
WSL2は「日英両方話せる通訳」

このため、Windows上でDockerを快適に使うには、
まず「通訳役」のWSL2をインストールする必要があるんです。
さらに、WSL2には「通訳」以外にも以下のような利点があります:

処理が速い(通訳が上手い!)
メモリの使い方が効率的(無駄なくリソースを使える)
開発時のストレスが少ない(スムーズなコミュニケーションができる)

このような理由で、Docker Desktop for Windowsをインストールするときは、
まずWSL2をインストールする必要があります。

うん、なんとなく理解できた!(笑)

ということで、柔らかめの回答を頭に入れつつ、
固めの回答を見ると、なんとなく理解でき気がする(多分ただの勘違い)

まとめ

今回はWSL2のインストール方法についてと、
Docker Desktopとの関係などについて説明しました。

別の記事では、DockerやVS Codeとの
連携の設定についても説明しようと思っています。
最後までご覧いただきありがとうございました!

Discussion