DockerのREPOSITORYが<none>になっているイメージを一括削除する

Web開発Docker,Mac

…なんだこれ
…<none> … とは … ?

$ docker images
REPOSITORY   TAG             IMAGE ID           CREATED          SIZE
php          latest          20dbfda080a7       2 days ago       141MB
<none>       <none>          25d674b71dda       2 days ago       1.83GB
<none>       <none>          a12386aeb85b       2 days ago       1.57GB
mysql        latest          61e8fee5cfbe       2 days ago       165MB
redis        latest          77b56007461f       2 days ago       83.4MB
nginx        latest          078b3257ac26       2 days ago       152MB
<none>       <none>          58fc0a75d55e       2 days ago       141MB

Dockerでいろんなイメージでコンテナを作っては削除を繰り返し行なっているといつの間にか増えていっている <none> イメージ。

今回は、この<none>イメージをかんたんに一括削除する方法と<none>イメージとは何なのかについて解説します!

こんな人におすすめ
  • 試行錯誤を繰り返しているうちに増えていた<none>イメージを削除したい
  • そもそも<none>イメージってなに?どうしてできるの?

ダウンロード済みの Docker イメージを確認する

現在ダウンロード済みのDockerイメージを確認します。
(確認作業なので、やらなくても削除は可能です)

$ docker images
REPOSITORY   TAG             IMAGE ID           CREATED          SIZE
php          latest          20dbfda080a7       2 days ago       141MB
<none>       <none>          25d674b71dda       2 days ago       1.83GB
<none>       <none>          a12386aeb85b       2 days ago       1.57GB
mysql        latest          61e8fee5cfbe       2 days ago       165MB
redis        latest          77b56007461f       2 days ago       83.4MB
nginx        latest          078b3257ac26       2 days ago       152MB
<none>       <none>          58fc0a75d55e       2 days ago       141MB

REPOSITORYTAG が <none> となっているものが、今回削除する <none>イメージ です。

<none> イメージを削除する

次に、実際に <none> イメージを削除していきます。

といっても難しい手順ではなく、docker image prune というコマンドを一つ実行するだけです。

$ docker image prune
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y
Deleted Images:
deleted:
sha256:25d674b71dda51e892d5a56e24b6f48a90837760db0a0cd5fc98fa2c530ac334
deleted:
sha256:a12386aeb85bd797f5f26abc7ceec39d7071bef90ec9ce3512f0621a3f0affd8
deleted:
sha256:58fc0a75d55e449a00dab8b974f60a4366452723420dbee71058ee4f3543907f

Total reclaimed space: 0B

Are you sure you want to continue? [y/N] と聞かれるので y (YES) と入力し Enter を押すと削除が実行されます(N はNO、削除は実行されない)。

すると<nome>イメージの削除が実行され、削除されたイメージのIDが一覧で表示されます。

Total reclaimed space は、再利用できるようになった領域サイズを示しています。

削除されたか $ docker images で確認してみましょう。

$ docker images
REPOSITORY   TAG             IMAGE ID           CREATED          SIZE
php          latest          20dbfda080a7       2 days ago       141MB
mysql        latest          61e8fee5cfbe       2 days ago       165MB
redis        latest          77b56007461f       2 days ago       83.4MB
nginx        latest          078b3257ac26       2 days ago       152MB

そもそも <none> イメージとは?

<none>イメージは dangling image (宙ぶらりんのイメージ) と言われています。
これはタグもなく、どのコンテナからも参照されていないイメージのことです。

なぜこのようなイメージが溜まっていくのかというと、Docker自体の思想によるものです。

Dockerには、イメージの他にコンテナ・ボリューム・ネットワークといったオブジェクトが存在しますが、そのクリーンアップは慎重で、ユーザーが明示的に削除しない限り、削除されません。

そのため、試行錯誤を繰り返す中でコンテナに紐づけられないイメージが発生し、それが<none>イメージ(dangling image)として残ってしまうわけです。


以上になります。

色々試行錯誤していると、いつの間にか増えている <none> イメージ。
時々お掃除して、気持ち新たに開発していきましょう!