Deleting ranges of Docker images using filters
If the output of docker images
spans too many lines and you want to tidy it up, but you think docker system prune
is like using C4 to open a can of tuna, maybe take docker images
’s -f
flag for a spin!
docker images -f
utilises the filter option and it lets you specify some extra search options to select exactly the images you’re interested in!
Filter Options
Currently Docker supports a list of filter options, but in this write-up we’re only focussing on the before
and since
filters - go for a full overview of the available filter options to the Docker Docs on Filtering
-f since={image id} The filter option since takes an image ID and selects all the images that are newer than the given image.
-f before={image id} Much like since, this tag selects all the images that are older than the given image id.
And to select a whole range of Docker Images, simply stick ‘em together!
Example
Enough talking; show me the money! So - imagine the output of docker images
looks like the following:
1REPOSITORY TAG IMAGE ID CREATED SIZE
2hippo-fe latest ec8ec381807d 55 minutes ago 455MB
3hippo-backend_api latest 88a08f954c9f 4 days ago 47.4MB
4<none> <none> 66ee4e399b4a 4 days ago 423MB
5<none> <none> 098006369e17 4 days ago 449MB
6<none> <none> 7010975558a2 4 days ago 449MB
7<none> <none> 75ecd4cee8ef 4 days ago 47.4MB
8<none> <none> d3942b2482a2 4 days ago 449MB
9<none> <none> 88676747d621 4 days ago 449MB
10<none> <none> eb522755627b 4 days ago 445MB
11<none> <none> d62380cf625f 5 days ago 86.3MB
12<none> <none> 21bce955c85b 5 days ago 474MB
13spacevim/spacevim latest a6b4bb27c4e9 2 weeks ago 1.36GB
14<none> <none> abf507ccc201 2 weeks ago 106MB
15<none> <none> 79a409b99ca5 2 weeks ago 530MB
16<none> <none> 5fd5b5859b37 3 weeks ago 106MB
17<none> <none> d93260d7abc3 3 weeks ago 530MB
18node 10.16.3-alpine b95baba1cfdb 3 weeks ago 76.4MB
19<none> <none> 2c62a47471d1 4 weeks ago 106MB
20<none> <none> 3de57027cc18 4 weeks ago 523MB
21elixir 1.9.1-alpine 33a0cf122cf7 5 weeks ago 87.6MB
22<none> <none> e5196ef97445 6 weeks ago 104MB
23elixir 1.8.1-alpine 447a8dff23a8 5 months ago 91.1MB
24alpine 3.9 5cb3aa00f899 6 months ago 5.53MB
That’s quite the list! Let’s say we’re no longer interested in the images below the image tagged as hippo-backend_api
with image id 88a08f954c9f
and the images above spacevim/spacevim
with image id a6b4bb27c4e9
, how would we go about that using the filters described above?
1$ docker images -f before=88a08f954c9f
Would give us all the images that are created before the hippo-backend_api one. Next step would be to select all the Docker images up-to a given image in history:
1$ docker images -f before=88a08f954c9f -f since=a6b4bb27c4e9
Gives us all the images in a given range:
1<none> <none> 66ee4e399b4a 4 days ago 423MB
2<none> <none> 098006369e17 4 days ago 449MB
3<none> <none> 7010975558a2 4 days ago 449MB
4<none> <none> 75ecd4cee8ef 4 days ago 47.4MB
5<none> <none> d3942b2482a2 4 days ago 449MB
6<none> <none> 88676747d621 4 days ago 449MB
7<none> <none> eb522755627b 4 days ago 445MB
8<none> <none> d62380cf625f 5 days ago 86.3MB
9<none> <none> 21bce955c85b 5 days ago 474MB
As you can see we’re now only given the images in the selected range!
Soo - all we have to do now is tag on the -q
flag to solely get a list of image ID’s and pipe it into xargs
to use them as arguments in the docker rmi -f
command…
1$ docker images -f before=a6b4bb27c4e9 -f since=88a08f954c9f -q | xargs docker rmi -f
2
… and voila! If we then run the docker images command again, we’ll see that the given range has been deleted:
1REPOSITORY TAG IMAGE ID CREATED SIZE
2hippo-fe latest ec8ec381807d 2 hours ago 455MB
3hippo-backend_api latest 88a08f954c9f 4 days ago 47.4MB
4spacevim/spacevim latest a6b4bb27c4e9 2 weeks ago 1.36GB
5<none> <none> abf507ccc201 2 weeks ago 106MB
6<none> <none> 79a409b99ca5 2 weeks ago 530MB
7<none> <none> 5fd5b5859b37 3 weeks ago 106MB
8<none> <none> d93260d7abc3 3 weeks ago 530MB
9node 10.16.3-alpine b95baba1cfdb 3 weeks ago 76.4MB
10<none> <none> 2c62a47471d1 4 weeks ago 106MB
11<none> <none> 3de57027cc18 4 weeks ago 523MB
12elixir 1.9.1-alpine 33a0cf122cf7 5 weeks ago 87.6MB
13<none> <none> e5196ef97445 6 weeks ago 104MB
14elixir 1.8.1-alpine 447a8dff23a8 5 months ago 91.1MB
15alpine 3.9 5cb3aa00f899 6 months ago 5.53MB
🙌