Containers – Cleanup your house revisited

In version 1.13 Docker has added some useful commands to the CLI that make it easier to keep our environment clean. As you might have experienced yourself over time our development environment gets really cluttered with unused containers, dangling Docker images, abandoned volumes and forgotten networks. All these obsolete items take aways precious resources and ultimately lead to an unusable environment. In a previous post I have shown how we can keep our house clean by using various commands like

docker rm -f $(docker ps -aq)

to forcibly remove all running, stopped and terminated containers. Similarly we learned commands that allowed us to remove dangling images, networks and volumes.

Although the commands I described solved the problem they were proprietary, verbose or difficult to remember. The new commands introduced are straight forward and easy to use. Let’s try them out.

If you like this article then you can find more posts about containers in general and Docker in specific in this table of content.

Management Commands

To un-clutter the CLI a bit Docker 1.13 introduces new management commands. The list of those are

  • system
  • container
  • image
  • plugin
  • secret

Older versions of Docker already had network, node, service, swarm and volume.

These new commands group subcommands that were previously directly implemented as root commands. Let me give an example

docker exec -it [container-name] [some-command]

The exec command is now a subcommand under container. Thus the equivalent of the above command is

docker container exec -it [container-name] [some-command]

I would assume that for reasons of backwards compatibility the old syntax will stick around with us for the time being.

Docker System

There is a new management command system. It has 4 possible subcommands df, events, info and prune. The command

docker system df

gives us an overview of the overall disk usage of Docker. This include images, containers and (local) volumes. So we can now at any time stay informed about how much resources Docker consumes.

If the previous command shows us that we’re using too much space we might as well start to cleanup. Our next command does exactly that. It is a do-it-all type of command

docker system prune

This command removes everything that is currently not used, and it does it in the correct sequence so that a maximum outcome is achieved. First unused containers are removed, then volumes and networks and finally dangling images. We have to confirm the operation though by answering with y. If we want to use this command in a script we can use the parameter --force or -f to instruct Docker not to ask for confirmation.

Docker Container

We already know many of the subcommands of docker container. They were previously (and still are) direct subcommands of docker. We can get the full list of subcommands like this

docker container --help

In the list we find again a prune command. If we use it we only remove unused containers. Thus the command is much more limited than the docker system prune command that we introduced in the previous section. Using the --force or -f flag we can again instruct the CLI not to ask us for confirmation

docker container prune --force

Docker Network

As you might expect, we now also have a prune command here.

docker network prune

removes all orphaned networks

Docker Volume

And once again we find a new prune command for volumes too.

docker volume prune

removes all (local) volumes that are not used by at least one container.

Docker Image

Finally we have the new image command which of course gets a prune subcommand too. We have the flag --force that does the same job as in the other samples and we have a flag --all that not just removes dangling images but all unused ones. Thus

docker image prune --force --all

removes all images that are unused and does not ask us for confirmation.

Summary

Not only has Docker v 1.13 brought some needed order into the zoo of Docker commands by introducing so called admin commands but also we find some very helpful commands to clean up our environment from orphaned items. My favorite command will most probably be the docker system prune as I always like an uncluttered environment.

About Gabriel Schenker

Gabriel N. Schenker started his career as a physicist. Following his passion and interest in stars and the universe he chose to write his Ph.D. thesis in astrophysics. Soon after this he dedicated all his time to his second passion, writing and architecting software. Gabriel has since been working for over 25 years as a consultant, software architect, trainer, and mentor mainly on the .NET platform. He is currently working as senior software architect at Alien Vault in Austin, Texas. Gabriel is passionate about software development and tries to make the life of developers easier by providing guidelines and frameworks to reduce friction in the software development process. Gabriel is married and father of four children and during his spare time likes hiking in the mountains, cooking and reading.
This entry was posted in containers, docker, How To, introduction and tagged , , . Bookmark the permalink. Follow any comments here with the RSS feed for this post.