My Favorite Tool - Docker

This post originally appeared on the Software Carpentry website.

What kind of tool is it?

Docker is a virtualization tool.

Why I like it

I use Docker every day - it’s the one piece of software that has changed the way I work in recent years. There are many other approaches to virtualisation but its versatility and ubiquity is compelling. I use it for many purposes - for rapidly obtaining and executing other open source software, for providing a predictable environment in which to test code that I’ve written, and for building and deploying my own and third-party applications. We use it in the RSE team at Imperial College to ensure that others can rapidly install and evaluate our work.

How does the tool help you in your work?

It makes the implicit explicit. Software provided with a Dockerfile is self-describing in the sense that you know the environment in which it expects to be run, i.e. the operating system and dependencies. Alongside versioned code and data this provides reproducibility - which is vital for research software. The ephemeral nature of containers also encourages immutability, simplifying deployment and maintenance. For further information, I recommend the article “An introduction to Docker for reproducible research”

What do you wish someone had told you when you first started learning how to use this tool?

Containers, as provided by Docker (or Singularity), shouldn’t be confused with virtual machines. Both can help with portability but containers should have a single purpose and package a discrete tool or application. This ensures that they can be independently versioned and re-used.

Mark Woodbridge, Research Software Engineering Team Lead, Imperial College, London

Have you got a favourite tool you would like to tell us about? Please use this form to add a bit of detail and we will do the rest. You can read the background to these posts here.

Dialogue & Discussion

Comments must follow our Code of Conduct.

Edit this page on Github