A la découverte de Docker

Introduction 

Docker est un outil permettant de “conteneuriser” des applications et leurs dépendances, dans des conteneurs qui s’exécutent de manière fiable et dans n’importe quel environnement ! Contrairement à la virtualisation, la conteneurisation est une forme plus légère qui s’appuie sur certaines parties de la machine hôte pour son fonctionnement.

Cette approche permet d’accroître la flexibilité, la fiabilité et la portabilité d’exécution d’une application, laquelle va pouvoir tourner de façon fiable et prévisible sur n’importe quel environnement : machine locale, un cloud privé ou public, une machine nue. Pour arriver à ses fins, Docker utilise Linux, son noyau et plusieurs de ses mécanismes. 

 

Un exemple pragmatique : machine virtuelle VS Conteneur Docker 

Pour mieux comprendre l’utilité de cet outil, nous allons définir ce qu’est un conteneur et pourquoi nous en avons besoin.

Par exemple, si nous vous voulions faire la démonstration à l’un de nos clients d’une application .NET que nous avons développé. Si ce client dispose d’une configuration matérielle et logiciel différente de la nôtre (MacOS,Linux…), il sera alors problématique de répliquer l’environnement d’exécution dont notre outil dépend pour fonctionner correctement. Une première façon de répliquer l’environnement d’exécution aurais été d’utiliser une machine virtuelle qui simule l’environnement d’exécution en utilisant le bon système d’exploitation, couplées avec les dépendances nécessaires à l’exécution de notre logiciel :  

Schéma conceptuel du fonctionnement d’une machine virtuelle 

Schéma conceptuel du fonctionnement d’une machine virtuelle

Du fait que chaque machine virtuelle utilise son propre système d’exploitation et ses propres dépendances, l’utilisation de cette solution présente plusieurs inconvénients intrinsèques : difficulté de mise en place, difficulté de maintenance et les performances ne sont pas optimales. La principale différence entre un conteneur Docker et une machine virtuelle est que le conteneur ne virtualise pas la couche matérielle, chaque conteneur est exécuté au travers d’un seul noyau Linux et cela améliore significativement les performances.  

 

 

Création d’un conteneur (et d’une image) 

Pour parvenir à la création d’un conteneur Docker, nous avons besoin d’une image Docker. Elle contient une version spécifique de l’application et ses dépendances associées. Une fois créer, elle permet d’alimenter un conteneur qui va être exécuter sur une plateforme cible. L’image Docker est construite via le fichier “Dockerfile”, qui décrit précisément comment construire cette l’image. Afin de maitriser Docker, il est nécessaire de bien comprendre le fonctionnement des commandes disponibles dans le Dockerfile : 

  • FROM : cette commande permet de référencer un modèle d’image existant depuis les registres disponibles de Docker. Elle permet notamment  
  • RUN : cette commande permet d’exécuter des commandes du Terminal nécessaires a la constituions de l’image 
  • ENV : cette commande permet de changer. Elle sert souvent à changer les ports d’exposition d’une application 
  • CMD : cette commande permet d’indiquer quelle commande il sera nécessaire d’exécuter au démarrage du conteneur 

 

Le fichier Dockerfile suivant permet de créer une image qui affiche simplement “Docker is easy” dans la console de sortie : 

Example de fichier Dockerfile

Exemple de fichier Dockerfile

 

Nous espérons que notre article vous a éclairé un peu plus sur ce qu’est Docker et comment cela fonctionne !

Avez-vous vu notre article sur les tendances de l’innovation ?