As part of my job, I support various labs (and other users) on campus. My work includes hardware maintenance, system administration, and software development. One of the labs on campus (the Quake Lab) asked me to automate part of their DNA post-sequencing demultiplexing and delivery process. I did that, but I did it in a fairly non-portable way: The code works with multiple sequencers, and it can be moved to other Linux systems, but it has a number of annoying dependencies.
As time goes on, I know that I will need to move this software to other hardware. With multiple external dependencies—a third-party package, a few things from EPEL, and some other code—this is not an easy process. However, there is a solution! Containers!!
However however, this code needs to be run by (and as) regular people, and it needs to interact with the local filesystem. Docker might not be the best option here. Instead, I am going to use Singularity for my containers.
This document describes how to take an existing workflow and build it as a Singularity container, so that it may be easily moved between systems.