  Containers are increasingly used as means to distribute and run Linux
services and applications. In this paper we describe the architectural design
and implementation of udocker, a tool which enables the user to execute Linux
containers in user mode. We also present a few practical applications, using a
range of scientific codes characterized by different requirements: from single
core execution to MPI parallel execution and execution on GPGPUs.
