Docker

The Problem

Even though computers are often considered deterministic, computational software is a rapidly evolving and changing landscape. Libraries are constantly adding new features and fixing issues. Even libraries with the strictest backwards-compatibility policies can change in significant ways. As computer hardware evolves, software is forced to adapt accordingly.

A replicatable computational environment is sufficiently consistent for the computational task at hand. For example, this can consist of a similar CPU instruction set, libraries and executables available with a specific version and configuration options, a specific operating system version, etc.

Close But Not Good Enough

Source code

Does not include:

  • Compiler
  • Hardware it was built on
  • How it is configured

Package managers and distributions

  • Packages become unsupported over time
  • What to do if a required library is not packaged?

Virtual Machines (VMs)

  • Inefficient utilization of computational resources

Docker Improvements

Docker is an open-source engine that automates the deployment of any application as a lightweight, portable, self-sufficient container that will run virtually anywhere.

Docker works with images that consume minimal disk space, versioned, archiveable, and shareable. Executing applications in these images does not require dedicated resources and is high performance.

In the docker/src/itkka directory is an example Docker image, also available on DockerHub for reproducing an article on PET image series kinetic analysis.

The requirements for reproducing this computational analysis, the Ubuntu 14.04 operating system, the GCC 4.8.2-19ubuntu1 compiler, and particular versions of the dependencies the Insight Toolkit (ITK), libxml, sundials, and Boost, are now runnable on any x86_64 operating system, archiveable, and shareable.

Learn more!