Thomas Denecker & Claire Toffano-Nioche
Session 4
29/03/2019
Novembre
Janvier
Février
Mars
Avril
Mai
Juin
Juillet
...
26
25
22
29
26
31
28
à définir
...
"Pourquoi lorsque je teste mon MD5 sum, la comparaison n'est jamais vraie alors que lorsque que j'affiche les empruntes, elles sont identiques ? "
Le fautif ? Windows !!!
Le problème vient des caractères de fin de ligne
(ils ne sont pas visibles)
Â
Sur linux : \n
Sur windows : \r\n
(en fonction de l'éditeur de texte)
Â
ConséquenceÂ
"toto\n" != "toto\r\n"
Â
et en affichage les deux sont : toto
Dans le terminalÂ
Dans AtomÂ
sed 's/\r$/\n/' conditions.txt > conditionsCorr.txt
mv conditionsCorr.txt conditions.txt
CRLF
LF
Une virée en mer
Reproductibilité du codeÂ
Git et Github
Â
Reproductibilité des outils utilisés
Conda
Â
Reproductibilité de l'installation
Script d'installation, conda
Â
Reproductibilité d'une analyse
Script d'analyse automatique
Dependability Benchmarking for Computer Systems De K. Kanoun, L. Spainhower
Pourquoi et comment ?
Environnement de système d’exploitation
Â
Permet d'avoir plusieurs systèmes d'exploitation sur une même machine physique
Â
2 approches :
- La virtualisation
- La containérisation
Virtualbox, VMware,...
Virtualisation
Virtualbox, VMware,...
Virtualisation
Virtualbox, VMware,...
Docker
Virtualisation
ContainérisationÂ
Plus léger
Â
Plus rapide
Â
Simple à partager
Â
Portabilité
Le système doit être à jour
Â
Il faut être administrateur
Â
Il n'est pas recommandé par l'I2BC (préférence pour singularity)
Pour partager les "dockers" sur le hub
Indispensable lors de l'installation sur Windows et MacOS
Si vous n'avez pas ça, il faut recommencerÂ
$ sudo docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://cloud.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/engine/userguide/
Windows / MacOS
docker --version
Linux
Image Â
Ensemble de fonctions qui permettent de faire tourner une applicationÂ
Figée (pas modifiable)
Peut être stockée en ligne et partagée (Dockerhub)
Â
Container
Image qui est active
ModifiableÂ
Conteneur
Image
Conteneur
Conteneur
INDÉPENDANTS
Intérêt : une base de données par exemple
Création d'une image
Utilisation d'un fichier de création : dockerfileÂ
Â
Partage d'une image
Disponible dans des dépôts comme Dockerhub
Même principe que Github :
- Partage de l'image (push)
- Récupération de l'image (pull)
FROM
l'image de base utilisée (Ubuntu par exemple)Â
RUNÂ
Pour lancer une commande
FROM XXX
RUN XXX
FROM ubuntu:18.04
RUN apt-get update
Un exemple simple Â
Un ubuntu 18.04 mis à jourÂ
Le dockerfile est dans notre dossier de travailÂ
# Aller jusqu'au dossier de travail
cd CHEMIN/VERS/LE/DOSSIER/DE/TRAVAIL
# Construction de l'image
docker build --tag=XXX .
Pour ne pas parasiter l'image, il faut mettre le dockerfile dans un dossier seul
FROM rocker/binder
1- From : ici le projet rocker (orienté binder)Â
Rocker est un ensemble de dockers R avec plus ou moins de fonctionnalités. Ici, nous avons un Rstudio server et l'application Jupyter
## USER
USER root
## Update
RUN apt-get update
2- Changement de User et mise à jour des packagesÂ
ENV HOME /home
WORKDIR ${HOME}
3- Ajout d'une variable d'environnement et changement de dossier de travailÂ
## Install Conda
RUN apt-get install -y wget bzip2
RUN wget --quiet https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
RUN bash Miniconda3-latest-Linux-x86_64.sh -b
RUN rm Miniconda3-latest-Linux-x86_64.sh
ENV PATH /home/miniconda3/bin:$PATH
## Update
RUN conda update conda
RUN conda update --all
## Add chanel
RUN conda config --add channels conda-forge
RUN conda config --add channels bioconda
4- Installation de Conda
RUN conda install -c bioconda -c conda-forge snakemake
5- Installation de snakemake
RUN conda install -y fastqc bowtie2 htseq samtools
6- Installation des outils de notre workflow
RUN conda install -c hcc aspera-cli
7- Installation d'aspera
## Install Bioconductor package
RUN Rscript -e 'if (!requireNamespace("BiocManager", quietly = TRUE)) install.packages("BiocManager") ; BiocManager::install("DESeq2", version = "3.8")'
RUN Rscript -e 'if (!requireNamespace("BiocManager", quietly = TRUE)) install.packages("BiocManager") ; BiocManager::install("edgeR", version = "3.8")'
RUN Rscript -e 'if (!requireNamespace("BiocManager", quietly = TRUE)) install.packages("BiocManager") ; BiocManager::install("genefilter", version = "3.8")'
## Install CRAN package
RUN Rscript -e "install.packages('devtools', repos='https://cran.rstudio.com/', dependencies = TRUE)" \
&& rm -rf /tmp/downloaded_packages/ /tmp/*.rds
RUN Rscript -e "install.packages(c('shinydashboard','DT', 'FactoMineR', 'corrplot','plotly'), repos='https://cran.rstudio.com/', dependencies = TRUE)" \
&& rm -rf /tmp/downloaded_packages/ /tmp/*.rds
RUN Rscript -e "install.packages(c('shinyWidgets','colourpicker'), repos='https://cran.rstudio.com/', dependencies = TRUE)" \
&& rm -rf /tmp/downloaded_packages/ /tmp/*.rds
RUN Rscript -e "install.packages(c('shinycssloaders'), repos='https://cran.rstudio.com/', dependencies = TRUE)" \
&& rm -rf /tmp/downloaded_packages/ /tmp/*.rds
## Install Sarstools
RUN Rscript -e 'library(devtools) ; install_github("PF2-pasteur-fr/SARTools", build_vignettes=TRUE)'
8- Installation des packages R
# Install fastq dump
RUN wget --quiet "https://ftp-trace.ncbi.nlm.nih.gov/sra/sdk/2.9.2/sratoolkit.2.9.2-ubuntu64.tar.gz"
RUN tar -xzf sratoolkit.2.9.2-ubuntu64.tar.gz
RUN rm sratoolkit.2.9.2-ubuntu64.tar.gz
ENV PATH /home/sratoolkit.2.9.2-ubuntu64/bin:$PATH
9- Installation de fastq dump
USER rstudio
ENV HOME /home/rstudio
WORKDIR ${HOME}
10- Changement d'utilisateur et de dossier de travail
CMD jupyter notebook --ip 0.0.0.0 --NotebookApp.token='' --NotebookApp.password=''
11- Commande lancée lors du démarrage du dockerÂ
Pas obligatoire ici, mais simplifie grandement l'utilisation car élimine le mot de passeÂ
Et voilà !
Il ne reste plus qu'Ã construire l'image
docker buil --tag=fair_bioinfo .
Rappel
Il faut avoir un compte et avoir docker actif
Â
Se loguer
Id et mot de passeÂ
$ docker login
Authenticating with existing credentials...
Login Succeeded
1- Préparation du nom (ID_dockerhub/NOM_IMAGE)
docker tag fair_bioinfo tdenecker/fair_bioinfo
2- Envoyer l'imageÂ
docker push tdenecker/fair_bioinfo
2.46 KB
~ 8 Go
docker pull tdenecker/fair_bioinfo
L'image sera disponible localementÂ
$ docker version
Client: Docker Engine - Community
Version: 18.09.2
API version: 1.39
Go version: go1.10.8
Git commit: 6247962
Built: Sun Feb 10 04:12:31 2019
OS/Arch: windows/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 18.09.2
API version: 1.39 (minimum version 1.12)
Go version: go1.10.6
Git commit: 6247962
Built: Sun Feb 10 04:13:06 2019
OS/Arch: linux/amd64
Experimental: true
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
bgruening/galaxy-stable latest d2f45c76b85c 4 weeks ago 3.78GB
rocker/tidyverse latest 1379b4cd1dfa 7 weeks ago 1.86GB
tdenecker/fair_bioinfo latest a6c75264ae49 2 months ago 8.83GB
jupyter/datascience-notebook latest 18c805bb3afb 2 months ago 6.32GB
rocker/verse latest ca3c5d105cb2 3 months ago 2.9GB
rocker/binder latest a96cd7a02ed8 3 months ago 4.06GB
tdenecker/bpeaks_docker latest 796b1bc0fc2f 8 months ago 2.3GB
tdenecker/bpeaks_db latest 91c3c0c2f18e 8 months ago 236MB
hello-world latest f2a91732366c 16 months ago 1.85kB
$ docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://cloud.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/engine/userguide/
docker run --rm -d -p 8888:8888 --name fair_bioinfo -v CHEMIN/DE/TRAVAIL:/home/rstudio tdenecker/fair_bioinfo
docker run : lancement d'une image dockerÂ
-- rm : nettoyage des fichiers systèmes plus utilisés après la fin de l'utilisation du docker
- d : mode détaché (le terminal n'est pas bloqué)Â
- p 8888:8888 : partage des portsÂ
Â
En local : Dans le docker
docker run --rm -d -p 8888:8888 --name fair_bioinfo -v CHEMIN/DE/TRAVAIL:/home/rstudio tdenecker/fair_bioinfo
docker run : lancement d'une image dockerÂ
-- rm : nettoyage des fichiers système plus utilisé après la fin de l'utilisation du docker
- d : mode détaché (le terminal n'est pas bloqué)Â
- p 8888:8888 : partage des portsÂ
--name fair_bioinfo : nom donné au container
-v CHEMIN/DE/TRAVAIL:/home/rstudio : partage d'un volume (dossier). Ici, je veux que le contenu du dossier CHEMIN/DE/TRAVAIL se retrouve dans le dossier  /home/rstudio du docker
tdenecker/fair_bioinfo : nom de l'image
Exemple avec le projet Rocker
Ou encore bgruening/docker-galaxy-stable
(des images actives)Â
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
89ed873eb4da tdenecker/fair_bioinfo "/bin/sh -c 'jupyter…" 21 minutes ago Up 21 minutes 8787/tcp, 0.0.0.0:8888->8888/tcp fair_bioinfo
$ docker exec -it fair_bioinfo bash
rstudio@89ed873eb4da:~$
-it : en mode itératif (ne ferme pas tant qu'il n'a pas fini)
Ici, nous souhaitons rentrer dans le bash du docker
Â
Nous pouvons ici exécuter notre script d'analyse
Â
Pour quitter bash (et docker) :
rstudio@89ed873eb4da:~$ exit
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
89ed873eb4da tdenecker/fair_bioinfo "/bin/sh -c 'jupyter…" 30 minutes ago Up 30 minutes 8787/tcp, 0.0.0.0:8888->8888/tcp fair_bioinfo
$ docker stop fair_bioinfo
## ou
$ docker stop 89ed873eb4da
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
On stoppe soit par le nom du conteneur soit par son id (récupérés avec un docker ps par exemple)Â
Partage de données entre le docker et le "local"
Partage de volume : -v Local : Docker
$ ls
test.txt
Local : docker/test
$ ls
test.txt
Docker : tmp/
$ ls
docker run application
docker run -v docker/test:tmp/ application
Local
Docker
Les modifications en local sont visibles dans le docker
Les fichiers créés dans le dossier partagé sont disponibles en local
Important : Il faut des chemins absolus
Un container
docker rm -f ID_CONTAINER
Une image
docker rmi -f NOM_IMAGE
Puissance
Â
Sécurité
Â
Accessibilité et Simplicité
L'Institut Français de Bioinformatique (IFB) propose des ressources de calcul comme le cloud
Â
Machines virtuelles gratuites et paramétrables (puissance et stockage)
Â
Pour en profiter ?
Il suffit juste de se connecter avec une adresse académique ou de l'institut faisant partie du groupe (I2BC) Â
Il y a 3 étapes pour la création d'un compte sur le cloud IFB :
 https://biosphere.france-bioinformatique.fr/
En haut à droite : Se connecterÂ
Â
Puis vous verrez :Â
Identifiant habituel
Pour confirmer l'activation du compte et utiliser le cloud
Une clé publique est une technique de chiffrement qui évite les multiples mots de passeÂ
Â
Intérêt
Les machines communiquent entre elles, sans l'interaction humaine hormis la première fois
$ ssh-keygen -t rsa -C "FAIR_BIOINFO"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/tdenecker/.ssh/id_rsa):
/home/tdenecker/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/tdenecker/.ssh/id_rsa.
Your public key has been saved in /home/tdenecker/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:5QwtwncvoLl1j0qnEahb5lT3YyqqPOQzsz+kZPBf4Dc FAIR_BIOINFO
The key's randomart image is:
+---[RSA 2048]----+
| |
| . . |
| o = + |
| . .* O . |
| o .+.S * . |
| =.o+E+ = |
| =.+=oo.o = |
| .B*o..= o . |
| =O+oo.. |
+----[SHA256]-----+
Faire 3 fois Enter
 2 fichiers ont été créés dans ./ssh :
$ cat .ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC/GcB30kTCSEJkbdo7SpgW2qavEGmVJYy0JzdMmf8EOWz8++ShTb0S4uuuVMsr4uJmztKkTzcEbV6sNWL9dlPi1RtU6dtZ2OTcx1IrDCSY82MgrzPU3hbOlZT6FPcgUvk5M0oQJgAR12ngQRn6yOm6jYXXczPncrIYwcVkRuyepv+Bdbu8//OIAeyY1d469JDQeXEBLRoNp6UxaOfI10VHHeWQ7o3Rd09k0BM+GT7Hn21NGeA0BWYPmMD6YxORii1T5lzhwGnGqxY2CXFL87Y0Cg6V0lsyF/Ze60iBQc6ckNZJMBa8+YtCQquWIh4Fugi0oRvb444v1Usn6HIHsFDb FAIR_BIOINFO
Copier le contenu du fichier id_rsa.pub
Gratuit / utilisateur : 36 000 heures de temps CPU par an.
Â
Une VM allumée consomme 24h/24 7j/7Â
Â
Temps épuisé = plus de VM
Â
Conseil : faire l'analyse, récupérer les résultats et éteindre
Un grand choix de machines virtuelles pré-configurées est disponible (ici) - Onglet RAINbio
Déploiement avancé : paramétrage de la puissance et du stockage
Dans l'onglet myVM :Â
Attendre le vertÂ
2 Go de RAMÂ
20 Go de mémoire
(dans le dossier /mnt)
Récupérer l'adresse IP
Remplacer les XXX par votre adresseÂ
ssh ubuntu@XXX.XXX.XXX.XXX
Nous sommes dans le cloud
$ ssh ubuntu@134.214.213.90
Welcome to Ubuntu 18.04.1 LTS (GNU/Linux 4.15.0-39-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
System information as of Tue Mar 26 14:28:36 UTC 2019
System load: 0.08 Processes: 86
Usage of /: 13.0% of 19.21GB Users logged in: 0
Memory usage: 9% IP address for ens3: 10.10.2.28
Swap usage: 0%
Get cloud support with Ubuntu Advantage Cloud Guest:
http://www.ubuntu.com/business/services/cloud
0 packages can be updated.
0 updates are security updates.
ubuntu@machine72ac0a94-27a4-441d-99fc-7005ce8c02e3:~$
$sudo docker run --rm -d -p 8888:8888 --name fair_bioinfo -v ${PWD}:/home/rstudio tdenecker/fair_bioinfo
Unable to find image 'tdenecker/fair_bioinfo:latest' locally
latest: Pulling from tdenecker/fair_bioinfo
54f7e8ac135a: Pull complete
f3ecd3055765: Pull complete
9692014a7b7c: Pull complete
53960df9fec8: Pull complete
7131f89eba02: Pull complete
...
a9ea872cde40: Pull complete
d62a8a9d04d0: Pull complete
cddaad898ff9: Pull complete
c3d423a714fb: Pull complete
Digest: sha256:efc2a01095a0b79e62395fb5573a532b11eefe28341f97f53bab9b94dd40155a
Status: Downloaded newer image for tdenecker/fair_bioinfo:latest
aaf6cce43b366c248677ffb7dc00333c67d578547049d5f05ed265da86ec0428
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tdenecker/fair_bioinfo latest a6c75264ae49 2 months ago 8.83GB
$ git clone https://github.com/thomasdenecker/FAIR_Bioinfo
$ cd FAIR_Bioinfo
$ sudo docker stop fair_bioinfo
# Création du container
# 80 port ouvert sur le cloud IFB
$ sudo docker run --rm -d -p 80:8888 --name fair_bioinfo -v ${PWD}:/home/rstudio tdenecker/fair_bioinfo
# Exécution d'une application dans le container
$ sudo docker exec -it fair_bioinfo bash R -e "shiny::runApp('./R-code', port=4444)"
Dans un navigateur
XXX.XXX.XXX.XXX:80/rstudio/p/4444/
sudo docker exec -it fair_bioinfo bash ./VOTRE_SCRIPT.sh
Et il ne reste plus qu'Ã attendre...
Â
Attention !
Le projet final pèse 42 Go. Il faut donc une VM avec les bonnes dimensions Â
Â
Practical Computational Reproducibility in the Life Sciences - Björn Grüning et al (2018)Â
Savoir FAIRe
- Installation et utilisation de docker
- Accéder à une VM de l'IFB
- Créer et utiliser une image docker
Â
Réaliser le workflow complet dans une VM IFB en utilisant docker
Bon courage !
RDV sur Slack en cas de problème
Slack
CompBiol-I2BC chanel : fair_bioinfo
- thomas.denecker@gmail.com
- claire.toffano-nioche@u-psud.fr