【ツール活用|豆知識】Dockerの「ゴミ」を一掃!danglingイメージをスマートに削除する方法

導入:なぜイメージ削除が重要なのか

コンテナ開発をしていると、ビルドを繰り返すうちにディスク容量がいつの間にか圧迫されていることはありませんか?特にDockerのビルド失敗や、タグを上書きした際に発生する「dangling(宙ぶらりん)イメージ」は、開発環境やCI環境において不要なディスク消費の最大の原因です。これらを放置すると、最悪の場合ディスクフルによりビルド自体が停止してしまうリスクがあります。今回は、これらの不要なイメージを安全かつ効率的に掃除する方法を解説します。

基礎知識:danglingイメージとは何か

`docker images` コマンドを実行した際、REPOSITORYやTAGの項目が `` となっている行を見たことはないでしょうか?これらが「danglingイメージ」です。
具体的には、新しいビルドで同じタグが付いたイメージを作成した際に、古いイメージからタグが外れて「名前のない孤立した状態」になったものを指します。これらはコンテナからも参照されていないため、基本的には削除しても問題ない「ゴミ」として扱われます。

実装:一括削除の解決策

Dockerには、こうした不要なリソースを一括で整理するための強力なサブコマンドが用意されています。

1. danglingイメージのみを削除する
`docker image prune`
このコマンドを実行すると、タグのないイメージをすべて削除できます。

2. より広範囲に掃除する(推奨)
CI環境などでディスクを確実に空けたい場合は、以下のコマンドが便利です。
`docker image prune -a`
これは「タグが付いているかに関わらず、実行中のコンテナから参照されていないすべてのイメージ」を削除します。

サンプルプログラム:安全に削除するためのスクリプト

手動実行だけでなく、定期的なメンテナンスやCIパイプラインに組み込むためのサンプルコードです。

!/bin/bash

実行中のコンテナが使用しているイメージ以外をクリーンアップするスクリプト
echo "不要なDockerイメージを削除します..."

-f は強制削除のフラグ、--filterでdanglingのみを対象にする場合は指定する
ここでは安全のため、未使用のイメージをすべて削除する例です
docker image prune -a -f --filter "until=24h"

echo "クリーンアップが完了しました。"
コメント: --filter "until=24h" をつけることで、
24時間以内に作成されたイメージは保護し、
古いキャッシュのみを削除するように調整しています。

応用・注意点:現場で陥りやすい罠

実務で運用する際は、以下の点に注意してください。

1. 実行中のコンテナへの影響
`docker image prune -a` を実行すると、現在停止しているコンテナが使っているイメージまで削除しようとします。もし「停止中のコンテナは後で起動する可能性がある」のであれば、`prune` を使う前に `docker container prune` でコンテナを整理するか、`–filter` オプションを適切に使用して、必要なイメージを誤って消さないよう注意してください。

2. CI環境でのキャッシュ利用
CI(GitHub ActionsやGitLab CIなど)でビルド速度を上げたい場合、イメージをすべて消すと次回ビルド時にキャッシュが効かず、ビルド時間が大幅に増える可能性があります。ディスク容量とのトレードオフを考え、`until` オプションで「作成から数日経過したものだけ消す」といった運用をおすすめします。

こまめな掃除は、インフラエンジニアとしての「健全な開発環境」を守る第一歩です。ぜひ今日から取り入れてみてください。

コメント

タイトルとURLをコピーしました