La solution DOCKER¶
Docker permet d’embarquer dans ce qu’on appelle un container (conteneur) une application et toutes les librairies nécessaires à son exécution. Un container possède son propre système de fichiers si bien que l’installation de différents composants dans le container ne vient pas polluer votre système de fichiers principal. Les processus lancés dans le container s’exécutent dans un environnement isolé.
Quelle différence y a-t-il entre un container et une machine virtuelle ?¶
Une machine virtuelle lance une instance d’un système d’exploitation dans lequel on pourra installer l’application que l’on souhaite exécuter. En d’autres termes pour installer et exécuter une application en l’isolant de notre système principal, on doit au préalable installer tout un système d’exploitation. Si on souhaite tester plusieurs versions d’une même application, on devra donc installer autant d’instances d’un OS que de versions de l’application que l’on souhaite conserver. Ceci peut rapidement conduire à une consommation disque et mémoire excessive.
La technologie Docker s’appuie sur le noyau Linux pour l’exécution des container (notons qu’à l’heure actuelle un tel noyau est disponible sur Mac OS et aussi Windows !!). Docker est donc restreint à l’exécution de services ou d’applications Linux mais ne nécessite pas un OS entièrement Linux pour fonctionner. Tous les container utilisent le même noyau Linux pour s’exécuter, mais chaque container se voit attribuer une partie du système de fichiers et une partie de l’espace utilisateur pour l’exécution de ses processus. Un container est donc beaucoup plus léger qu’une machine virtuelle et moins consommateur de ressources. A la différence d’une machine virtuelle, on ne peut donc pas exécuter des OS différents sur un sytème hôte. On peut cependant travailler avec des distributions Linux différentes par container tant que ces dernières sont toutes compatibles avec la version du noyau Linux installé sur le système hôte. Chaque container contient au minimum l’ensemble des librairies et exécutables nécessaires à la gestion du système de fichiers et à l’exécution des processus.
Les autres avantages de Docker¶
Par défaut, lorsque l’on stoppe l’exécution d’un container, toutes les modifications effectuées dans le container sont perdues. A la prochaine exécution, on se retrouve avec le container dans son état intial. Ceci permet par exemple de s’assurer que même si les étudiants ont modifié certains fichiers de configuration et que ceci entraîne un disfonctionnement général, il suffira de quitter et de relancer le container pour retrouver la configuration initiale. Il est cependant possible de conserver les modifications effectuées dans un container comme nous l’expliquerons par la suite.
Un autre avantage de Docker est la possibilité de télécharger via le portail Docker Hub. des container mis à disposition par la communauté Docker. Cela permet de rapidement tester une application ou un service sans avoir besoin de construire soi-même le container.
L’inconvénient de Docker¶
Au niveau de l’utilisation de Docker afin de fournir aux étudiants un environnement de travail uniforme, l’inconvénient majeur provient du fait que la commande Docker doit être lancée avec les droits de l’administrateur système. Ceci peut poser des soucis de sécurité car il est possible via la commande Docker de monter sur un répertoire du container, un répertoire du système hôte. Un étudiant pourrait alors très bien monter le répertoire /etc
sur un répertoire de son container et ainsi accéder au fichier passwd
pour supprimer des utilisateurs ou voire même changer le mot de passe de l’administrateur. Une façon de contourner cela est de développer un script ne donnant accès qu’à un ensemble restreint des options de Docker et d’utiliser la commande sudo
pour donner aux étudiants la permission d’exécuter ce script. Ils pourront donc ainsi lancer un container avec uniquement les options que vous aurez autorisées dans le script.