【Docker】 <none> となったコンテナイメージを一括で削除する方法
Dockerコンテナイメージで<none>になってしまったイメージを一括で削除する方法。
<none> とは?
<none>
とは以下のようなイメージのことです。
※docker images
でイメージ一覧を出力します。
さらにフィルタリングでnone
のみ出力します。
none
を特定するにはdangling
フラグを使用します。
dangling
フラグがtrueのイメージがnone
であるため、-f
のフィルタリングオプションで絞り込みます↓
$ docker images -f dangling=true REPOSITORY TAG IMAGE ID CREATED SIZE <none> <none> 5f5446cea392 6 days ago 567MB <none> <none> 559f897c8512 6 days ago 538MB <none> <none> 083f833f8efc 8 days ago 372MB <none> <none> 6cf94a7cee11 8 days ago 372MB <none> <none> 68582de807e7 8 days ago 372MB <none> <none> 2a314987d966 10 days ago 973MB <none> <none> 6ace3a5d43da 10 days ago 973MB <none> <none> 1c42d72cb450 10 days ago 972MB <none> <none> 1558b4d5599f 11 days ago 972MB <none> <none> 93ae42d193fa 2 weeks ago 372MB <none> <none> f64b56e8799c 2 weeks ago 372MB <none> <none> 3708890d3a9b 3 weeks ago 969MB
気にしていなかったですが、none
となっているものが結構多くありますね。。。
もともとは通常のイメージでしたが、いつの間にか本来イメージ名やTAG名が表示されるところに<none>
が表示されてよくわからないイメージになってしまっています。
<none> を削除する方法
結論から書きますが、以下のコマンドにより削除可能です。
$ docker rmi $(docker images -f "dangling=true" -q)
数が多かったので全てはのせませんが、削除イメージのダイジェストが表示されてnone
イメージが削除されたことが確認できました。
コマンドを簡単に説明すると、$(docker images -f "dangling=true" -q)
でフィルタリングを行いnone
イメージを抽出します。
抽出した結果をdocker rmi
コマンドへ渡すことにより抽出されたnone
イメージに対してのみ削除を行っています。
ちなみに、現在のコンテナで使用中のイメージがある場合、上記のコマンドでも削除はされないので注意してください。
強制的に削除したい場合は-f
オプションを付けてください。
$ docker rmi -f $(docker images -f "dangling=true" -q)
なお、コマンドの詳細は公式ドキュメントも参照ください!
なぜ<none> イメージになってしまうのか?
これも結論から書きますが、イメージ名/Tagともに重複するイメージを作ってしまう時に既存のイメージがnone
に変化しているからです。
イメージ名とTag名の両方が重複した場合、Dockerは既存のイメージからイメージ名とTag名を取り除き、新規に作成したイメージに元の名前/Tagを付与します。
簡単にですが、試してみます↓
FROM nginx:alpine RUN echo "test"
Dockerfileのディレクトリでイメージのビルドコマンドを実行。
$ docker build -t nginx:v1 .
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx v1 8f898bd5a4f0 3 seconds ago 16.1MB
再度、ビルドコマンド実行(中間イメージを再利用しないように--no-cache
オプションを付与します)
$ docker build --no-cache -t nginx:v1 .
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx v1 f2bca9c43df7 1 second ago 16.1MB <none> <none> 8f898bd5a4f0 4 minutes ago 16.1MB
上記のように最初のビルドで作成したイメージがnone
に変わっていることが確認できます(IMAGE IDを参照)
none
化は異なるイメージ名にするか、Tagを変えてビルドすることにより回避することが可能です。
none
イメージは明らかに使わないものであり、容量も圧迫するので、定期的に削除するのがおススメです。