Dockerイメージを--no-cache
でbuildすることがよくあるのだけど、その度に新しいイメージが溜まっていき、未使用のイメージが結構溜まってしまっていたためメモ。
$ docker -v Docker version 19.03.12, build 48a66213fe
未使用のコンテナを削除
まずはイメージを削除する前にコンテナを削除する。
コンテナの起動・停止にかかわらず、現時点で存在しているコンテナに紐づくイメージは削除ができないため、不要なイメージを削除する前に不要なコンテナを削除する必要がある。
$ docker container prune [OPTIONS]
※停止中のコンテナを全て削除
こちらのコマンドはEngineのAPIバージョンが1.25以上でないと使用できないようなのでバージョンを確認
$ docker version Client: Docker Engine - Community Azure integration 0.1.10 Version: 19.03.12 API version: 1.40 # これ Go version: go1.13.10 Git commit: Built: Mon Jun 22 15:41:33 2020 OS/Arch: darwin/amd64 Experimental: true Server: Docker Engine - Community Engine: Version: 19.03.12 API version: 1.40 (minimum version 1.12) Go version: go1.13.10 Git commit: Built: Mon Jun 22 15:49:27 2020 OS/Arch: linux/amd64 Experimental: true containerd: Version: v1.2.13 GitCommit: runc: Version: 1.0.0-rc10 GitCommit: docker-init: Version: 0.18.0 GitCommit:
1.40だったので使えそう。
$ docker container prune WARNING! This will remove all stopped containers. Are you sure you want to continue? [y/N]
本当に消していい?と聞かれる。
確認が不要な場合はオプションとともに実行でOK
$ docker container prune --force
他にも--filter
オプションが使えて、特定のtimestamp以前に作られたものだけ削除できたり、特定のラベルがついているorついていないコンテナのみ削除できたりする。
今回はあまり深掘りしないので詳しくは下記を参照
docker container prune | Docker Documentation
未使用のイメージを削除
未使用のイメージの一括削除コマンド。
$ docker image prune [OPTIONS]
こちらも同じくprune
が使える。
(pruneという英単語知らなかったので調べたら「切り落とす」的な意味があるらしい。)
オプションは先ほどと同様、--force
や--filter
が使用できる。
加えて、-a(--all)
オプションが使えるみたいで
$ docker image prune WARNING! This will remove all dangling images. Are you sure you want to continue? [y/N]
$ docker image prune --all WARNING! This will remove all images without at least one container associated to them. Are you sure you want to continue? [y/N]
この違い。
danglingとは
オプションなしで実行した場合の「danglingなイメージ」と--all
オプションをつけて実行した場合の「1つ以上のコンテナに紐づいていない場合」の違いがわからなかったので調べてみたところ、
dangling = TAGがnoneのイメージ
だった。
つまり
docker image prune
...タグがついていないイメージを削除。タグがついているものは削除しないdocker image prune --all
...タグの有無に関わらず、コンテナに紐づいていないイメージは全て削除(タグがついていてもコンテナに紐づいていない場合は削除)
という違いらしい。
参考
docker container prune | Docker Documentation