7. Creating Containers

7.1. Container recipes

Container recipes are self-contained except that at container creation time (spack stack create ctr ...) package information from the common packages.yaml (or a manually provided version) is added to the packages: section, and specs are added in the section specs from the specs file provided as an argument. Container recipes are defined in configs/containers, and specs are defined in configs/containers/specs.

WORK IN PROGRESS

7.1.1. Container build example

It is important to know that container builds do not allow for multiple versions of the same package (e.g., fms@2022.01 and fms@release-jcsda), which needs to be taken into account when creating the specs in configs/containers/specs/*.yaml.

# See a list of preconfigured containers
spack stack create ctr -h

# Create container spack definition (spack.yaml) in directory envs/<container-config>
spack stack create ctr --container=docker-ubuntu-gcc-openmpi --specs=jedi-ci

# Descend into container environment directory
cd envs/docker-ubuntu-gcc-openmpi

# Docker: create Dockerfile and build container
# See section "container" in spack.yaml for additional information
spack containerize > Dockerfile
docker build -t myimage .
docker run -it myimage