Containers are a powerful tool and valuable addition to available software management methods. A container is an isolated environment in which software runs, separated from software running on the host system and software running in other containers. As such, containers are a highly valuable tool for sharing system resources in a secure manner. For example, we can run many web servers on one machine, all completely isolated from each other, so that if any one of them gets hacked, the others and the host system itself remain safe.

Containers have become a trendy solution looking for problems and as such have found their way into research computing. There are valid use cases for containers in research. Unfortunately, though, they have become popular as an alternative to quality software development and build systems. Rather than writing portable software that works with mainstream libraries and is easy to build and install alongside other applications, many developers have recently chosen to containerize their software so it can continue to use outdated libraries (often with known bugs and security holes). In other words, containers are often used to sweep problems under the rug rather than solve them. They essentially become garbage cans full of outdated and low-quality software.

The containerization fad has faded somewhat in recent years as people have begun to see the down side of added overhead and removing the motivation to fix problems and keep software up-to-date. You may find that they remain the only viable option to installing certain software, however. Adding such software to package collections is often difficult, since the developers are not always cooperative about accepting patches to bring it up-to-date with modern libraries, etc. More on this in Chapter 40, Software Management.



Be sure to thoroughly review the instructions in Section 2, “Practice Problem Instructions” before doing the practice problems below.
  1. Are containers "good"?