  Containers are an emerging technology that hold promise for improving
productivity and code portability in scientific computing. We examine Linux
container technology for the distribution of a non-trivial scientific computing
software stack and its execution on a spectrum of platforms from laptop
computers through to high performance computing (HPC) systems. We show on a
workstation and a leadership-class HPC system that when deployed appropriately
there are no performance penalties running scientific programs inside
containers. For Python code run on large parallel computers, the run time is
reduced inside a container due to faster library imports. The software
distribution approach and data that we present will help developers and users
decide on whether container technology is appropriate for them. We also provide
guidance for the vendors of HPC systems that rely on proprietary libraries for
performance on what they can do to make containers work seamlessly and without
performance penalty.
