Apptainer allows users to build containers from a definition file or external resources like Docker Hub.
Building Containers From a Definition File
The definition file below,
debian.def, customize the container building process. First, it defines the type of operating system to run the container, which is the Ubuntu Linux distribution. Next, it lists a set of commands that updates the container and installs the python library and its package manager
pip. Finally, it creates the directory
opt and copies the python program,
sort.py, from the host system to the directory. The python program
sort.py applies the sort algorithm
insertion sort to sort an array of integer numbers in ascending order.
Create a def file
ubuntu.def with the following content.
Bootstrap: docker From: ubuntu:18.04 %labels Author HPC Team Maintainer firstname.lastname@example.org URL https://hpc.nmsu.edu/home/ %files sort.py /opt %post echo "Installing required packages..." apt-get update && apt-get -y upgrade apt-get -y install python python-pip apt-get clean mkdir -p /opt cd /opt %runscript python /opt/sort.py
Then, create a python script
sort.py with the following content.
class sort(): def __init__(self): pass def _insertion_sort(self, a): for i in range(1, len(a)): key = a[i] j = i - 1 while j >= 0 and key < a[j]: a[j+1] = a[j] j -= 1 a[j+1] = key print(a) def main(): a = [0, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1] print(a) s = sort() s._insertion_sort(a) if __name__ == "__main__": main()
|To build containers on Discovery, you shouldn’t use the login node. You must build containers on a compute node. This can be done by using either OnDemand Interactive Shell(Tmux) or Interactive Shell using command line.|
To build a container from a def file (
ubuntu.def) and convert it to a SIF file (
apptainer build ubuntu.sif ubuntu.def
Downloading Container from the Docker Hub
You can download or build a container from the Docker Hub using the
For example, to download
alpine from the Docker Hub, run:
apptainer pull docker://alpine
This will download the container and convert it to a SIF file.
You can also use the
build command to download layers from Docker Hub and assemble them into Apptainer containers.
apptainer build alpine.sif docker://alpine
Example: The Rocker Project
The Rocker project was launched to provide high-quality Docker images containing the R environment. For example, you can use Docker images for machine learning and GPU-based computation in R. Also, you can find some Docker-based geospatial containers for R.
To pull the
rocker/ml image, you run:
apptainer pull docker://rocker/ml
This will create a SIF file that you can run using a command line, or customize into a def file.
Building a Sandbox Directory
Apptainer allows building a container within a writable directory called sandbox directory. Such a container operates the same way as a SIF container. To build a sandbox directory, please execute the command below in your Linux terminal. The command builds a sandbox directory called SBDebian that runs on a Debian
strach Linux distribution.
apptainer build --sandbox SBDebian/ docker:Debian:9
|Sandbox containers are not supported on Discovery. You can only use the SIF containers.|
For more information on sandbox containers, please refer to the Apptainer documentation
When you generate a SIF image from remote sources, Apptainer will cache the image. By default, the cache folder will be created in
HOME environmental variable (
$HOME/.apptainer/cache). The location of the cache can be changed by setting the
APPTAINER_CACHEDIR environment variable as shown below.
For more information, see Build Environment
When you change the value of
apptainer cache command allows you to list and clean up your cache.
You can use the
apptainer cache list to print a summary of cache the usage.
$ apptainer cache list There are 1 container file(s) using 4.96 GiB and 22 oci blob file(s) using 5.03 GiB of space Total space used: 9.99 GiB
To get more information about the cache usage, use the
$ apptainer cache list -v NAME DATE CREATED SIZE TYPE 0e2745d360314675471684 2022-12-01 22:33:44 1.37 GiB blob 1d5b8676e280f1b603b2e6 2022-12-01 22:33:10 181.25 MiB blob 301a8b74f71f85f3a31e9c 2022-12-01 22:33:00 29.02 MiB blob 35985d37d899c4aad2ea6b 2022-12-01 22:33:01 4.39 MiB blob 39930a67f1304239b24ab6 2022-12-01 22:33:49 3.32 KiB blob 3c7261a1b48646bb45e688 2022-12-01 22:33:11 52.82 KiB blob 461ecdf77fd75bff69f59c 2022-12-01 22:33:02 19.29 KiB blob 5b7513e7876e9c851ae994 2022-12-01 22:33:03 53.62 MiB blob 6baa2ca0c5f8b18078b26d 2022-12-01 22:33:08 0.54 KiB blob
Cleaning the Cache
To free the space used by the Apptainer cache, run:
apptainer cache clean
It will ask you to confirm before removing cache entries.
this will delete everything in your cache (containers from all sources and OCI blobs). Hint: You can see exactly what would be deleted by canceling and using the --dry-run option. Do you want to continue? [N/y]
--dry-run or -n: to see the files that would be deleted.
--force or -f: to clean the cache without asking for confirmation.
--days or -d: remove all cache entries older than specified number of days.
For example, to remove images older than 10 days, run:
apptainer cache clean --days 10
--type or -T: to remove images of a specific type.
For example, to remove images of type
apptainer cache clean -T oci-tmp