Macのストレージが急にいっぱいに…犯人はDockerの未使用イメージだった件

目次

Macの空き容量が残り6GB…大きなファイルが見つからない謎

ある日、Macから「ストレージの空き容量が少なくなっています」という通知が。確認してみると、245GBのうち238GBを使用していて、残りたったの6.6GB。これはまずい。

ストレージの内訳を見ると、「システムデータ」が121.62GBと異常に大きい。まずはFinderで1GB以上のファイルを検索してみましたが、何も見つかりません。ダウンロードフォルダも空。ゴミ箱も空にした。それなのに空き容量は一向に増えない…。

同じような経験をした開発者の方、いませんか?実はこの「見えない大容量データ」の正体、Dockerの未使用イメージとビルドキャッシュだったのです。

Dockerの公式ドキュメントに、ディスク使用量の管理方法が詳しく記載されています:

Docker Documentation
Prune unused Docker objects Free up disk space by removing unused resources with the prune command

なぜDockerがストレージを圧迫するのか

開発者がDockerを使い続けていると、気づかないうちにディスク容量が膨れ上がります。原因は主に3つあります。

未使用のDockerイメージが溜まり続ける

docker-compose up を実行するたびに、必要なイメージが自動でダウンロードされます。MySQL、PostgreSQL、Redis、Node.jsなど、プロジェクトごとに異なるイメージが蓄積されていきます。1つのイメージが数百MBから数GBになることもあり、複数プロジェクトを扱う開発者だと、合計で数十GBに達することも珍しくありません。

ビルドキャッシュが肥大化する

Dockerイメージをビルドするたびに、中間レイヤーがキャッシュとして保存されます。ビルドを高速化するための仕組みですが、古いキャッシュが自動では削除されないため、ひたすら溜まり続けます。

停止中のコンテナが残っている

docker-compose down ではなく docker-compose stop で止めた場合や、docker run で一時的に立ち上げたコンテナは、停止状態のまま残り続けます。これらもディスク容量を消費しています。

まずはDockerのディスク使用量を確認しよう

いきなり削除する前に、Dockerがどれくらいストレージを使っているか確認しましょう。ターミナルで以下のコマンドを実行します:

docker system df

実行すると、以下のような結果が表示されます:

TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          15        0         8.2GB     8.2GB (100%)
Containers      3         0         1.5GB     1.5GB (100%)
Local Volumes   5         0         2.8GB     2.8GB (100%)
Build Cache     42        0         11.8GB    11.8GB

この例では合計約24GBが「RECLAIMABLE(回収可能)」です。ACTIVEが0なら、現在使用中のリソースはないということ。つまり安全に削除できる状態です。

docker system prune -a で一括クリーンアップ

確認が済んだら、以下のコマンドで未使用リソースを一括削除します:

# 未使用のコンテナ・イメージ・ネットワーク・ビルドキャッシュを一括削除
docker system prune -a

実行すると確認メッセージが表示されるので、y と入力してEnterを押します:

WARNING! This will remove:
  - all stopped containers
  - all networks not used by at least one container
  - all images without at least one container associated to them
  - all build cache

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

筆者の環境では、Laravel Sail、MySQL、PostgreSQL、Redis、Minio、LocalStack、Seleniumなどの古いイメージが次々と削除され、最終的に「Total reclaimed space: 24.35GB」と表示されました。コマンド1つで24GBも解放できたのです。

削除して大丈夫?リスクと注意点

「こんなにたくさん消して大丈夫なの?」と不安になるかもしれませんが、心配いりません。

削除されるもの・されないもの

項目 削除される? 復旧方法
停止中のコンテナ はい docker-compose up で再作成
未使用のイメージ はい docker pull で再ダウンロード
ビルドキャッシュ はい 次回ビルド時に自動再生成
実行中のコンテナ いいえ
名前付きボリューム いいえ
ソースコード いいえ

ポイントは、ソースコードやデータベースの中身(名前付きボリューム)は削除されないということ。削除されるのはイメージ(設計図)とキャッシュだけなので、必要になったら docker-compose up すれば自動で再ダウンロードされます。ただし再ダウンロードには数分かかるので、プロジェクト作業中は避けましょう。

ボリュームも含めて完全クリーンアップしたい場合

データベースの中身ごとリセットしたい場合は、--volumes オプションを追加します。ただし、DBのデータも消えるので注意してください:

# ボリュームも含めて完全削除(DB データも消えるので注意!)
docker system prune -a --volumes

Docker以外にもチェックすべきポイント

Dockerのクリーンアップだけで十分な空き容量が確保できない場合は、以下もチェックしてみてください。

Time Machineのローカルスナップショット

Time Machineは、外付けディスクを接続していなくても「ローカルスナップショット」というバックアップをMac内に保存します。これが数十GBになることも。以下のコマンドで確認できます:

# ローカルスナップショットの確認
tmutil listlocalsnapshots /

# 古いスナップショットの自動削除
tmutil thinlocalsnapshots / 999999999999 4

Time Machineを使っていないなら、システム設定からオフにしてしまうのも手です。GitHubやGoogle Driveでバックアップを取っていれば、開発者的には困ることは少ないでしょう。

アプリのキャッシュ

ChromeやSlackなどのアプリは、キャッシュデータを大量に保存していることがあります。Finderの「移動」メニューでOptionキーを押しながら「ライブラリ」を選択し、「Caches」フォルダを確認してみてください。Google ChromeやSlackのキャッシュが数GBに達していることがあります。

再発防止:定期クリーンアップの習慣化

今回のようなストレージ逼迫を防ぐため、月1回程度のDockerクリーンアップを習慣にしましょう。便利なエイリアスを設定しておくと楽です:

# ~/.zshrc に追加
alias docker-cleanup='docker system prune -a -f && echo "✅ Docker cleanup complete!"'
alias docker-usage='docker system df'

設定後、source ~/.zshrc で反映すれば、docker-cleanup と打つだけでクリーンアップが実行されます。docker-usage でいつでもディスク使用量を確認できるのも便利です。

まとめ:開発環境は「見えないゴミ」が溜まりやすい

Macのストレージが急にいっぱいになった場合、Finderで大きなファイルを探しても見つからないことがあります。その原因として真っ先に疑うべきはDockerの未使用イメージとビルドキャッシュです。

  • docker system df でディスク使用量を確認
  • docker system prune -a で未使用リソースを一括削除
  • 月1回のクリーンアップをエイリアスで習慣化
  • Time Machineのスナップショットやアプリキャッシュも合わせてチェック

開発環境は使い続けるほど「見えないゴミ」が蓄積します。定期的なメンテナンスで快適な開発環境を維持しましょう。

Dockerと開発環境をさらに活用する関連記事

Dockerのクリーンアップを覚えたら、開発環境全体の効率化にもチャレンジしてみましょう:

Docker・開発環境の活用

Mac開発環境の便利ツール

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次