ラベルに基づいて削除するイメージをフィルタリングする
この最後のステップでは、docker image prune
のもう 1 つの強力なフィルタリングオプション、ラベルに基づくフィルタリングを探索します。ラベルは、イメージを含む Docker オブジェクトにメタデータを追加するために付けることができるキーと値のペアです。これらのラベルを使用して、Docker リソースをフィルタリングし管理することができます。
label
キーを指定した --filter
フラグを使用すると、イメージのラベルに基づいて、削除対象に含めるまたは除外するイメージを指定できます。
まず、異なるラベルを持ついくつかのイメージを作成しましょう。簡単な Dockerfile を使用して、異なるラベルを持つ 2 つのイメージをビルドします。
~/project
ディレクトリに Dockerfile.labeled
という名前のファイルを作成し、以下の内容を記述します。
FROM alpine:latest
LABEL environment="development"
LABEL version="1.0"
RUN echo "This is a labeled image" >/app/info.txt
この Dockerfile から 2 つのイメージをビルドします。ビルドプロセス中に --label
フラグを使用して異なるラベルを適用します。
docker build -t my-labeled-app:dev --label project=myapp --label stage=dev ~/project -f Dockerfile.labeled
docker build -t my-labeled-app:prod --label project=myapp --label stage=prod ~/project -f Dockerfile.labeled
これで、同じ Dockerfile をベースにしたが、異なる stage
ラベルを持つ 2 つのイメージ my-labeled-app:dev
と my-labeled-app:prod
がビルドされました。
イメージをリストアップし、それらのラベルを確認しましょう。
docker images --filter reference="my-labeled-app*" --format "{{.Repository}}:{{.Tag}} {{.Labels}}"
イメージとそれに関連付けられたラベルが表示されるはずです。
次に、docker image prune
を使用して、ラベルに基づいてイメージを削除しましょう。stage=dev
というラベルを持つすべての未使用イメージを削除したいとします。--filter
フラグに label=stage=dev
を指定します。また、ダングリング・イメージだけでなく、すべての未使用イメージを対象とするために -a
フラグも使用します。
docker image prune -a --filter "label=stage=dev"
Docker はフィルタに一致するイメージを表示し、削除することを示します。y
と入力して確認します。
削除処理の後、再度イメージをリストアップします。
docker images --filter reference="my-labeled-app*" --format "{{.Repository}}:{{.Tag}} {{.Labels}}"
my-labeled-app:dev
イメージが削除され、my-labeled-app:prod
はフィルタに一致しなかったため残っていることがわかるはずです。
また、label!=key=value
構文を使用して、特定のラベルまたはラベル値を 持たない イメージを削除することもできます。たとえば、stage=prod
というラベルを 持たない すべての未使用イメージを削除するには、次のようにします。
docker image prune -a --filter "label!=stage=prod"
このコマンドは、my-labeled-app:dev
(まだ存在する場合)と、stage=prod
ラベルを持たない他のすべての未使用イメージを削除します。
ラベルによるフィルタリングは、独自に定義したメタデータに基づいてイメージを柔軟に管理およびクリーンアップする方法を提供します。