スキップしてメイン コンテンツに移動

【Day 07】Docker Desktopの推奨設定(WSL2バックエンド・リソース割り当て)

Day 07 アイキャッチ
▲ Day 07: Docker Desktop推奨設定とWSL2リソース最適化
🐳
皆さん、こんにちは! Docker/コンテナ実践講座の専任講師です。
前回のDay 06では、Windows 11上にWSL2とDocker Desktopを導入し、本物のLinuxコンテナが動く環境を手に入れました。
しかし、初期設定のまま使い続けると、「なぜかWindowsの動作が重い」「タスクマネージャーのVmmemがメモリを12GBも食っている」「SSDの空き容量がいつの間にか数十GB減っている」というトラブルに必ず直面します。
本日は、ベテランエンジニアが安心して日常開発に没頭できるよう、ホストPCを軽く保つリソース最適化とディスク管理の黄金設定を完全伝授します!

① 導入・本日の達成目標

従来のHyper-VやVMwareでは、「仮想マシン作成時にメモリ4GBを固定割り当て」するのが当たり前でした。 一方、WSL2は「動的メモリ確保(ホストのメモリを最大80%まで自動拡張)」という挙動を取るため、何も制限しないとホストWindows側のメモリを食い尽くしてしまいます。

本日の講義を終える頃には、以下の3つの目標を完全にマスターできます。

  • .wslconfig ファイルを用いたCPU・メモリ・スワップの制限設定を正しく行い、ホストWindowsの快適性を100%保護する。
  • Docker Desktopの推奨設定(WSL Integration / Docker Engineデーモン設定)を適用し、不要なオーバーヘッドを排除する。
  • ビルドキャッシュや未使用イメージで肥大化する仮想ディスク(ext4.vhdx)のダイエットと定期メンテナンス手順を習得する。

② なぜPCが重くなるのか?(Vmmemプロセスの正体と動的メモリ確保)

Docker Desktopでコンテナを動かしているとき、Windowsのタスクマネージャーを開くと Vmmem または VmmemWSL というプロセスが大量のメモリ(8GB〜16GB以上)を消費しているのを目撃することがあります。

.wslconfigによるリソース制限
▲ 【図解①】Vmmemプロセスのメモリ独占を防ぎWindowsホストを爆速に保つ仕組み

これにはLinuxカーネルの「ページキャッシュ(Page Cache)」仕様が深く関係しています。

  • Linuxは、一度読み込んだファイルやコンテナビルド時のデータを、空いているメモリに「キャッシュ」として極力保持し続ける性質があります。
  • WSL2はホストWindowsの空きメモリを動的にどんどん確保してLinux側のキャッシュに充てるため、「メモリを使い終わってもホストにすぐ返却されない」という現象が発生します。
  • 結果として、Windows側でVisual Studioやブラウザ(Chrome/Edge)を開いた際にメモリ不足が発生し、スワップアウトによる重篤なスラッシング(激重状態)に陥ります。

この問題を根本から解決するのが、Windowsのユーザー設定ファイル .wslconfig です。

③ .wslconfig によるホストPC保護の黄金設定

ユーザーのホームディレクトリ(C:\Users\<ユーザー名>\.wslconfig)に設定ファイルを配置することで、WSL2およびDockerが使用できる最大メモリ・CPUコア数・スワップサイズに厳格な上限をかけることができます。

【実務標準】推奨 .wslconfig テンプレート

[wsl2]
# 1. WSL2全体で使用する最大メモリサイズ(物理メモリの25%〜50%を推奨)
# 物理16GBのPC ➡ 4GB〜6GB / 物理32GBのPC ➡ 8GB〜12GB
memory=6GB

# 2. 割り当てる論理CPUコア数(物理コア数の半分程度を指定)
processors=4

# 3. スワップ領域のサイズ(SSDの消耗を防ぎつつ安全弁として2GB程度確保)
swap=2GB

# 4. localhostでのポートフォワーディングを有効化
localhostForwarding=true

[experimental]
# メモリ自動解放機能(未使用キャッシュをWindowsへ速やかに返却:Windows 11 22H2以降)
autoMemoryReclaim=gradual

設定の反映手順(PowerShell)

.wslconfig を作成・編集した後は、必ずWSL2を一度完全停止(シャットダウン)して設定を読み込ませます。

# 1. 稼働中のWSL2インスタンスを完全停止
wsl --shutdown

# 2. Docker Desktopを再起動すると、指定したメモリ上限(6GB)内で快適に稼働開始

④ Docker Desktopの推奨設定(WSL Integrationとログ最適化)

Docker DesktopのGUI設定(画面右上の歯車アイコン)でも、実務に最適な推奨パラメータを設定しておきましょう。

Docker Desktopの最適設定
▲ 【図解②】Docker Desktop GUIにおけるWSL2連携とリソース推奨設定3ステップ
設定タブ 推奨設定値 設定する理由・効果
General Use the WSL 2 based engine: ON Hyper-V仮想マシンを使わず超軽量WSL2バックエンドで動作させる。
General Start Docker Desktop when you log in: OFF(推奨) Windows起動時の負担を減らし、開発時のみ必要なタイミングで起動。
Resources ➡ WSL Integration Ubuntu: ON Ubuntuターミナル内から docker コマンドを直接実行可能にする。
Docker Engine log-driver 設定(下記JSON参照) コンテナログが無限に溜まってディスクを圧迫するのを防止。

【必須】Docker Engine のログローテーション設定

「Docker Engine」設定タブを開き、以下のJSON設定をマージしておくと、コンテナログがディスクを食いつぶす事故を完全防止できます。

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

⑤ ディスク容量管理(仮想ディスク ext4.vhdx の肥大化とダイエット)

Dockerを使い続けていると直面するもう1つの罠が、「SSD容量の圧迫(仮想ディスクの自動肥大化)」です。

ディスク容量管理と肥大化対策
▲ 【図解③】仮想ディスク(ext4.vhdx)の自動膨張問題と定期ダイエット手順

WSL2およびDocker Desktopは、コンテナやイメージのデータを ext4.vhdx(仮想ハードディスクファイル) に格納しています。

⚠️ 仮想ディスク(vhdx)の注意すべき性質

.vhdx ファイルは、新しいイメージをビルドすると自動的にサイズが拡張(20GB ➡ 40GB ➡ 60GB)しますが、docker rmi 等でコンテナやイメージを削除してもWindows上のファイルサイズは自動では縮小(縮小解放)されません。

定期メンテナンスの2ステップ(PowerShell)

# Step 1: Docker内の不要なビルドキャッシュ・停止中コンテナ・未使用イメージを一括掃除
docker system prune -a --volumes -f

# Step 2: WSL2を停止し、仮想ディスクファイルを物理的に圧縮(Windows 11 23H2以降)
wsl --shutdown
wsl --manage Ubuntu --compact
wsl --manage docker-desktop-data --compact

これだけで、肥大化していた数十GBのSSD空き容量が一瞬で手元に戻ってきます!

⑥ C# / .NET 現場での実践アプローチ(マルチコンテナのメモリ配分)

C#開発では、Web APIだけでなく SQL ServerRedis などをローカルで同時に立ち上げることが日常茶飯事です。

C#開発のマルチコンテナ最適運用
▲ 【図解④】Web API・SQL Server・Redis を安定稼働させるメモリ配分黄金比

それぞれのコンテナに適切なリソース上限(limits)を指定しておくことで、限られた開発機スペックでも安定してサクサク動作させることができます。

[A] composeファイルでのリソース制限定義例

services:
  # 1. C# Web API(軽量・高スループット)
  api:
    build: .
    ports:
      - "8080:8080"
    deploy:
      resources:
        limits:
          cpus: '1.0'
          memory: 512M

  # 2. SQL Server(開発用DB:1.5GBあれば快適)
  db:
    image: mcr.microsoft.com/mssql/server:2022-latest
    environment:
      - ACCEPT_EULA=Y
      - SA_PASSWORD=YourStrong@Passw0rd
    ports:
      - "1433:1433"
    deploy:
      resources:
        limits:
          cpus: '2.0'
          memory: 1536M

  # 3. Redis キャッシュ(極小256MBで十分)
  cache:
    image: redis:alpine
    ports:
      - "6379:6379"
    deploy:
      resources:
        limits:
          memory: 256M

[B] 稼働中のリソース診断コマンド(PowerShell)

# 1. 全コンテナのCPU/メモリ消費率をリアルタイム監視
docker stats --format "table {{.Name}}	{{.CPUPerc}}	{{.MemUsage}}	{{.MemPerc}}"

# 2. Dockerが現在ディスク上で消費している容量の内訳を確認
docker system df

[C] 4大AIエージェントへの指示プロンプト例

🤖 Antigravity / Claude Code への指示プロンプト:

「Windows 11(RAM 16GB)のローカル環境向けに、ASP.NET Core Web API + SQL Server + Redis を同時起動する docker-compose.yml を作成してください。ホストPCが重くならないよう、各サービスに適切な cpus / memory の limits 設定を明記してください。」

⚠️ 30年選手がハマりやすい現場の落とし穴

「メモ帳で保存した時に .wslconfig.txt になっていて設定が無視される罠」
Windowsの標準設定(「登録されている拡張子は表示しない」)のままメモ帳で .wslconfig を保存すると、末尾に勝手に .txt が付いてしまい、WSL2が設定を読み込まない事故が多発します。
必ずエクスプローラーの「表示」メニューで「ファイル名拡張子」にチェックを入れ、ファイル名が正確に .wslconfig(ドットから始まる)になっていることを確認しましょう!また、編集後は wsl --shutdown を実行しないと反映されない点も要注意です。

📌 本日のまとめ & 明日へのステップ
  • .wslconfig でメモリ上限(例: 4〜6GB)を設定し、Vmmemによるホストメモリの食い尽くしを完全防止する。
  • WSL Integrationを有効化し、UbuntuターミナルとDocker Desktopをシームレスに連携させる。
  • 仮想ディスク(ext4.vhdx)は自動縮小されないため、docker system prunewsl --compact で定期ダイエットを行う。
  • マルチコンテナは compose の deploy.resources.limits で各サービスのメモリ上限を制御する。
次回【Day 08】予告:
『Visual Studio 2022のコンテナツール拡張とDockerサポート追加』〜右クリック一発でコンテナ内デバッグ〜

コメント

このブログの人気の投稿

Perfume、2025年末で“コールドスリープ(活動休止)”へ──東京ドーム2daysの記録と、公式・各界・ファンの声

  1) 公式発表・基本情報 活動休止(コールドスリープ)を正式発表 2025年9月21日、公式サイト「 Perfumeより 」で、2026年から一度コールドスリープに入ると発表。再始動の意思(“新しいPerfume”として戻る)も明記。 Perfume Official Site 今後の運用告知(配信・上映など) 同21日付の「 今後のPerfumeに関して 」で、9/23(火・祝)東京ドーム公演の LIVESHIP全世界生配信 および 全国ディレイビューイング 決定を案内。特設サイトも併記。 Perfume Official Site +1 公式グッズ **「Perfume Calendar 2026」**発売決定(B2壁掛け/表紙+2カ月1枚×6枚+ポスター)。テーマは“フルーツ”。 Perfume Official Site 2) 東京ドーム2days(9/22・23)要点 公演タイトル: ZO/Z5 Anniversary “ネビュラロマンス” Episode TOKYO DOME 。日程・開場/開演・会場・物販等の実務情報は特設で公開。 Perfume Official Site 9/23公演を世界配信(LIVESHIP) /ディレイビューイング実施。 Perfume Official Site 海外向け報道(英語)も「 indefinite hiatus 」として広く配信。 The Times of India 国内英字メディアも速報。 朝日新聞 3) 現地レポ( メリ爺 )から見える空気 あなたの現地記録(9/24公開)を、ファクトと現場情景の両面で反映: 両日参戦 。22日は アリーナ 、23日は 1階席から俯瞰 。前日の発表を受け、開演前のザワつき→MC後に“いつもの一体感”へ。開演は22日 18:45 頃。オープニングは**P³ツアー東京ドーム(2020/2)**と同趣向で“回収”の演出。 メリ爺のゲーム万歳 MC所感 :解散ではなく前向きな休止で不安を和らげる内容。 かしゆか の涙、 のっち の気丈さ、 あ〜ちゃん の思い出語り──3人の結束と「 また戻る 」約束が強く刻まれた。 メリ爺のゲーム万歳 体感時間 : “3時間弱”級のボリューム ながら“過去一...

【Perfume】Perfume 3rd Tour 「JPN」さいたまスーパーアリーナに行って参りました~

Perfume 3rd Tour 「JPN」1月28日、29日の2daysで参戦して参りました。 ファンクラブ会員の選考抽選会に28日、29日の両日で申し込んでいたんですが、両方とも当選していたという嬉しい誤算。 仕事だぁ、なんだかんだと紆余曲折ありまして28日の参戦は危ぶまれていたのですが、なんとかかんとか28日は40分遅刻しながらも参戦、29日はフル参戦する事が出来ました(∩´∀`)∩

ニンテンドースイッチでオンラインゲームを遊ぶには?

モンスターハンターライズが発売になって、家族でモンハン楽しみたい人が増えたみたいですね。 某ブログの検索キーワードを調べると、モンハンを家族でやるにはどうしたらいいのか?を調べている人が沢山いるのがわかります。 ※これでも一部  家族で協力するにはSwitch2台、ソフトも2つ購入する必要があります。 1台のスイッチでは遊べませんし、ソフト1つでも遊べません。 でも、1台のスイッチで別々アカウントがあれば交代で遊ぶこともできますよ。セーブデータもしっかり分かれます。 Switchのオンラインゲームを家族で遊ぶ方法については以下の記事にまとめてますのでよろしければ参考にしてみてくださいね。 家族でモンスターハンターライズDL版のオンラインプレーを楽しむ方法