Tidying up Docker Containers and Images using CLI

Tidying up Docker Containers and Images using CLI

Tidying up Docker Containers and Images using the command line

Over time I have accumulated a lot of Docker containers and images. Just like virtual machines (VMs), I tend to keep the containers in stopped mode till I need them running. This ensures my laptop RAM isn’t being used up when I don’t need it to.

But recently disk space was low and I realised that I could reclaim some of it.

These are the commands that helped me do just that.

There are some containers I didn’t want to delete so I used a bit of --filters parameter while deleting images.

docker ps -a
docker rm angry_ishizaka # At this point realised that doing this manually will take forever

Started deleting multiple in the same command, which led me to doing the following

docker rm competent_gagarin frosty_taussig  elastic_turing nifty_jackson
docker ps -a -q # This gives me only numeric IDs of the containers
docker ps -a -q | tee to-delete-dockers # Redirected the output to a text file
for line in `cat to-delete-dockers` ; do docker rm $line; done # Simple BASH for loop

While this cleared the created containers, all the images used to create the containers remain on the disk occupying tonne of disk space.

docker images
docker images -a

At this point, realised there are simply too many of them. read the docker images --help output, didn’t find anything interesting.

Found the document on filtering docker images

docker images --filter "dangling=true" # Find images which have no tags

The subshell outputs numeric IDs of dangling docker images and the main command delete the images.

docker rmi $(docker images -f "dangling=true" -q)

This cleared a lot of images which I am pretty sure I wouldn’t need. But there were still many more remaining.

I remembered that last week I had tried a Google Kubernetes Micro-services Sample application which had created a bunch of images I didn’t need anymore.

The default output of docker images shows a column CREATED . Using this as a way to sort, I found the numeric ID of the first docker image created I was able to filter based on time of creation.

docker images --filter "since=07ee12a5eb2a" # Get those images created recently
docker rmi $(docker images --filter "since=07ee12a5eb2a" -q) # Add this filter to the previous command

Do note that we can either use --filter or -f they mean the same thing.

Conclusion

While I have been using Docker containers for a while now, I wasn’t aware of the --filter parameter. It was very useful in me getting some much needed disk space back.

So all in all a great way to tidy up docker container and images using the command line.

Akash Mahajan avatar
About Akash Mahajan
That Web Application Security Guy long time ago. Co-Founder @AppseccoUK | Community Manager @null0x00 | Author - Burp Suite Essentials, Security Automation with Ansible2. Writing about application security, being part of communities like null, OWASP and other technically inclined topics. Sometimes about my company and books