  As computational work becomes more and more integral to many aspects of
scientific research, computational reproducibility has become an issue of
increasing importance to computer systems researchers and domain scientists
alike. Though computational reproducibility seems more straight forward than
replicating physical experiments, the complex and rapidly changing nature of
computer environments makes being able to reproduce and extend such work a
serious challenge. In this paper, I explore common reasons that code developed
for one research project cannot be successfully executed or extended by
subsequent researchers. I review current approaches to these issues, including
virtual machines and workflow systems, and their limitations. I then examine
how the popular emerging technology Docker combines several areas from systems
research - such as operating system virtualization, cross-platform portability,
modular re-usable elements, versioning, and a `DevOps' philosophy, to address
these challenges. I illustrate this with several examples of Docker use with a
focus on the R statistical environment.
