Περιγραφή¶
Apptainer (formerly Singularity) simplifies the creation and execution of containers, ensuring software components are encapsulated for portability and reproducibility.
Apptainer 1.1.9¶
Note
Εφόσον "βλέπουμε" κάποιο αρχείο μας μέσα από ένα container, μπορούμε να επέμβουμε κανονικά και να κάνουμε μόνιμες αλλαγές. Για να γράψουμε (προσωρινά) σε κάποιο volume του container που δεν γίνεται mount από το host, μπορούμε να χρησιμοποιήσουμε το flag --writable-tmpfs
(εφόσον έχουμε το σχετικό permission).
Παράδειγμα χρήσης¶
Μπορούμε να χρησιμοποιήσουμε το command line interface του Apptainer
για την λήψη OCI images, για παράδειγμα ως εξής:
# module load gcc/13.2.0-iqpfkya apptainer/1.1.9
# apptainer pull docker://python:3.9
To container image αποθηκεύεται με τη μορφή <image_name>_<version>.sif
.
Στην συνέχεια μπορούμε να εκτελεσουμε κάποια εντολή μέσα στο container με την εντολή apptainer exec
ως εξής:
# apptainer exec python_3.9.sif python --version
Μόλις εκτελεστεί η εντολή, το container θα κλείσει. Αν δεν θέλουμε να κλείσει, τότε μπορούμε να ανοίξουμε ένα bash shell μέσα στο container χρησιμοποιώντας την εντολή apptainer shell
:
# apptainer shell python_3.9.sif
Apptainer># python --version
Note
Μπορούμε να πραγματοποιήσουμε έξοδο από οποιοδήποτε shell (bash shell ή άλλο) πληκτρολογώντας την εντολή exit
ή πατώντας τον συνδυασμό πλήκτρων Ctrl
+D
.
Πολλά images έχουν κατασκευαστεί ώστε να εκτελούν κάποια προκαθορισμένη ακολουθία εντολών εντός του container χρησιμοποιώντας την εντολή apptainer run
. Για το παράδειγμά μας, δίνοντας
# apptainer run python_3.9.sif
εκτελείται ένα python shell. Όπως και στην περίπτωση του apptainer exec
, μόλις εκτελεστούν οι προκαθορισμένες εντολές, το container θα κλείσει (στο παράδειγμά μας, το container θα κλείσει μόλις κλείσουμε το python shell). Αν το image δεν έχει καθορισμένη συμπεριφορά για την εντολή apptainer run
, η default συμπεριφορά είναι να ανοίξει ένα shell μέσα στο container.
Note
Το image είναι εκτελέσιμο. Η απευθείας εκτέλεσή του λειτουργεί όμοια με την εντολή apptainer run
.
Note
Ένας ακόμα τρόπος να χειριζόμαστε τα containers είναι να φτιάχνουμε instances, τα οποία εκτελούνται στο background. Αυτή η μέθοδος χρειάζεται μόνον αν πρέπει να χρησιμοποιήσουμε μια εφαρμογη που να εκτελείται συνεχώς όσο εργαζόμαστε (τύπου webserver) οπότε συνήθως στο πλαίσιο της συστοιχίας δεν ενδείκνυται. Για την σπάνια περίπτωση που θα χρειαστεί, μπορείτε να ανατρέξετε στο documentation για το apptainer instance
και τις υποεντολές του, καθώς και για το apptainer shell
.
Μπορούμε να εκκινήσουμε container images σε batch εργασίες, δημιουργώντας ένα αρχείο υποβολής εργασίας, όπως για παράδειγμα το apptainer_example.sh:
Submission Script
#!/bin/bash
#SBATCH -t 15:00
#SBATCH -J apptainer-1.1.9-job
#SBATCH -p batch
module load gcc/13.2.0-iqpfkya apptainer/1.1.9
apptainer exec docker://python:3.9 python --version
Το παραπάνω script θα κατεβάσει το image από το docker σε ένα προσωρινό αρχείο, θα το εκτελέσει και θα το ξανασβήσει μόλις τελειώσει η εκτέλεση.
Υποβάλλουμε το παραπάνω script προς εκτέλεση με την εντολή:
# sbatch apptainer_example.sh
Παρακολουθούμε την πορεία της εργασίας με την εντολή squeue
.
Το αναμενόμενο αποτέλεσμα παράγεται στο αρχείο slurm-<jobid>.out
ή σε άλλα αρχεία εξόδου που δημιουργούνται από το container.