Docker : la technologie de conteneurisation d’applications à découvrir

Docker, cette plateforme ouverte qui permet de créer des conteneurs logiciels, a le vent en poupe ces derniers temps. Depuis sa création en 2013 par Solomon Hykes (un ingénieur français), l’adoption est grandissante. Les géants du marché ne s’y trompent pas. Google a abandonné son mécanisme de conteneurisation « maison » au profit de Docker il y a quelques mois. IBM a annoncé un partenariat en décembre dernier. Et Microsoft intégrera Docker de manière native dans Windows Server 2016.

 

Comment fonctionne Docker ?

Pour créer Docker, Solomon Hykes s’est appuyé sur LXC (pour Linux Containers), une technologie Linux existant depuis 2008. Cette dernière exploite les capacités offertes par le noyau Linux permettant d’isoler des processus (namespaces : pid, mnt, net…), et de contrôler les ressources (CPU, RAM, disque) qui leur sont allouées (cgroup – control group file system). Docker représente ici une couche d’abstraction et de simplification sur LXC afin de proposer des fonctionnalités haut niveau d’isolation/virtualisation. On y retrouve la portabilité des conteneurs, le versioning, le partage, la réutilisation, etc.

 

Qu’est-ce qu’un conteneur ?

  • Un système de fichier isolé : chaque conteneur a accès à un système de fichier isolé du reste de l’OS, et des autres conteneurs
  • Des processus isolés : un conteneur a l’impression d’être « seul sur l’OS », ses processus sont isolés et il ne voit pas les autres processus du système ;
  • Une couche réseau isolée : le conteneur possède ses propres interfaces réseaux, isolées de celles des autres conteneurs. Il n’expose au travers de ses interfaces que les ports nécessaires afin d’interagir avec l’application conteneurisée.

 

En quoi est-ce différent de la virtualisation ?

Une machine virtuelle a pour habitude d’embarquer un OS complet, avec ce que cela implique de difficultés – et parfois de lourdeur ! – dans son administration et sa mise à jour. Ce qui n’est pas le cas du conteneur. Ce dernier se base sur les fonctionnalités et ressources (CPU, RAM…) mises à disposition par son hôte (la machine virtuelle) et ne redéfinit que ce qui lui est nécessaire : filesystem, librairies particulières…

 

schema-Docker

Quels sont les avantages ?

En isolant les applications les unes des autres au sein de conteneurs, Docker permet :

  • de les rendre plus facilement distribuables. Tous les binaires et fichiers de configuration nécessaires au bon fonctionnement de l’application sont « packagés » ensemble. Il n’y a plus de risques de perdre une librairie ou d’utiliser une version d’un utilitaire qui ne correspondrait pas à celle requise par l’application ;
  • d’avoir des environnements totalement identiques. Du poste du développeur au serveur de production, les mêmes conteneurs s’exécutent ;
  • de mieux sécuriser ses plateformes. Les conteneurs exposent des ports. Ces ports, seulement si on les ouvre ; permettent d’accéder aux conteneurs. Ces derniers sont aussi accessibles au travers du filesystem de leur hôte.
  • de tester facilement, en redémarrant à la demande des conteneurs contenant des bases de données de test par exemple.

Il ne faut pas non plus oublier que Docker s’appuie sur une importante communauté qui publie régulièrement des images (templates de conteneurs) sur https://registry.hub.docker.com/, et des outils d’aide à la gestion de conteneurs (déploiement, monitoring).

 

Un exemple de mise en application rapide

Voici une démo de la création d’un conteneur Docker qui fera tourner un serveur web minimaliste, basé sur Nginx et inspiré de https://registry.hub.docker.com/_/nginx/

1. Création d’un Dockerfile (script décrivant l’image) :
– on indique sur quelle image déjà existante on s’appuie : FROM nginx ;
– on recopie le contenu du répertoire static-html-directory, se trouvant au même endroit que le Dockerfile décrit ici sur le filesystem du conteneur (/usr/share/nginx/html).

ICT Experts - Docker - Illustration - Demo1[1]

2. Construction de l’image sur la base du Dockerfile nouvellement créé. Pour cela, on lance la commande docker build en indiquant le nom donné à l’image : docker build -t article/nginx

ICT Experts - Docker - Illustration - Demo2[1]

3. Lancement du nouveau conteneur grâce à la simple commande docker run -d -p 8080:80 article/nginx

ICT Experts - Docker - Illustration - Demo3[1]
NB : -d indique de lancer le conteneur en mode ‘daemon’, tandis que -p mappe le port 80 du conteneur sur le 8080 de l’hôte (cf. étapes suivantes).
On obtient en retour l’ID attribué à ce nouveau conteneur.

ICT Experts - Docker - Illustration - Demo4[1]

4. Vérification du lancement du conteneur grâce à la commande docker ps.

5. Le contenu (des pages HTML par exemple) qui se trouvait initialement dans le répertoire static-html-directory se trouve à présent servi sur le port 8080 de la machine hôte et est ainsi accessible à cette adresse http://localhost:8080.

 

Laisser un commentaire

Optimization WordPress Plugins & Solutions by W3 EDGE