Une récente tendance issue de l’informatique nuagique semble intéresser de plus en plus la communauté bio-informatique. Cette tendance est de développer et de déployer une application dans un conteneur. Ce conteneur contient non seulement l’application mais les librairies nécessaires et une version minimaliste des applications du système d’exploitation. Une fois le conteneur construit, il est immédiatement prêt à être utilisé sur un ordinateur hôte qui contient l’environnent requis pour démarrer le conteneur.

Pour un développeur, ceci est très intéressant puisque l’environnement dans lequel on développe et teste l’application est identique au niveau logiciel à celui qui sera utilisé en production sur un serveur. Comme le conteneur est aussi isolé du reste du système d’exploitation, on évite les conflits de version et les problèmes d’applications qui brisent lorsque l’administrateur système met à jour les librairies du serveur.

Pour un utilisateur, ceci est aussi très intéressant puisqu’il ne devra pas télécharger et installer toutes les dépendances de l’application. Il arrive parfois que ces dépendances soient mal documentées ou qu’elles ne soient tout simplement plus disponibles avec le temps. Ceci est donc intéressant pour la distribution et l’utilisation de logiciels bio-informatiques.

Un environnement populaire pour développer, distribuer et exécuter des conteneurs est Docker. Docker permet de déployer des conteneurs sous Linux. Cette plateforme a été choisie par la communauté bio-informatique pour plusieurs projets dont : Bioboxes [génomique], BioDocker [protéomique], BioShaDock et DockStore.

Pour vous initier à Docker, vous pouvez télécharger Docker pour Linux ou Docker Toolbox qui est disponible pour Windows et Mac. Ce dernier outil permet de déployer des machines virtuelles avec Docker soit sur votre ordinateur ou encore dans le nuage (Amazon, Google, Microsoft). Une fois Docker installé, on peut soit construire un nouveau conteneur ou encore en récupérer un d’un répertoire public. Voici un exemple d’un court script Dockerfile qui indique la série d’instructions pour construire un conteneur pour NCBI BLAST+ extrait de BioDocker (https://github.com/BioDocker/containers/blob/master/blast/2.2.31/Dockerfile):

#################################################################
# Dockerfile
#
# Version:          1
# Software:         NCBI BLAST+
# Software Version: 2.2.31
# Description:      basic local alignment search tool
# Website:
http://blast.ncbi.nlm.nih.gov/Blast.cgi?PAGE_TYPE=BlastDocs&DOC_TYPE=Download
# Tags:             Genomics|Proteomics|Transcriptomics|General
# Provides:         blast 2.2.31
# Base Image:       biodckr/biodocker:latest
# Build Cmd:        docker build biodckr/blast 2.2.31/.
# Pull Cmd:         docker pull biodckr/blast
# Run Cmd:          docker run biodckr/blatst 
#################################################################

# Source Image
FROM biodckr/biodocker

################## BEGIN INSTALLATION ###########################

# install
RUN conda install blast=2.2.31

# Change workdir to /data/
WORKDIR /data/

##################### INSTALLATION END ##########################

# File Author / Maintainer
MAINTAINER Saulo Alves Aflitos 
# Modified by Felipe da Veiga Leprevost 06-17-2016

FROM est la première instruction dans ce Dockerfile. Elle indique l’image source sur laquelle est basée le conteneur. Ici, l’image est biodcker/biodocker qui est basée sur une image minimaliste de ubuntu:14.04.3 (voir ici pour les détails expliquant celle-ci est construite et un exemple plus complet de comment est construit un conteneur). Cette image contient toutes les dépendances globales pour les images BioDocker. Cette structure d’image est pratique non seulement pour la réutilisation mais aussi pour simplement mettre à jour le système d’exploitation par exemple. Un conteneur est construit avec un  système de fichiers par couche pour éviter la duplication des données. Ensuite, l’instruction RUN installe Blast dans le conteneur avec le gestionnaire de modules conda disponible dans l’image biodcker/biodocker. Finalement, WORKDIR change le dossier de travail pour l’exécution future de l’application. Puisque BioDocker fournit l’image du conteneur dans le répertoire public DockerHub, on peut éviter la construction du conteneur et simplement le récupérer comme indiqué dans le Dockerfile:

# docker run biodckr/blast blastp -h

Unable to find image 'biodckr/blast:latest' locally
latest: Pulling from biodckr/blast
8387d9ff0016: Already exists
3b52deaaf0ed: Already exists
4bd501fad6de: Already exists
a3ed95caeb02: Already exists
af6fa2683829: Already exists
fb2d2930af28: Already exists
e712c46836f6: Already exists
c0a2096039c4: Already exists
Digest:
sha256:204e2c2ad3c0d55c0a24b06444c2bb5a9a8edc2918cd5f959d0e5d3d33ba292a
Status: Downloaded newer image for biodckr/blast:latest
USAGE
 blastp [-h] [-help] [-import_search_strategy filename]
   [-export_search_strategy filename] [-task task_name] [-db database_name]
   [-dbsize num_letters] [-gilist filename] [-seqidlist filename]
   [-negative_gilist filename] [-entrez_query entrez_query]
   [-db_soft_mask filtering_algorithm] [-db_hard_mask filtering_algorithm]
   [-subject subject_input_file] [-subject_loc range] [-query input_file]
   [-out output_file] [-evalue evalue] [-word_size int_value]
   [-gapopen open_penalty] [-gapextend extend_penalty]
   [-qcov_hsp_perc float_value] [-max_hsps int_value]
   [-xdrop_ungap float_value] [-xdrop_gap float_value]
   [-xdrop_gap_final float_value] [-searchsp int_value]
   [-sum_stats bool_value] [-seg SEG_options] [-soft_masking soft_masking]
   [-matrix matrix_name] [-threshold float_value] [-culling_limit
int_value]
   [-best_hit_overhang float_value] [-best_hit_score_edge float_value]
   [-window_size int_value] [-lcase_masking] [-query_loc range]
   [-parse_deflines] [-outfmt format] [-show_gis]
   [-num_descriptions int_value] [-num_alignments int_value]
   [-line_length line_length] [-html] [-max_target_seqs num_sequences]
   [-num_threads int_value] [-ungapped] [-remote] [-comp_based_stats compo]
   [-use_sw_tback] [-version]

DESCRIPTION
  Protein-Protein BLAST 2.2.31+

Use ‘-help’ to print detailed descriptions of command line arguments

En une seule commande, Docker a récupéré le conteneur de l’application sur DockerHub et a exécuté l’application. Dans l’historique, on voit d’abord chaque couche du système de fichiers du conteneur qui est téléchargée et extraite. Ensuite, Docker a démarré le conteneur et a exécuté Blastp. L’exécution en ligne de commande est assez simple pour cet exemple. Toutefois, elle se complique un peu lorsqu’on veut transférer des données entre l’hôte et le conteneur.

Docker est aussi intéressant pour le développement et déploiement de services web. Ces services sont généralement complexes à installer puisqu’ils nécessitent un serveur web, une base de données, etc. Avec Docker, il est possible de mettre chacun de ses composants dans un conteneur et ensuite d’orchestrer leurs communications. On évite donc de réinstaller le tout à chaque déploiement et on peut réutiliser les conteneurs pour différents projets. L’orchestration d’un tel service est, par contre, plus compliquée.

Pour ceux qui voudraient plonger dans l’univers des conteneurs, je vous suggère d’avoir au préalable une solide base pour l’administration de système Linux. La technologie Docker est récente (2013) et en évolution rapide. Beaucoup d’outils sont disponibles pour gérer cet environnement et il faut prendre le temps de s’informer pour s’y retrouver.

J’espère que vous avez apprécié cette brève introduction aux contenants en bio-informatique. Cette nouvelle technologie en croissance semble, selon moi, avoir un grand potentiel pour simplifier la distribution des outils bio-informatiques via un répertoire public et pour simplifier l’installation.

[/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]