Cleaning Up Old Docker Images

·

2 min read

Cleaning Up Old Docker Images

Quick primer on how to clean up old images in Docker. One of the first things you're gonna find when you search for this question is docker images prune. This works, but only on dangling images. Dangling images are essentially orphaned images created as a process in making another image. They're usually generated when a Dockerfile creates a few layers during final image creation.

Thing is, when you're building images and tagging them with, for example, the build number, those images are not dangling and they will be omitted during the image prune command. Example:

REPOSITORY                        TAG            IMAGE ID        CREATED          SIZE
fancy.service                     latest         813d1928f6b8    3 days ago       156MB
fancy.service                     v10            813d1928f6b8    3 days ago       156MB
contoso.azurecr.io/fancy.service  latest         813d1928f6b8    3 days ago       156MB
contoso.azurecr.io/fancy.service  v10            813d1928f6b8    3 days ago       156MB

We have 4 images that are essentially the same. Perhaps today you built v11 and want to get rid of v10, or just get rid of anything older than today's. Here's how:

docker images | grep 'days ago\|weeks ago\|months ago\|years ago' | awk '{print $3}' | xargs docker rmi --force

There are 4 parts to this command.

  1. docker images pulls the list of all images in the system and pipes it to
  2. grep 'days ago\|months ago\|years ago' which selects every row that has those words in it and then pipes it to
  3. awk '{print $3}' which returns the item in the 3rd column from each row - in this case the IMAGE ID - and then pipes it to
  4. xargs docker rmi --force which is the crown jewel of this entire command. Xargs takes each line from the previous output and passes it as a parameter to the command docker rmi --force.

This should clean up all images older than today. You can remove days ago\| if you want to keep recent images for example.

Keep in mind this command will not remove images which are in use. That is anything that's mounted as a container -- even a stopped container.

Did you find this article valuable?

Support Paul K by becoming a sponsor. Any amount is appreciated!