Scientific Software
Ecosystem: How Containerization Works
The typical lifecycle of container usage at JLab looks like this:
- Build the container using
Dockerfile.base
and version-specific tooling - Push the container to an internal registry (e.g.,
codecr.jlab.org
) - 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:
Category | Examples |
---|---|
Compilers & build | GCC 13, LLVM 17, CMake, Ninja |
Scientific libs | CERN ROOT, Geant4 + data, CLHEP |
Python stack | Python 3.11 + SciPy ecosystem |
Utilities | git, 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.