Uporabimo obstoječi vsebnik
Ukazi ogrodja Singularity imajo obliko
singularity [<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. Z ukazom version
pogledamo nameščeno različico ogrodja.
$ singularity version
3.7.4-1.el8
singularity 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
:
$ singularity help pull
Pull an image from a URI
Usage:
singularity 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:
...
singularity 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. 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.
$ singularity pull library://sylabsed/examples/lolcow:latest
singularity pull library://sylabsed/examples/lolcow:latest
Po končanem prenosu imamo v mapi datoteko lolcow_latest.sif
. Vsebniki 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
nsc-login1.ijs.si
$ whoami
sling001
$ cat /etc/os-release
NAME="CentOS Linux"
VERSION="8 (Core)"
...
$ echo $PATH
/ceph/grid/home/sling001/.local/bin:/ceph/grid/home/sling001/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin
$ 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.
$ singularity shell lolcow_latest.sif
Singularity>
singularity shell lolcow_latest.sif
Vpišimo še enkrat vse prejšnje ukaze in še nekaj dodatnih
Singularity> hostname
nsc-login1.ijs.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 Singularity, 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 CentOS Linux).
- Okoljska spremenljivka
PATH
se v vsebniku spremeni. Vsebnik privzeto vidi mape$HOME
,$PWD
,/sys
,/proc
,/tmp
in še nekatere. Mape/ceph/grid/home/sling001/.local/bin
, ki ni na teh lokacijah, v vsebniku ne vidimo. Vsebnik je spremenljivkoPATH
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 Singularity 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.
$ singularity exec lolcow_latest.sif ls /usr/games/
cowsay cowthink fortune lolcat
$ singularity exec lolcow_latest.sif cowthink "Hmmmm..."
----------
( Hmmmm... )
----------
...
$ singularity exec lolcow_latest.sif fortune
What happened last night can happen again.
$ singularity exec lolcow_latest.sif lolcat lolcow-os.info
singularity exec lolcow_latest.sif ls /usr/games/
singularity exec lolcow_latest.sif cowthink "Hmmmm..."
singularity exec lolcow_latest.sif fortune
singularity 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.
$ singularity 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. /
----------------------------------------
...
$ singularity run library://sylabsed/examples/lolcow:latest
--------------------------------------
/ Abandon the search for Truth; settle \
\ for a good fantasy. /
--------------------------------------
singularity run lolcow_latest.sif
./lolcow_latest.sif
singularity run library://sylabsed/examples/lolcow:latest
V zadnjem primeru zaženemo vsebnik kar neposredno iz repozitorija. Ogrodje Singularity v tem primeru pripravi začasno sliko, ki jo po zaključku izvajanja vsebnika zbriše.
Preveri svoje znanje
Vaja