Skip to main content

Scientific Software

Ecosystem: How Containerization Works

The typical lifecycle of container usage at JLab looks like this:

  1. Build the container using Dockerfile.base and version-specific tooling
  2. Push the container to an internal registry (e.g., codecr.jlab.org)
  3. Pull and run containers in:
    • Local environments for testing
    • Batch systems via Slurm for production workloads
    • OSG-compatible clusters

To get you started, the first two steps have been performed. A base container called jlab-base:alma9.5 is available at jlab-base:alma9.5 for retrieval. This enables a consistent environment across all phases of development, from prototype to publication.


Special Considerations for Scientific Environments

The jlab-base Container

jlab-base:alma9.5 is the reference image tested on the interactive and batch farms.
It comes pre-installed with:

CategoryExamples
Compilers & buildGCC 13, LLVM 17, CMake, Ninja
Scientific libsCERN ROOT, Geant4 + data, CLHEP
Python stackPython 3.11 + SciPy ecosystem
Utilitiesgit, jq, curl, ssh …

Why start here?

  • Saves hours otherwise spent boot-strapping a tool-chain
  • Built for AlmaLinux 9 (same as farm nodes) → ABI compatible
  • Large (≈ 3 GB) but layers are cache-friendly and shared across derived images

If you need a slimmer or highly specialised image, see Advanced → Building Derived Images.


CVMFS and Modules

Jefferson Lab supports CVMFS (CERN Virtual Machine File System), which delivers a global, read-only file system for scientific software. Within containers:

  • CVMFS volumes can be mounted to access prebuilt ROOT, Geant4, CMake, etc.
  • Module systems (e.g., module load root) can be integrated via environment hooks

This ensures containers can take advantage of centrally maintained scientific software while still benefiting from isolation and reproducibility.

  • The CVMFS nodes are backed up and snapshots made regularly to allow long-term maintainability.
podman run -it --rm \
--mount type=bind,source=/cvmfs,target=/cvmfs,ro \
jlab/base:alma9.5

HPC/Batch Integration

Containers must be:

  • Compatible with Slurm execution
  • Efficient in resource usage
  • Capable of binding to host file systems and network interfaces

JLab base containers are optimized to meet these requirements, ensuring seamless integration into managed clusters.