Une question ? Appelez nous +33 1 41 32 53 60

Le Conteneur docker “Docker Containers” pour les débutants en DevOps

Partager
Partager sur facebook
Partager sur twitter
Partager sur linkedin

Qu’est-ce qu’un conteneur Docker ?

Un conteneur Docker est le format d’emballage et d’exécution le plus populaire pour de nombreuses applications. La plupart des applications que nous exécutons en tant que machines virtuelles sont désormais exécutées en tant que Docker container.

Pourquoi utiliser les conteneurs Docker?

Chaque application a ses propres besoins de dépendances. Une application Java nécessite une JDK installée, une application NodeJS nécessite la plateforme NodeJS installée et ainsi de suite.

Java, NodeJS et Python ont tous de nombreuses versions. Quelle version faut-il vraiment installer pour une application ? Que faire si nous avons besoin d’exécuter plusieurs applications qui nécessitent une version unique de Java ? Comment installer et exécuter plusieurs versions de java en même temps sur le même serveur ?

Prenons une simple application web NodeJS qui écoute sur le port TCP 80 et écrit quelques données dans un var/run/app.data local. Si nous essayions d’exécuter une autre instance de la même application NodeJS, elle se heurterait au port TCP et à la collision du système de fichiers.

Par conséquent, l’application Web se plaindra que le port TCP 80 et le fichier app.data sont déjà utilisés par une autre application. Et nous ne pouvons plus exécuter plus qu’une instance d’une même application sur la même machine.

C’est un problème commun rencontré par toutes les applications. L’idéal serait d’exécuter plusieurs instances de notre application sur le même serveur.

De plus, nous ne savons pas quelle version de NodeJs doit être installée pour notre application.

Comment pouvons-nous alors résoudre ces problèmes ?

Une solution consisterait à acheter un nouveau serveur et à exécuter une autre instance de la même application Web sur ce serveur. Et c’est ainsi que nous avons résolu ces problèmes dans le passé.

Cependant, serait-il mieux de packager sur une puce l’application et toutes ses dépendances installées dans un environnement bac à sable ?

Serait-il possible de créer un environnement à l’intérieur de notre machine de façon à pouvoir exécuter plusieurs instances de l’application web sans provoquer de collisions de ports TCP ou de systèmes de fichiers ?

La réponse à toutes ces questions concerne les machines virtuelles et les conteneurs.

Le développeur d’applications peut expédier l’application et toutes ses dépendances installées dans une machine virtuelle ou un conteneur. La machine ou le conteneur fournit un environnement ‘bac à sable’ pour exécuter l’application sur le serveur, ainsi, nous pourrions exécuter plusieurs instances de l’application sur le même serveur sans entrer en collision.

Qu’est-ce qu’une machine virtuelle ?

Une machine virtuelle est un ensemble de systèmes d’exploitation qui s’exécutent les uns sur les autres en utilisant un logiciel appelé hyperviseur. L’hyperviseur simule le matériel tel que la mémoire CPU pour la machine virtuelle.

Voici quelques exemples d’hyperviseurs : VmWare ESX, Vmware Player, Oracle Virtual Box et MS Hyper-V.

Nous pourrions exécuter de nombreuses instances des machines virtuelles sur une seule machine.

Exemple de machine virtuelle :

Savez-vous qu’il est possible d’exécuter Linux sur votre ordinateur Windows ?

Pour cela, il faudra :

Dans ce cas, la machine Windows est la machine physique, l’hyperviseur est « VirtualBox » et l’Ubuntu est la machine virtuelle.

Qu’est-ce qu’un conteneur ?

Un conteneur est une machine virtuelle sans noyau et sans libs/bins qui sont généralement livrées dans un système d’exploitation si efficacement.

En d’autres termes, un conteneur ne contient que l’application et les dépendances de l’application.

Nous avons donc l’infrastructure physique du matériel, le système d’exploitation hôte fonctionnant au-dessus de l’infrastructure physique, le moteur Docker qui est l’hyperviseur du conteneur dans ce cas, et finalement les conteneurs docker qui contiennent les applications et les dépendances.

Les conteneurs ne sont qu’un ensemble de processus.

Remarque : Vous ne pouvez pas exécuter un conteneur sur tous les systèmes d’exploitation. Parfois le système d’exploitation hôte manque des fichiers systèmes nécessaire pour héberger le conteneur.

Le conteneur docker est la version la plus populaire du conteneur, il est utilisé par près de 90 à 95% du marché, tandis que le reste du marché utilise les autres versions pour certains cas d’utilisation spécifiques tel que :

  • CoreOS RKT
  • Canonical LXC / LXD

Qu’est-ce qu’un moteur Docker?

Le moteur Docker est le moteur d’exécution Docker requis pour exécuter les conteneurs Docker.

Et ceci est quelque chose de similaire à l’environnement d’exécution Java JRE qui est requis pour exécuter toutes les applications Java

Qu’est-ce qu’un hub Docker?

Le Docker hub est un référentiel ou un registre en ligne qui sert à stocker des images du Docker. La plupart des images populaires sont déjà conteneurisées par Docker et disponibles en tant que conteneurs de Docker à télécharger et à exécuter.

Avantages du Docker

Le plus grand avantage du Docker est l’isolement.

Nous pouvons potentiellement empaqueter l’application et toutes ses dépendances et enregistrer le conteneur

Docker. Une fois c’est fait, n’importe quelle personne pourra télécharger l’image et l’exécuter sans avoir à installer l’une des dépendances.

Une fois nous disposons d’un conteneur Docker, nous pourrions l’exécuter n’importe où ; Sur un ordinateur, sur un serveur, dans un cloud public ou dans un cloud privé…

Cela fonctionnera très bien et se comportera de la même manière que le Docker initial.

Machines virtuelles VS conteneurs

Les machines virtuelles sont généralement volumineuses de l’ordre de giga-octets, ont un noyau, des bibliothèques, des bis et des utilitaires indésirables.

 Ils consomment plus de CPU et plus de mémoire vive. Ils prennent du temps pour démarrer.

En revanche, les conteneurs sont de petite taille, de l’ordre de mégaoctets, et n’ont pas de noyau de système d’exploitation. Ils ne contiennent que le minimum du binaire et des utilitaires de la bibliothèque. Ils consomment moins de CPU et de mémoire, et démarrent rapidement.

Etant donné que les conteneurs sont légers et rapides, nous pourrions potentiellement exécuter des milliers de conteneurs sur un seul serveur.

Article rédigé par : Mansour Issaoui