Levo ガイド · 開発者向け: その他

Mac で Docker がディスク容量を使いすぎるとき

Mac の Docker は、すべてを 1 つの大きな仮想ディスクファイル Docker.raw に保存します。このファイルは大きくなりますが、自然には小さくなりません。何が使っているかは docker system df で確認し、空けるには docker system prune と docker builder prune を使います。

Docker イメージとビルドキャッシュが、それぞれサイズと理由つきで並ぶ Levo の Ready to free リスト
対象確認方法削除しても安全?
停止中のコンテナdocker ps -aはい。ただし中のものが必要でなければ
未使用のイメージdocker imagesはい。必要になったときに取得または再ビルドされます
ビルドキャッシュdocker builder duはい。次のビルドは遅くなります
ボリュームdocker volume ls注意。データベースが入っています
ディスクファイル~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw手作業では決して削除しない

Docker.raw が大きい理由

コンテナは小さな Linux VM で動き、VM のディスクは Mac 上の 1 つのファイルです。Docker Desktop は最大サイズ(60 GB 以上のことが多い)を設定し、イメージの取得やビルドのたびに、ファイルがそこに向かって大きくなります。Finder では、疎ファイルなので実際より大きく見えることがあります。ls -lh は最大サイズを、du -sh は実際に使われている量を表示します。

落とし穴は、イメージを削除すると VM 内の空きは増えるのに、Mac 上のファイルはすぐには小さくならないことです。最近の Docker Desktop は解放したブロックを macOS に返しますが、古い環境や、頻繁な書き換えのあとでは、Settings › Resources からディスクのサイズを変更するか、リセットする必要があるかもしれません。

自分でやる方法

何が容量を使っているかを調べる

docker system df
docker system df -v

最初のコマンドは、イメージ、コンテナ、ボリューム、ビルドキャッシュの合計を、RECLAIMABLE 列つきで表示します。2 つ目はそれぞれを一覧にします。ビルドキャッシュは目立たない存在で、数週間ビルドを続けると、最大の項目になることがよくあります。

空ける

docker container prune
docker image prune -a
docker builder prune
docker system prune

ボリュームには、データベース、アップロードされたファイル、compose ファイルが名前付きボリュームにマウントしたものが入っています。docker system prune --volumes は、今どのコンテナも使っていないすべてのボリュームを削除します。来週開くプロジェクトの Postgres も含まれます。docker volume ls で一覧を確認し、確認したうえで docker volume rm <name> で 1 つずつ削除してください。

空きを macOS に返す

prune のあと、実際のサイズをもう一度確認します。

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

それでも大きいままなら、Docker Desktop を開き、Settings › Resources で Virtual disk limit を下げるか、Troubleshoot › Clean / Purge data を選んで初期状態に戻します。後者はすべてのイメージ、コンテナ、ボリュームを削除します。Docker の実行中に Docker.raw をゴミ箱へドラッグしないでください。中のものがすべて失われ、VM が壊れることがあります。

OrbStack、Colima、Podman

どれも Docker API で動くので、同じコマンドが使えます。違うのは、ディスクの場所です。

Docker をもう使わないなら、Mac で Docker をアンインストールする方法 を参照してください。ツールチェーンのほかの部分も広く見るには、開発者向けディスククリーンアップ があります。

Levo ならこうします

Levo は、Docker のイメージとビルドキャッシュを Ready to free で独立した種類として、サイズと理由つきで表示します。ディスクの最新インデックスから見つけるので、コマンドを実行しなくても表示され、4 つの prune コマンドのどれを使うか覚えておく必要もありません。

安全かどうかは、あなた自身のエージェントが判断します。何も使っていないイメージとビルドキャッシュは、ごく普通の候補です。ボリュームには取り戻せないデータが入っていることがあるので、自分で確認してください。Levo は、使用中のものを決してクリーンアップしません。エージェントは読むだけで、削除は再確認のあとに Levo が行います。

クリーンアップレベルを選び、削除するものにチェックを入れて、Clean up を押します。Levo で Docker Desktop をアンインストールする場合、確認の手順で大きな残りファイルが一覧表示され、消える前に確認できます。Web 開発者向けの Levo を参照してください。2回まで無料でクリーンアップでき、その後は買い切りのライセンスです。

よくある質問

docker system prune を実行しても安全ですか?

コンテナ、ネットワーク、dangling イメージ、ビルドキャッシュなら安全ですが、次のビルドは遅くなり、一部のイメージは再取得されます。--volumes を付けなければボリュームには触れません。注意が必要なのはこのフラグです。

イメージを削除したのに Docker.raw が大きいままなのはなぜですか?

このファイルは疎ファイルで、VM 内の空きが増えても、必ずしも小さくなりません。実際のサイズは du -sh で確認してください。まだ大きければ、Docker Desktop の Resources 設定で仮想ディスクの上限を下げるか、データをパージします。

Docker.raw を削除してもいいですか?

Docker を起動した状態で Docker Desktop の Troubleshoot メニューから行うか、終了してアンインストールしたあとだけです。手作業でファイルを削除すると、中のすべてのイメージ、コンテナ、ボリュームが消えます。

Mac で Docker にはどれくらいの容量が必要ですか?

何を動かすかによります。イメージを多くビルドするなら 20〜60 GB を見込んでください。Docker Desktop の仮想ディスクの上限が上限値になります。

OrbStack は Docker Desktop よりディスクを使いませんか?

たいていはそうです。必要に応じて増減し、macOS とファイルを共有するからです。それでもイメージ、ビルドキャッシュ、ボリュームは保持するので、docker system df と prune はそこでも使えます。