# Containers on Perlmutter - `podman-hpc` vs `shifter` - Differences (env, volume mounts, swapped modules, and image caching) - Best practices of running containers - proper storage system to use - Containers per task vs containers per node - A deeper view at library swapping, looking at `.conf` files under `/etc/podman_hpc/` and `/etc/podman_hpc/modules.d` - GPU - MPI - other modules - `cvmfs`, `nccl`, `openmpi-pmi2` `openmpi-pmix` etc - skip library swapping with shifter (`--module=none`) - Share images with other users without pushing to registry ## local image sharing on CFS ```bash podman-hpc --squash-dir /path/to/shared/area/on/cfs migrate ubuntu:latest chmod -R a+rx /path/to/shared/area/on/cfs ``` Other users ```bash= export PODMANHPC_ADDITIONAL_STORES=/path/to/shared/area/on/cfs podman-hpc images ``` ## Running noVNC on login node for GUI apps Ref: [dingpf/nvidia-noVNC](https://github.com/dingp/nvidia-noVNC) The example dockerfile with ### Start the container on one login node Generate a VNC password file. ```bash podman-hpc run --rm -it -v $HOME:/scratch --entrypoint=/bin/bash docker.io/dingpf/novnc-nvidia:latest # inside the container, run vncpassword # once finished cp ~/.vnc/passwd /scratch/.vnc_passwd ``` Run the container on the login node. ```bash= podman-hpc run \ --gpu \ --rm -d -p 6080:6080 \ --name ubuntu2204-novnc \ -v <software_dirs_on_global_common>:<path_in_container> \ -v ~/.vnc_passwd:/root/.vnc/passwd dingpf/novnc-nvidia:latest ``` Note that if someone else is using port `6080` on the login node, you may need to change the first `6080` in `-p 6080:6080` to another free port. ### Setting up a SSH tunnel to the login node ```bash= # change ~/.ssh/nersc if the path to your nersc identity file is different # change loginXX to the hostname of the login node where you have your container running ssh -o IdentitiesOnly=yes \ -o IdentityFile=~/.ssh/nersc \ -J perlmutter.nersc.gov \ -L 6080:localhost:6080 loginXX -N -f ``` ### Access noVNC in a browser You should now be able to go to `localhost:6080` in a browser window. The default noVNC password is `00000000`.