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