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