Playing with Apptainer¶
In the examples below if the prompt is shown as local$
then you will need to run the
command on a terminal on your own local Linux machine. This is because the command will
require root privileges. If the prompt contains hpc$
then you can run the command on the
HPC.
If you don’t have a local Linux machine to play with then just follow along. Later you can install your own Linux distribution using a virtual machine created with something like “Virtual Box” (https://www.virtualbox.org).
In the section below we will be following a modified version of the tutorial at: https://github.com/NIH-HPC/Singularity-Tutorial.
Fortune and Cowsay¶
Firstly lets introduce the two programs that we will install into our container;
fortune
and cowsay
. Neither of these programs are installed on the eResearch HPC.
hpc$ fortune
bash: fortune: command not found
hpc$
You can though install these programs on your local Linux machine if you have one.
Each time you run the fortune program it will present to you a useful fortune.
local$ fortune
The following two statements are usually both true:
There's not enough documentation.
There's too much documentation.
-- Larry Wall in <199709020026.RAA08431@wall.org>
local$
The program cowsay is a bit different, it requires an input from stdin (the standard input). The input is usually piped into it from an echo command or from the output of another program (like fortune).
local$ echo 'Hi, I am an angus cow' | cowsay
_______________________
< Hi, I am an angus cow >
-----------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
local$
and here we pipe the output of the fortune program into cowsay:
local$ fortune | cowsay
________________________________________
/ Experience is what causes a person to \
\ make new mistakes instead of old ones. /
----------------------------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
local$
Now we understand what those programs do we can download and run a container that contains those programs, thus running those two programs on the HPC even though they are not installed there.
Download and Run a Container¶
The container that we will use is from the Singularity Hub Archive now at Datalad. This is a registry for scientific linux containers. Apptainer can reference any container there using the “shub://” protocol. We will be using the “lolcow” container created by David Godlove.
First download that container using the apptainer pull
command:
hpc$ apptainer pull shub://GodloveD/lolcow
Progress |===================================| 100.0%
hpc$
You will now have a file named lolcow_latest.sif
.
Now use the apptainer command run
to run the containers “predefined runscript command”:
hpc$ apptainer run lolcow_latest.sif
______________________________________
/ Q: How many Marxists does it take to \
| screw in a light bulb? A: None: The |
| light bulb contains the seeds of its |
\ own revolution. /
--------------------------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
hpc$
Try this a few times to see different quotes from “cowsay”.
You can also use the apptainer run
command which will download, build and run
the container directly from the Singularity Hub like this:
apptainer run shub://GodloveD/lolcow
. You can run this on our HPC or your
local Linux machine. However that might be needlessly pulling down the image each time,
its better to download a container once and run it locally.
Remember that the above cow with it’s comments actually came from two programs;
fortune
and cowsay
. The output of fortune is being piped into the cowsay
program. We can just run the fortune
command only using the exec
option as in the
command below. This “executes” a custom command.
hpc$ apptainer exec lolcow_latest.sif fortune
Bank error in your favor. Collect $200.
hpc$
What’s in a Container¶
We can also inspect
this image to find out some details about it:
hpc$ apptainer inspect lolcow_latest.sif
"org.label-schema.build-date": "Wednesday_3_July_2019_12:55:25_AEST",
"org.label-schema.build-size": "336MB",
"org.label-schema.schema-version": "1.0",
"org.label-schema.usage.singularity.deffile": "Singularity",
"org.label-schema.usage.singularity.deffile.bootstrap": "shub",
"org.label-schema.usage.singularity.deffile.from": "GodloveD/lolcow",
"org.label-schema.usage.singularity.version": "3.1.1-1.1.fc28"
Using inspect --deffile
we can see the definition file (we will cover that next) that was
used to create the image. Here we can see that the run command is actually the output of the
fortune program piped into cowsay and then lolcat (lolcat just colorises the output).
hpc$ apptainer inspect --deffile lolcow_latest.sif
BootStrap: docker
From: ubuntu:16.04
%post
apt-get -y update
apt-get -y install fortune cowsay lolcat
%environment
export LC_ALL=C
export PATH=/usr/games:$PATH
%runscript
fortune | cowsay | lolcat
That ends our quick tutorial on downloading and running container images.
Typing apptainer help
will give you an summary of all the commands you can
use. Typing apptainer help <command>
will give you more detailed information
about running an individual command.
Now proceed to Building Containers to find out how to build your own container images.
Getting Help on Apptainer¶
Apptainer has a manual page:
hpc$ man apptainer
Also you can get general help on Apptainer commands with:
hpc$ apptainer help
To get help on a specific command use apptainer help commmand
like this:
hpc$ apptainer help build