Reproducibility can be described as the repeatability of a certain process in order to establish a fact or the conditions under which we are able to observe the same fact . The ability to replicate and reproduce scientific results has become an increasingly important topic for many academic disciplines. In computer science and, more specifically, software and web engineering (SE/WE), contributions of scientific work rely on developed algorithms, tools and prototypes, quantitative evaluations, and other computational analyses.
However, even if code and data are published alongside the paper as open source artifacts, they come with many undocumented assumptions, dependencies, and configurations that make reproducibility hard to achieve . Reproduction of results often requires internal knowledge that is missing from the published manuscript.
Docker container  is an open source technology that can address the issues of reproducibility in SE/WE research. Containers can be seen as lightweight virtual machines that allow to set up a computational environment, including all necessary dependencies (e.g., libraries), configuration, code and data needed, within a single unit (called image). The steps necessary to achieve the state in such an image are documented within a Dockerfile, a script that holds all infrastructure configuration and commands. Images can be distributed publicly and seamlessly run on Linux, and also have support for major operating systems through Docker machine. The major difference to virtual machines is that Docker images share the kernel with the underlying host machine, which enables much smaller image sizes and higher performance. This has made Docker particularly attractive to industry and has thus seen a steep rise in adoption of the technology [4, 5].
Containers address the shortcomings of previous approaches (e.g., open sourcing) and make artifacts in SE/WE research immediately usable to reviewers, interested readers, and future researchers and improves dissemination of scientific results.
This tutorial aims on giving a hands-on introduction to Docker, and show how researchers can package an existing research project in the SE/WE community within a Docker container.