docker imagesに表示される<none>を消す。dangling
.Dockerを使っているといつのまにかディスク容量をくっているので、たまには整理しようと、「$ docker images」を実行し、これまでに作成したDockerイメージの一覧を見て確認している。その際に表示される、<none>のdockerイメージは削除してよいのか?noneイメージってなんなのか?という話。
Dockerfileを作成時に、「$ docker build -t <イメージ名> .」と、何回もbuild繰り返しやり直していると次のように、<none>のdockerイメージがそのビルド回数分作成されてしまう。
次の例は、`ABCDEFG`というイメージを作成したケース。
$ docker build -t ABCDEFG . $ docker build -t ABCDEFG . $ docker build -t ABCDEFG . $ docker build -t ABCDEFG . ...何回か繰り返す... $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE ABCDEFG latest 71547db82392 1 days ago 677MB <none> <none> ffbe5d858c4e 2 days ago 677MB <none> <none> 79904623c4eb 3 days ago 677MB <none> <none> b7a1b6a4720f 4 days ago 677MB <none> <none> d042bb8aeb8d 5 days ago 677MB <none> <none> 2825c68d9cd6 6 days ago 677MB <none> <none> 541b7c464c7a 7 days ago 677MB yyyyyyyyyy latest 55d38f05f234 8 days ago 951MB zzzzzzzzzz 2.5-7.3 f46add99cf6d 9 days ago 833MB
<none>とは何?
Dockerでは同一名のイメージを複数作成することができない。
すでに存在するイメージと同一名のDockerイメージを作成しようとした場合は、次のような挙動となる。
- 最新のビルド結果のイメージが、指定のイメージ名称となる。(上記例の場合はABCDEFG)
- すでに存在していた同一名称のイメージは、<none>という名称未設定の状態に置き換わる
この症状のことを、dangling(宙ぶらりん)という。
danglingのイメージを削除
dangling状態のイメージは特別な理由がないかぎり不要なので、イメージを削除するとよい。
# 特定のイメージ削除 $ docker rmi <dangling状態のDockerイメージID>
すべてのdangling状態のイメージを削除したい場合には次のとおりで、一括削除可能
$ docker rmi $(docker images -f 'dangling=true' -q) もしくは $ docker image prune
イメージを削除できない場合
イメージを削除できない場合は、そのdangling状態のイメージに紐付いているコンテナが存在している場合がある。
その場合は、先にコンテナも削除する必要がある場合があるので注意。
コンテナの削除は次の通りです。
$ docker rmi 79904623c4eb Error response from daemon: conflict: unable to delete 79904623c4eb (must be forced) - image is being used by stopped container 3abd7274adfd $ docker ps -a ... # 上記で該当コンテナ(3abd7274adfd)を確認して、 # 削除しても問題なければコンテナとイメージを削除する。 $ docker rm 3abd7274adfd $ docker rmi 79904623c4eb Deleted: sha256:xxxxxxxxxxxxxxxxxxxxx Deleted: sha256:xxxxxxxxxxxxxxxxxxxxx ...
参考ページ
- Docker docs: Prune unused Docker objects
- 画像:qcu / Pixabay