====== Sample Container Definitions ======
This page provides a number of sample [[advanced:apptainer|Apptainer]] definition files which you may wish to make use of when developing your own container solutions for Comet if an option is not already in our [[:advanced:software|software pages]] or directly named in our [[:advanced:software_list|software and existing containers list]].
Please ensure that you read the [[advanced:apptainer|Apptainer]] guide for Comet //first//.
Remember to set the ''APPTAINER_TMPDIR'' variable before creating a container:
$ export APPTAINER_TMPDIR=/scratch/
This ensures that temporary files are created under ''/scratch'' on the local drive, so it should be (a) faster, and (b) not run out of space by using the system ''/tmp'' directory.
==== Generic Container Helper ====
You can customise this helper script (which we will call ''helper.sh'' for simplicity) for //any// container image you create - just adjust the path and filename to your image.
#!/bin/bash
module load apptainer
IMAGE_NAME=/path/to/your/container.sif
container.run() {
# Run a command inside the container...
# automatically bind the /scratch and /nobackup dirs
# pass through any additional parameters given on the command line
apptainer exec --nv --bind /scratch:/scratch --bind /nobackup:/nobackup ${IMAGE_NAME} $@
}
We always recommend using the container helper to run applications inside the container, as you don't then have to remember all of the various ''apptainer exec'' options each time. To run //my_app// from inside your container, then just:
$ source helper.sh
$ container.run my_app
----
===== Ubuntu LTS =====
This uses the officially published Ubuntu docker image. This uses Ubuntu //Noble// - or 24 LTS. Multiple versions of Ubuntu are available; see the listed tags: https://hub.docker.com/_/ubuntu
Bootstrap: docker
From: ubuntu:noble
%post
# Prevent interactive prompts
export DEBIAN_FRONTEND=noninteractive
# Update & install only necessary packages
apt-get update
# Base stuff everything will need
apt-get install -y aptitude wget zip git less vim
# Remove any downloaded package files - so they don't remain in the built image
apt-get clean
%environment
%runscript
Build as:
$ module load apptainer
$ apptainer build ubuntu.sif ubuntu.def
The base image size as defined above is **~120MB** as the default image is //very// basic.
----
===== Ubuntu LTS with Development Tools =====
This uses the officially published Ubuntu docker image and adds C, C++, Fortran and Python development tools. Multiple versions of Ubuntu are available; see the listed tags: https://hub.docker.com/_/ubuntu
This example also ensures that compilers are using the most updated version and are configured to generate code tuned for the AMD Epyc CPU architecture of Comet.
If you are compiling software from C or C++ source code, then **we would always recommend using GCC 14 using the supplied CFLAGS parameters** to generate the most optimal binaries for Comet.
Bootstrap: docker
From: ubuntu:noble
%post
# Prevent interactive prompts
export DEBIAN_FRONTEND=noninteractive
# Update & install only necessary packages
apt-get update
# Base stuff everything will need
apt-get install -y aptitude wget zip git less vim apt-utils autoconf automake build-essential cmake gcc-14 g++-14 gfortran-14 git less unzip vim wget python3 python3-pip
# For anything we compile during the image build
export CFLAGS="-O3 -march=znver5 -pipe"
export CXXFLAGS="-O3 -march=znver5 -pipe"
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-14 20
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-14 20
update-alternatives --install /usr/bin/gfortran gfortran /usr/bin/gfortran-14 20
# Remove any downloaded package files and any Python cached packages - so they don't remain in the built image
apt-get clean
pip3 cache purge
%environment
# For anything we build after the image is created using the installed compilers
export CFLAGS="-O3 -march=znver5 -pipe"
export CXXFLAGS="-O3 -march=znver5 -pipe"
%runscript
Build as:
$ module load apptainer
$ apptainer build ubuntu_dev.sif ubuntu_dev.def
The final image size as defined above is **~350MB** with the additional software included over the base image.
----
===== Nvidia CUDA/CUDNN =====
This uses the official Nvidia docker image (itself based on top of Ubuntu LTS). There are multiple versions available, see the tags list at: https://hub.docker.com/r/nvidia/cuda
Bootstrap: docker
From: nvidia/cuda:12.8.1-cudnn-devel-ubuntu24.04
%post
export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get install -y aptitude wget zip git less vim
apt-get clean
%environment
%runscript
The base Nvidia image already includes most of the development tools (Python, GCC) and libraries, hence the lack of additional software in the ''apt-get'' line.
Build as:
$ module load apptainer
$ apptainer build nvidia_cuda.sif nvidia_cuda.def
Final image size is approximately **5.9GB**.
----
[[:advanced:software|Back to Software]]