La magie de LXD

Écrire un pipe­line en bio­in­for­ma­tique, c'est bien ! Le rendre por­table c'est encore mieux ! Les bio­in­for­ma­ti­ciens oublient sou­vent ce der­nier point et rare sont les pipe­lines qui marchent du pre­mier coup. À vrai dire les cir­cons­tances ne sont pas en leur faveur. Un pipe­line c'est plein de dépen­dances d'applications dans telle ou telle ver­sion, qu'il faut sou­vent com­pi­ler à la main. Sans oublier les dif­fé­rentes ver­sions de lan­gages comme Python 2 et Python 3. On aime­rait bien une fois le pipe­line construit, figer le sys­tème et le par­ta­ger avec les uti­li­sa­teurs, sans qu'ils aient à se sou­cier de l'installation. Eh bien c'est pos­sible avec les envi­ron­ne­ments vir­tuels ! Et j'entends déjà au loin le débat san­glant entre ceux qui uti­lisent Docker et les autres avec leurs machines vir­tuelles. Dans cet article, on n'utilisera ni l'un ni l'autre. Mais la der­nière née de Cano­ni­cal : LXD .

 

logo lxd
logo lxd

LXD ou LXC ?

LXC est un sys­tème de vir­tua­li­sa­tion comme Docker qui contrai­re­ment à une machine vir­tuelle, simule l’environnement d’exécution au lieu d'une machine. L'avantage c'est que c'est vrai­ment light ! Vous pou­vez lan­cer des mil­liers de machines contai­ners sans consom­mer toutes vos res­sources.
Le sou­ci avec LXC, c'est qu'il n'est pas aus­si facile à ins­tal­ler et mani­pu­ler que Docker. Suite à ça, les déve­lop­peurs de Cano­ni­cal ont déci­dé de faire encore plus simple en créant une sur­couche appe­lée LXD. Il s'agit d'un dae­mon expo­sant une API REST qui per­met de contrô­ler LXC. Et le client de cette API REST est la com­mande 

lxc

.
Atten­tion, pour évi­ter toutes confu­sions, les com­mandes LXC d'avant LXD sont de type 

lxc_create

. Le client console com­mu­ni­quant avec LXD est la com­mande

lxc

.

 

Installation de LXD 

En sup­po­sant que vous êtes sous Ubun­tu :


sudo apt install lxd
sudo lxd init

Les serveurs d'images

Les images sont les modèles sur les­quels vos contai­ners vont être crées. En terme tech­nique, un contai­ner est une ins­tance d'image. Ces images sont sto­ckées sur des ser­veurs dis­tants ou locaux. Pour mani­pu­ler la liste de ces ser­veurs, uti­li­ser la com­mande

lxc remote

. Par exemple pour lis­ter les ser­veurs dis­po­nibles :


lxc remote list

Vous devriez alors voir le ser­veur d'image https://​images​.linux​con​tai​ners​.org appe­lé tout sim­ple­ment "images". Il y ega­le­ment d'autres adresses de ser­veur, notam­ment celle de votre propre ser­veur. En effet vous pou­vez sto­cker vos propres images et les dis­tri­buer sur les machines de votre réseau.

Les images

Pour mani­pu­ler les images, uti­li­sez la com­mande

lxc image

. Par exemple, pour lis­ter les images dis­po­nibles sur le ser­veur images : vu pré­cé­dem­ment 


lxc image list images:

Repé­rer l'image de la der­nière ver­sion d'Ubuntu (Ubuntu/​Xenial)

Les containers

Vous avez repé­ré votre image ? Main­te­nant rien de plus simple. Pour lan­cer votre pre­mier contai­ner , tapez la com­mande sui­vante :


lxc launch images:ubuntu/xenial myfirst

Cette com­mande va télé­char­ger l'image et lan­cer votre contai­ner. Vous devriez voir votre contai­ner dans la liste des contai­ners actifs en tapant la com­mande sui­vante :


lxc list

Exécuter une commande depuis le container

Pour entrer dans votre contai­ner et explo­rer son arbo­res­cence, il suf­fit d’exécuter la com­mande bash se trou­vant dans le contai­ner. Tapez la com­mande sui­vante :


lxc exec myfirst /bin/bash

Voi­la, vous êtes dans votre contai­ner en root. Vous pou­vez ins­tal­ler des paquets ou tout détruire. Peu importe ce que vous faite, vous êtes iso­lé dans votre contai­ner.
Vous pou­vez par exemple écrire un pipe­line bio­in­for­ma­tique et ins­tal­ler toutes ses dépen­dances. Lorsque vous vou­lez exé­cu­ter votre pipe­line depuis l'hôte, il suf­fit de faire :


lxc exec myfirst /path/from/container/run/script

Faire un point de montage

Si vous avez besoin de par­ta­ger un dos­sier entre l'hôte et le contai­ner, il faut faire un point de mon­tage. La com­mande sui­vante, monte le dos­sier

/tmp/

de l'hôte vers le dos­sier /​host/​tmp du contai­ner.

lxc config device add myfirst myfirstDevice disk source=/tmp/ path=/host/tmp

Exporter votre container comme image

Une fois votre contai­ner prêt, vous pou­vez l'exporter en tant qu'image et le sau­ve­gar­der dans un fichier tar.gz. Tout d'abord publiez le contai­ner en tant qu'image myPi­pe­line. L'image est sau­ve­gar­dée avec toutes les autres images en local.


lxc publish myfirst --alias=myPipeline --force

Ensuite pour expor­ter une image dans un fichier, tapez :


lxc image export myPipeline

Vous vous retrou­vez alors avec un fichier de ce genre 0bf450c17cb7034077c83487e0.tar.gz. Vous pou­vez l'envoyer à votre copain, qui l'importera dans son propre LXD avec la com­mande sui­vante :


lxc image import 0bf450c17cb7034077c83487e0.tar.gz

Conclusion

Je pense qu'avec cet article, vous avez l'essentiel pour bien démar­rer avec LXD et créer des pipe­lines por­tables. N’hésitez pas à vous bala­der dans la com­mande

lxc

, c'est du même style que git. Je n'ai pas par­lé de tous les autres avan­tages de LXC. Mais rap­pe­lez-vous qu'il s'agit d'une API REST. Vous pou­vez donc gérer vos contai­ners et vos images sur plu­sieurs ser­veurs et clus­ters de cal­culs sans vous prendre la tête.
Sinon, il y a le pro­jet Pirus en cours de déve­lop­pe­ment qui vise à créer une appli­ca­tion pour lan­cer des pipe­lines LXC de façon simple à tra­vers une API REST et des web­so­ckets. C'est sous license AGPL et c'est ici https://​github​.com/​R​E​G​O​V​A​R​/​P​i​rus.

 

Mer­ci aux relec­teurs Kum­qua­tum, Aki­ra, Beba­tut



Pour continuer la lecture :


Commentaires

3 réponses à “La magie de LXD”

  1. Mer­ci pour cet article, je ne connais­sais pas du tout !

    Par contre je vais faire mon enqui­qui­neuse, mais quels sont les avantages/​différences par rap­port à Docker ? Est-ce qu'il y a un équi­valent à Docker Hub ?

    L'un des points forts de Docker me paraît être le fait qu'il y ait une com­mu­nau­té assez déve­lop­pée.

  2. Avatar de chdem

    Le but c'est d'enregistrer un contai­ner sous la forme d'un fichier…plus pra­tique à sau­ve­gar­der et sur­tout à par­ta­ger !

    Pour faire ce genre de chose, j'utilise Sin­gu­la­ri­ty (http://​sin​gu​la​ri​ty​.lbl​.gov/) ! C'est très simple, et il existe d'ailleurs un conver­tis­seur de fichiers Docker­file en images sin­gu­la­ri­ty !

    Com­bi­né à Next­Flow (qui gère nati­ve­ment Sin­gu­la­ri­ty et ses points de mon­tages), j'ai des images por­tables sur n'importe quel machine unix et un fra­me­work de work­flow qui peut les exé­cu­ter (et com­pa­tible SLURM) !

    Par­fait pour la tra­ça­bi­li­té ! 😉

  3. Dif­fé­rence entre LXD et Docker :
    — Docker :
    — Fort mer­chan­di­sing, le pro­jet est donc très connu
    — Phi­lo­so­phie 1 appli­ca­tion par contai­ner
    — Néces­saire d'apprendre à par­ler docker, pas for­ce­ment facile
    — LXD :
    — Moins de publi­ci­té, le pro­jet est moins connu
    — Machine com­plète dans un contai­ner, comme une machine vir­tuelle mais uti­lise moins de res­sources,
    il est même pos­sible de faire tour­ner docker ou LXD dans un contai­ner LXD
    — Admi­nis­tra­tion du contai­ner iden­tique à celle d'une machine linux, presque rien de nou­veau à apprendre pour les sysad­min habi­tué à admi­nis­trer des machines linux.

Laisser un commentaire