Skoči na vsebino

Uporabimo obstoječi vsebnik

Ukazi ogrodja Apptainer imajo obliko

apptainer [<globalna stikala>] <ukaz> [<stikala ukaza>] [<parametri>]

Globalna stikala, stikala ukaza in parametre navajamo po potrebi. Z globalnimi stikali lahko nastavimo način izpisovanja in razhroščevanja. Z ukazi povlečemo vsebnike iz repozitorija, jih gradimo, zaganjamo in še mnogo drugega. Namesto ukaza apptainer lahko uporabimo tudi ukaz singularity. Na ta način ostajata Apptainer in Singularity kompatibilna. Z ukazom version pogledamo nameščeno različico ogrodja.

$ apptainer version
1.3.0-1.el8
apptainer version

Z ukazom help izpišemo splošno pomoč ali pomoč za izbrani ukaz. V zadnjem primeru dobimo natančno razlago stikal ukaza in parametrov. Na primer, za ukaz pull:

$ apptainer help pull
Pull an image from a URI

Usage:
    apptainer pull [pull options...] [output file] <URI>

Description:
    The 'pull' command allows you to download or build a container from a given
    URI. Supported URIs include:    
...
apptainer help pull

Prenos pripravljenih vsebnikov

Delujoči vsebnik dobimo najhitreje tako, da ga potegnemo iz repozitorija. Najprej si poglejmo zabaven vsebnik lolcow, ki ga najdemo na repozitoriju Singularity Cloud Library. Najprej dodamo repozitorij v register, da ga apptainer lahko najde.

$ apptainer remote add --no-login SylabsCloud cloud.sylabs.io
$ apptainer remote use SylabsCloud
apptainer remote add --no-login SylabsCloud cloud.sylabs.io &&
apptainer remote use SylabsCloud

Na repozitoriju poiščemo povezavo do vsebnika. K sebi ga potegnemo z ukazom pull ali z ukazom build. Ukaz build ob prenosu vsebnik pretvori v najnovejši format, pri klicu moramo navesti še želeno ime vsebnika.

$ apptainer pull library://sylabsed/examples/lolcow:latest
apptainer pull library://sylabsed/examples/lolcow:latest

Po končanem prenosu imamo v mapi datoteko lolcow_latest.sif. Vsebniki Apptainer/Singularity so označeni s končnico sif (angl. Singularity Image File).

Ko se sklicujemo na vir vsebnika, navedemo:

  • library:// za vsebnike v repozitoriju Singularity Cloud Library,
  • docker:// za vsebnike v repozitoriju dockerhub,
  • kakšnega od množice drugih virov, ki jih na tej delavnici ne bomo potrebovali.

Interaktivno delo z vsebnikom

Preden zaženemo vsebnik, poglejmo nekaj nastavitev našega računalnika (gostitelja).

$ hostname
hpc-login1.arnes.si
$ whoami
sling001
$ cat /etc/os-release
NAME="AlmaLinux"
VERSION="8.9 (Midnight Oncilla)"
...
$ echo $PATH
/d/hpc/home/sling001/.local/bin:/d/hpc/home/sling001/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/puppetlabs/bin
$ ls 
lolcow_latest.sif
$ ls /usr/games
hostname
whoami
cat /etc/os-release
echo $PATH
ls 
ls /usr/games

Za interaktivno delo z vsebnikom uporabimo ukaz shell, ki bo vsebnik zagnal v ukazni vrstici, na podoben način, kot pri povezovanju na oddaljeni sistem preko protokola SSH.

$ apptainer shell lolcow_latest.sif
Singularity> 
apptainer shell lolcow_latest.sif

Vpišimo še enkrat vse prejšnje ukaze in še nekaj dodatnih

Singularity> hostname
hpc-login1.arnes.si
Singularity> whoami
sling001
Singularity> cat /etc/os-release    
NAME="Ubuntu"
VERSION="18.10 (Cosmic Cuttlefish)"
...
Singularity> echo $PATH
/usr/games:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Singularity> ls 
lolcow_latest.sif
Singularity> ls /usr/games
cowsay  cowthink  fortune  lolcat
Singularity> cowsay "Hello!"
 --------
< Hello! >
 --------
...
Singularity> cp /etc/os-release ./lolcow-os.info
Singularity> exit
hostname
whoami
cat /etc/os-release
echo $PATH
ls /usr/games
cowsay "Hello!"
cp /etc/os-release ./lolcow-os.info
exit

Primerjava izpisov pokaže, nekaj pomembnih lastnosti vsebnikov Apptainer, ki smo jih spoznali prej:

  • Vsebnik prevzame množico nastavitev od gostitelja (hostname).
  • Uporabniško ime v vsebniku je enako uporabniškemu imenu na gostitelju. Enako je s pravicami uporabnika.
  • Vsebnik zamenja uporabniški prostor (Ubuntu namesto AlmaLinux).
  • Okoljska spremenljivka PATH se v vsebniku spremeni. Vsebnik privzeto vidi mape $HOME, $PWD, /sys, /proc, /tmp in še nekatere. Mape /d/hpc/home/sling001/.local/bin, ki ni na teh lokacijah, v vsebniku ne vidimo. Vsebnik je spremenljivko PATH dopolnil z mapo /usr/games.
  • Datoteke v omenjenih mapah, izpisali smo datoteki v trenutni mapi ($PWD), vidimo tudi v vsebniku.
  • Mapa /usr/games na gostitelju je prazna, v vsebniku pa so v njej štirje programi.
  • V vsebniku lahko zaganjamo ukaze operacijskega sistema in druge programe (ls, cowsay).
  • Iz vsebnika lahko tudi pišemo (kopiramo) v datotečni sistem gostitelja (ukaz cp).

Z ukazom exit zaključimo interaktivno delo in se vrnemo v ukazno vrstico gostitelja.

Izvajanje ukazov v vsebniku

Z ukazom exec lahko izvajamo ukaze v vsebniku. Ogrodje Apptainer najprej zažene vsebnik, v našem primeru lolcow_latest.sif, nato pa v vsebniku zažene ukaz (ls) ali poljuben program, ki je nameščen v njem.

$ apptainer exec lolcow_latest.sif ls /usr/games/
cowsay  cowthink  fortune  lolcat
$ apptainer exec lolcow_latest.sif cowthink "Hmmmm..."
 ----------
( Hmmmm... )
 ----------
 ...
$ apptainer exec lolcow_latest.sif fortune
What happened last night can happen again.
$ apptainer exec lolcow_latest.sif lolcat lolcow-os.info
apptainer exec lolcow_latest.sif ls /usr/games/
apptainer exec lolcow_latest.sif cowthink "Hmmmm..."
apptainer exec lolcow_latest.sif fortune
apptainer exec lolcow_latest.sif lolcat lolcow-os.info

Zaganjanje vsebnika

Pri pripravi vsebnika lahko v zagonsko skripto (angl. runscript) vpišemo ukaze, ki se izvedejo ob zagonu. Vsebnik zaženemo z ukazom run ali pa preprosto vpišemo njegovo ime, saj je izvršljiva datoteka.

$ apptainer run lolcow_latest.sif
 --------------------------------------     
/ Expect the worst, it's the least you \
\ can do.                              /
 --------------------------------------     
...
$ ./lolcow_latest.sif
 ----------------------------------------
/ Caution: breathing may be hazardous to \
\ your health.                           /
 ----------------------------------------
...
$ apptainer run library://sylabsed/examples/lolcow:latest
 --------------------------------------
/ Abandon the search for Truth; settle \
\ for a good fantasy.                  /
 --------------------------------------
apptainer run lolcow_latest.sif
./lolcow_latest.sif
apptainer run library://sylabsed/examples/lolcow:latest

V zadnjem primeru zaženemo vsebnik kar neposredno iz repozitorija. Ogrodje apptainer v tem primeru pripravi začasno sliko, ki jo po zaključku izvajanja vsebnika zbriše.

Preveri svoje znanje

Vaja

Vaja 01