What Are Containers
What are containers? A good description is that they are portable, lightweight, standalone, and executable software packages. Let's expand a bit on this sentence, starting from the end and working backwards:
- Software package implies that a container is something that is packaged up for you so you can download it simply.
- Executable means it is an application that runs like any other program on your computer.
- Standalone means that it is by itself sufficient for you to use; you don't need to have a lot of other components in place to use the package.
- Lightweight suggests that it is not a very large or slow thing to get started on your computer, so it starts up quickly and doesn't use a lot of resources.
- Portable suggests that it is able to be used in many different computing environments.
This one sentence really touches on all the best aspects of containers!
What's Inside a Container
Containerized applications contain all of the things that are needed to run the application. In the past, if you were trying to use some scientific software that you had heard about, you would have to download the source code for it. It may require a special compiler to compile that code, and you would have to install libraries that the code was going to use, or perhaps some tools that are used during the building of the code. Many things could go wrong, and it might turn into a nightmare for scientists to be able to use software that other people were trying to give them access to. Containerization solves all of these problems because the work to build the application is done by the person who provides the container. You don't need to do all that other legwork. With the container, you already have the thing that will run.
Container Platforms
Now, it will only run if you have prepared your computer by installing a platform that is capable of running containers. Two platforms you may be aware of are Docker and Apptainer. There are others as well, but these are the two most popular.
CVW material development is supported by NSF OAC awards 1854828, 2321040, 2323116 (UT Austin) and 2005506 (Indiana University)