South Green Logo

South Green Trainings pages

Description Savoir créer des conteneurs Singularity
Cours lié HPC Administration Module2
Auteur Ndomassi TANDO (ndomassi.tando@ird.fr)
Date de création 27/09/2019
Date de modification 27/09/2019

Summary


Préparer son environnement

Il faut créer sur le cluster dans une partition partagée les deux répertoires suivantes:

On pourra par exemple les créer dans /usr/local/singularity:

$ mkdir /usr/local/singularity/def
    $ mkdir /usr/local/singularity/conteneurs

Créer un fichier de recette:

Un fichier de recette est un fichier dans lequel on va écrire toutes les lignes de commandes nécessaires pour créer un conteneur singularity.

Il s’agit d’un fichier avec l’extension .def

On va en retrouver dans ce fichier plusieurs sections obligatoires:

l’entête

Il doit être écrit au début du fichier et donne les informations à Singularity sur le système d’exploitation à utiliser dans le conteneur.

BootStrap va determiner l’agent bootstrap agent qui va être utilisé por créer le système d’exploitation de base base.

Par exemple,l’agent bootstrap library bootstrap va récupérér un conteneur de base depuis les ContainerLibrary.

l’agent bootstrap docker va lui récupérer les couches docker depuis le Docker Hub comme OS de base pour démarrer notre image.

Les principaux BootStrap sont les suivants:

Le mot clé From permet des choisir l’OS et la version que l’on veut utiliser exemple: From: ubuntu:18.04

les sections:

%labelspermet de rajouter des metadata au fichier /.singularity.d/labels.json à l’intérieur du conteneur.

Il donne des informations générales sur le conteneur et son auteur.

%help permet d’écrire une aide à destination des utilisateurs quand il vont taper la commande singularity help nom_conteneur.simg

%environmentpermet de définir des variables d’environnement à l’intérieur du conteneur. Ces variables seront prises en compte dès le build du conteneur.

%post dans cette section on va lister les commandes à passer à l’OS de base. Typiquement c’est là que l’on écrit les commandes pour installer notre logiciels

%runscriptdans cette section ce sont les commandes qui font être exécuter au lancement du conteneur singularity run mon_conteneur.simg ou singularity exec mon_conteneur.simg. Quand le conteneur est appele, les arguments suivants le nom du conteneur sont passés en arguments.

Exemple de fichier de recette:

Ci-dessous un exemple de fichier de recette bwa-0.7.17.defpour la construction du conteneur bwa-0.7.17.simg

BootStrap: docker
From: ubuntu:18.04
%labels
Maintainer Ndomassi Tando - IRD Itrop Cluster, DIADE Unit
base.image="ubuntu:18.04"
version="1"
software="bwa"
software.version="0.7.17"
%help
URL: http://bio-bwa.sourceforge.net/
Description: BWA is a software package for mapping low-divergent sequences against a large reference genome, such as the human genome
Launch the command: singularity run bwa-0.7.17.simg + arguments to use bwa
%environment
export PATH=$PATH:/usr/local/bwa-0.7.17/
%post
apt-get update
apt-get install -y build-essential wget gcc zlib1g-dev
mkdir -p /opt/sources/
cd /opt/sources/
wget https://github.com/lh3/bwa/archive/v0.7.17.tar.gz
tar xvfz v0.7.17.tar.gz
cd bwa-0.7.17
make
cp -r /opt/sources/bwa-0.7.17 /usr/local/bwa-0.7.17
chmod +x -R /usr/local/bwa-0.7.17
%runscript
exec /usr/local/bwa-0.7.17/bwa "$@"

Construire son conteneur:

Une fois le fichier de recette créé, on va pouvoir le conteneur singularity avec la commande

$ singularity build nom_conteneur.simg nom_fichier_recette.def

exemple pour le conteneur bwa-0.7.17:

$ singularity build bwa-0.7.17.simg bwa-0.7.17.def

Tester son conteneur:

$ singularity run nom_conteneur.simg

Permettra de lancer le runscript du conteneur à l’intérieur du conteneur.

Exemple:

$ singularity run bwa-0.7.17.simg -h

lancer la commande bwa -h

$ singularity exec nom_conteneur.simg commande

Permettra de lancer la commande précisée à l’intérieur du conteneur.

Exemple:

singularity exec /usr/local/singularity-2.4/containers/bwa-0.7.17.simg cat /etc/profile

Permettra d’afficher le contenu du fichier /etc/profiledu conteneur



License

The resource material is licensed under the Creative Commons Attribution 4.0 International License (here).