Cookies

We use cookies to ensure that we give you the best experience on our website. You can change your cookie settings at any time. Otherwise, we'll assume you're OK to continue.

Durham University

Advanced Research Computing

Containers

Containers are a useful way to take software produced on one system and make it portable so that it can run on another. A container image contains not only the application you wish to run, but also most of the operating system is was created on - everything apart from the kernel.

The most popular container system is called Docker, which is aimed at use on laptops and desktops. Unfortunately, Docker is unsuitable on a machine like Hamilton, but we instead provide a compatible system called Singularity.

As an example, this is how to download and run the ubuntu image from Docker Hub on one of Hamilton's login nodes:

$ singularity build ubuntu_latest.simg docker://ubuntu:latest
... skip some output ...
INFO:    Creating SIF file...
INFO:    Build complete: ubuntu_latest.simg
$ singularity shell ./ubuntu_latest.simg Singularity> cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04.1 LTS"
Singularity>

Once you have downloaded an image to a file, you will be able to run the container in a job script.

The example job script below, my_container_job.sh, runs the copy of bash within the cached Ubuntu image, using a single CPU core:

#!/bin/bash

# Request resources:
#SBATCH -c 1          # 1 CPU core
#SBATCH --mem=1G      # 1 GB RAM
#SBATCH -t 1:0:0  # 1 hour (hours:minutes:seconds)

# Run in the default queue
# (job will share node with other jobs)
#SBATCH -p shared

# Commands to be run:
singularity run ./ubuntu_latest.simg /bin/bash -c "echo hello"

Submit this job to the queue with the command: sbatch my_container_job.sh