WSL2とDocker Desktop for Windowsの環境周りの自分用メモ。

インストール系

WSL2をインストール

  1. wsl --install (これだけで「仮想マシンプラットフォーム」と「Linux用Windowsサブシステム」が有効になり、ディストロとしてUbuntuがインストールされる。別のディストロが良ければ、wsl -l -oで名前を確認して、wsl --install -d {DistroName})
  2. Windowsを再起動
  3. 自動的にUbuntuが起動するので、UNIX usernameとpasswordを入力

Docker Desktopをインストール

  1. winget install Docker.DockerDesktopでインストール

    • WSL2のデフォルトのディストロが、自動的にWSL2バックエンドに設定される。

ディストロを追加インストール

  1. wsl -l -oで候補一覧を表示 (またはwinget search {DistroName}で検索、またはMicrosoft Storeで検索)
  2. wsl --install -d {DistroName}でインストール (またはwinget install {DistroName}でインストール、またはMicrosoft Storeで「入手」)
  3. ディストロを起動
  4. UNIX usernameとpasswordを入力

確認系

ディストロの名前と状態を確認

  1. wsl -l -v

    • docker-desktopはDocker用のディストロ (docker-desktop-dataは4.30.0で廃止)。

ディストロの実体のパスを確認

  1. PowerShellでls HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss

    • BasePath欄で示されたパスの直下にあるext4.vhdxが、そのディストロの実体のVHD。

ディストロが使用可能なディスクサイズを確認

  1. wsl --system -d {DistroName} df -h /mnt/wslg/distro

Dockerのディスク使用量を確認

  1. docker system df

お手入れ系

Dockerのゴミ掃除

  1. docker container pruneで停止済みコンテナを削除
  2. docker image pruneでdanglingイメージを削除 (-aで使ってないイメージをすべて削除)
  3. docker network pruneで使ってないネットワークを削除
  4. docker builder pruneでdanglingビルドキャッシュを削除 (-aで全ビルドキャッシュを削除)
  5. docker volume pruneで使ってない無名ボリュームを削除 (-aで名前付きボリュームも削除)
  6. なんならdocker system pruneで停止済みコンテナ、danglingイメージ、使ってないネットワーク、danglingビルドキャッシュをまとめて削除 (-aで使ってないイメージをすべて削除、--volumesで使ってない無名ボリュームも削除)

ディストロのVHDのスリム化

  1. PowerShellのls HKCU:\Software\Microsoft\Windows\CurrentVersion\LxssでディストロのBasePathを確認 (ここに実体のext4.vhdxがある)
  2. docker-desktopのディストロをスリム化するときは、タスクトレイのDockerを右クリックして「Quit Docker Desktop」
  3. wsl -l -vでディストロがstoppedであることを確認
  4. diskpartでDiskPartを起動
  5. 下記でスリム化

    select vdisk file="{BasePath}\ext4.vhdx"
    detail vdisk # 物理サイズを確認
    attach vdisk readonly
    compact vdisk
    detail vdisk # 物理サイズを確認
    detach vdisk
    exit
    

WSL2を更新

  1. wsl -vで現在バージョンを確認
  2. wsl --updateで更新

変更系

デフォルトのディストロを変更

  1. wsl -s {DistroName}で設定

ディストロ接続時のユーザを変更

  1. wsl -d {DistroName}で接続
  2. sudo vi /etc/wsl.confで下記を追記しユーザを指定 ([user]セクションがなければrootでの接続になる)

    [user]
    default=alpha
    
  3. wsl -t {DistroName}でディストロを停止

ディストロをWSL2バックエンドに設定

  1. Docker DesktopのDashboardを開く
  2. 「⚙️(Settings) > Resources > WSL Integration」でバックエンドのディストロを指定する

ディストロを移動(リネーム/複製)

  1. ディストロがDockerのWSL2バックエンドの場合、Integrationを解除 (しないとディストロ停止直後にDocker Desktopが怒る)
  2. wsl -l -vでディストロの名前を確認
  3. wsl -t {DistroName}でディストロを停止
  4. wsl --export {DistroName} {TarFileName}でディストロをtarに書き出し
  5. wsl --unregister {DistroName}で旧ディストロの登録を解除 (ここで解除しなければ環境のコピーと同義)
  6. wsl --import {DistroName} {InstallDir} {TarFileName}で新ディストロとして書き戻し ({InstallDir}直下にext4.vhdxができる)
  7. ターミナルの設定で、ディストロの名前やコマンドラインを補正

削除系

Docker Desktopの削除

  1. winget uninstall Docker.DockerDesktopで削除

ディストロの削除

  1. wsl -l -vで名前を確認
  2. wsl --unregister {DistroName}で登録解除
  3. winget uninstall {DistroName}で削除 (または「設定 > アプリ > インストールされているアプリ」でディストロを「アンインストール」)
  4. ターミナルの設定で、ディストロのプロファイルを削除

WSL2の削除

  1. wsl --uninstall
  2. 「設定 > アプリ > インストールされているアプリ」で「Windows Subsystem for Linux Update」を「アンインストール」
  3. 管理者でdism /online /disable-feature /featurename:Microsoft-Windows-Subsystem-Linux (または「設定 > システム > オプション機能 > Windowsのその他の機能」で「Linux用Windowsサブシステム」をオフに)
  4. 管理者でdism /online /disable-feature /featurename:VirtualMachinePlatform (または「設定 > システム > オプション機能 > Windowsのその他の機能」で「仮想マシンプラットフォーム」をオフに)
  5. Windowsを再起動

※バージョンメモ

  • WSL 2.2.4.0
  • Docker Desktop for Windows 4.33.1