これで解決!Docker Desktop for Macのディスク容量を小さくする方法【2026年版】

2017年1月23日


先日、Docker Desktop for Mac を使っていたところ、Mac のストレージ残量アラートが突然表示されました。docker system df でコンテナやイメージの使用量を確認しても大して多くない…なのに Finder で確認すると ~/Library 配下のファイルが数十GBを占有している。調べてみると Docker.raw というファイルが 60GB 近くに膨らんでいました。

これは「仮想ディスクのデータを消しても、外側のファイルは縮まない」という Docker Desktop の仕組みが原因です。古いバージョンでは Docker.qcow2 というファイルで同じ問題が起きていましたが、現在の Docker.raw 形式でも同様の現象が発生します。

この記事では、実際に試した手順で Docker Desktop for Mac の仮想ディスクを縮小する方法を解説します。Docker Desktop 4.x 以降の最新UIを前提に、GUIとコマンドラインの両方から対処できます。

Docker Desktop for MacのSettingsでディスク使用量が表示されている画面


この記事で解決できること

  • docker system prune でコンテナ・イメージ・ボリュームを一括削除する方法
  • ✅ Docker Desktop GUI の「Reclaim disk space」機能で仮想ディスクを圧縮する方法
  • ✅ コマンドラインで docker/desktop-reclaim-space を実行する方法
  • ✅ 肥大化を防ぐための設定(ディスク上限の設定・VirtioFS の活用)

動作確認環境: macOS Sequoia 15.x / Docker Desktop 4.38(2026年3月時点)


なぜ Docker Desktop for Mac のディスクは肥大化するのか?

仮想ディスクファイルの仕組み

Docker Desktop for Mac は、Linux コンテナを動かすために仮想マシンを内部で使っています。コンテナ・イメージ・ボリュームはすべてこの仮想マシン内に保存され、Mac からは単一の大きなファイルとして見えます。

従来(Docker Desktop 3.x 以前)は Docker.qcow2 という形式でしたが、現在は Docker.raw 形式に移行されています。ファイルの場所はここです:

~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw

削除してもファイルが縮まない理由

docker system prunedocker image rm でデータを削除しても、Docker.raw ファイルのサイズ(macOS から見た「割り当て済みサイズ」)はすぐには小さくなりません。

これは仮想ディスクの特性によるもので、内部のデータを削除しても外側のファイルは自動で縮小されないからです。ファイルシステム上の「空き領域」が増えるだけで、macOS からは依然として大きなファイルとして占有されます。

ディスク形式 空き領域の解放タイミング
Docker.raw 数秒以内に自動解放(sparse file形式)
Docker.qcow2 バックグラウンドプロセスで数分後に解放

現在主流の Docker.raw は macOS の sparse file として実装されており、理論上は削除後すぐに解放されますが、実際にはコンテナが停止・削除された後に Docker を再起動するか、明示的に「Reclaim disk space」を実行する必要があります。

Docker.rawファイルの実サイズと論理サイズの違いを示す図


ステップ1:現状の確認

まず現在の状況を確認します。

Docker 内部の使用状況を確認する

docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          12        3         8.2GB     5.1GB (62%)
Containers      5         2         145MB     110MB (76%)
Local Volumes   18        4         2.3GB     1.8GB (78%)
Build Cache     48        0         1.1GB     1.1GB

RECLAIMABLE の列が「削除すれば回収できる容量」です。

macOS から見たファイルの実サイズを確認する

cd ~/Library/Containers/com.docker.docker/Data/vms/0/data
ls -klsh Docker.raw
22G  -rw-r--r--  1 user  staff  60G  Mar 20 10:23 Docker.raw

左の数値(22G)が実際にディスクを占有しているサイズ、右の数値(60G)が論理上の最大サイズです。この2つの差がある場合、sparse file として未使用領域が予約されている状態です。


ステップ2:不要なデータを削除する(docker system prune)

基本的な prune コマンド

使っていないコンテナ・ネットワーク・ダングリングイメージをまとめて削除します:

docker system prune

確認プロンプトが表示されます:

WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all dangling images
  - unused build cache

Are you sure you want to continue? [y/N]

y を入力すると処理が実行され、末尾に回収できた容量が表示されます:

Total reclaimed space: 3.2GB

ボリュームも含めて完全に削除する

ボリュームも含めて全て削除したい場合は --volumes フラグを追加します:

docker system prune --volumes

注意: --volumes を使うと、どのコンテナにも使われていないボリュームが全て削除されます(起動中のコンテナに接続されているボリュームは削除されません)。データベースのデータなど、停止中のコンテナのボリュームに保存しているデータも失われるため、使用前に必ずバックアップを取ってください。

使っていないイメージをすべて削除する

タグなしのイメージだけでなく、現在どのコンテナにも使われていないイメージ(未参照イメージ)もまとめて削除するには:

docker system prune -a

これでかなりの容量を回収できます。

docker system pruneの実行後に容量が回収されたターミナル出力


ステップ3:仮想ディスクを圧縮する(Reclaim disk space)

docker system prune でデータを削除しても、Docker.raw ファイル自体が縮まっていない場合は、以下の方法で仮想ディスクを圧縮します。

方法A:Docker Desktop GUI から実行する(推奨)

  1. Docker Desktop のメニューバーアイコンをクリック
  2. Settings(設定) を開く
  3. 左メニューから Resources(リソース)Advanced を選択
  4. 「Disk image size」 セクション内の 「Reclaim disk space」 ボタンをクリック

Docker Desktop SettingsのResources画面でReclaim disk spaceボタンが表示されている様子

このボタンをクリックすると Docker Desktop が内部の仮想ディスクを最適化し、実際に使用しているサイズまで縮小します。処理中は Docker が一時停止するため、実行タイミングに注意してください。

方法B:コマンドラインから実行する

GUI が使えない環境や、スクリプトから自動化したい場合はコマンドで実行できます:

docker run --privileged --pid=host docker/desktop-reclaim-space

このコマンドは特権コンテナを使ってホスト側の仮想ディスクを最適化します。実行後、Docker Desktop を再起動すると効果が反映されます。

実行前後の比較

# 実行前
ls -klsh ~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw
# 例: 24G  Docker.raw  (論理サイズ: 60G)

# docker system prune -a を実行後

# Reclaim disk space 実行後
ls -klsh ~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw
# 例: 9G   Docker.raw  (論理サイズ: 60G)

実際の占有サイズが大幅に削減されているのが確認できます。


ステップ4:ディスク上限を設定して肥大化を予防する

GUI でディスク上限を設定する

Settings > Resources > Advanced の「Disk image size」スライダーで、仮想ディスクの最大サイズを設定できます。

デフォルトは非常に大きな値(システムディスクの空き容量に依存)に設定されていることが多いため、用途に応じて 50〜100GB 程度に制限すると管理しやすくなります。

推奨値の目安:
- 個人開発・学習用: 30〜50GB
- 複数プロジェクト: 50〜100GB
- 大規模開発: 100GB以上

重要な注意: ディスク上限を 下げる 操作を実行すると、現在の Docker.raw ファイルが削除され、保存されているコンテナ・イメージ・ボリュームが全て失われます。上限を下げる場合は、必要なイメージを事前に docker save でバックアップするか、再度プルできる環境を確認してから実行してください。上限を 上げる 分には既存データへの影響はありません。

Docker DesktopのDisk image sizeスライダーの設定画面

VirtioFS を使ってパフォーマンスを改善する

Docker Desktop 4.6 以降、macOS では VirtioFS がデフォルトのファイル共有方式になっています。VirtioFS は従来の gRPC FUSEosxfs より大幅に高速で、ファイル I/O が最大 98% 速くなるという報告もあります。

設定の確認・変更は以下の場所から:

  1. Settings > General
  2. 「Choose file sharing implementation for your containers」が VirtioFS になっていることを確認
選択肢:
- VirtioFS(推奨): 最速、macOS 12.5以上が必要
- gRPC FUSE: 中程度の速度、安定性重視
- osxfs: 旧来の方式、使用非推奨

VirtioFS はディスク容量の直接削減には関係しませんが、コンテナのI/O効率が上がることで同じ作業でも不要なディスク書き込みが減り、長期的な肥大化抑制につながります。


よくある状況と対処法

「docker system prune しても容量が減らない」

原因: 起動中のコンテナが使っているイメージやボリュームは prune で削除されません。

# 起動中のコンテナ一覧を確認
docker ps

# すべてのコンテナを停止してから prune を実行
docker stop $(docker ps -q)
docker system prune -a --volumes

「設定でディスク上限を下げようとするとエラーになる」

原因: 現在の使用量が設定しようとしている上限値を超えている場合に発生します。

# まず現在の使用量を確認
docker system df

# 不要なデータを削除してから上限を変更する
docker system prune -a

「Reclaim disk space を実行しても Docker.raw が縮まない」

Docker.raw は sparse file のため、ls コマンドで見える論理サイズ(最大サイズ)は変わらず、実際の占有サイズ(左の数値)だけが変化します。

# 実サイズの確認方法(左がディスク占有サイズ)
ls -klsh ~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw

論理サイズ(60G など)が縮小しない場合は正常です。重要なのは左の実サイズが小さくなっているかどうかです。


まとめ

Docker Desktop for Mac のディスク容量削減の手順をまとめます。

手順 コマンド / 操作 効果
1. 現状確認 docker system df 削除可能な容量を把握
2. データ削除 docker system prune -a --volumes 不要なイメージ・コンテナ・ボリュームを削除
3. 仮想ディスク圧縮 Settings > Reclaim disk space Docker.rawの実サイズを縮小
4. 上限設定 Settings > Disk image size 今後の肥大化を予防
  • 主な原因: 仮想ディスクファイル(Docker.raw)はデータを削除しても自動で縮まない
  • 最短の解決策: docker system prune -a 後に「Reclaim disk space」を実行する
  • 再発防止: ディスク上限を設定し、定期的に docker system prune を実行する習慣をつける

Docker Desktop のバージョンアップに伴い、過去の「Docker.qcow2」時代の情報は古くなっています。現在は Docker.raw + VirtioFS の組み合わせが標準であり、GUI から手軽にディスク管理ができます。定期的なクリーンアップで快適な開発環境を維持しましょう。


関連記事

Docker

Posted by GENDOSU