Dans cette première partie, nous allons faire connaissance avec les conteneurs ainsi qu'avec Docker. Mais avant cela, nous allons revenir sur quelques notions importantes :
comprendre la notion de machine virtuelle ;
comprendre la notion de conteneur ;
pourquoi utiliser des conteneurs ?
Historiquement, quand nous avions besoin de serveurs, nous achetions des serveurs physiques avec une quantité définie de CPU, de mémoire RAM ou de stockage sur le disque.
Or, on avait souvent besoin d'avoir de la puissance supplémentaire pour des périodes de forte charge (fête de Noël, par exemple). Ainsi, vous deviez acheter plus de serveurs pour répondre aux pics d'utilisation. Une solution a alors été créée : la machine virtuelle.
Une machine virtuelle ?
Lorsque vous utilisez une machine virtuelle (VM), vous faites ce qu’on appelle de la virtualisation lourde. En effet, vous recréez un système complet dans le système hôte, pour qu’il ait ses propres ressources.
L'isolation avec le système hôte est donc totale ; cependant, cela apporte plusieurs contraintes :
❌une machine virtuelle prend du temps à démarrer ;
❌une machine virtuelle réserve les ressources (CPU/RAM) sur le système hôte.
Mais cette solution présente aussi de nombreux avantages :
✅une machine virtuelle est totalement isolée du système hôte ;
✅les ressources attribuées à une machine virtuelle lui sont totalement réservées ;
✅vous pouvez installer différents OS (Linux, Windows, BSD, etc.).
Mais il arrive très souvent que l'application qu'elle fait tourner ne consomme pas l'ensemble des ressources disponibles sur la machine virtuelle. Alors est né un nouveau système de virtualisation plus léger : les conteneurs.
Un conteneur ?
Un conteneur Linux est un processus ou un ensemble de processus isolés du reste du système, tout en étant légers.
Le conteneur permet de faire de la virtualisation légère, c'est-à-dire qu'il ne virtualise pas les ressources, il ne crée qu'une isolation des processus. Le conteneur partage donc les ressources avec le système hôte.
Les conteneurs, au sens d'OpenVZ et LXC, apportent une isolation importante des processus systèmes ; cependant, les ressources CPU, RAM et disque sont totalement partagées avec l'ensemble du système. Les conteneurs partagent entre eux le kernel Linux ; ainsi, il n'est pas possible de faire fonctionner un système Windows ou BSD dans celui-ci.
Voyons ensemble quelques avantages des conteneurs.
Ne réservez que les ressources nécessaires
Une autre différence importante avec les machines virtuelles est qu'un conteneur ne réserve pas la quantité de CPU, RAM et disque attribuée auprès du système hôte. Ainsi, nous pouvons allouer 16 Go de RAM à notre conteneur, mais si celui-ci n'utilise que 2 Go, le reste ne sera pas verrouillé.
Démarrez rapidement vos conteneurs
Les conteneurs n'ayant pas besoin d'une virtualisation des ressources mais seulement d'une isolation, ils peuvent démarrer beaucoup plus rapidement et plus fréquemment qu'une machine virtuelle sur nos serveurs hôtes, et ainsi réduire encore un peu les frais de l'infrastructure.
Donnez plus d'autonomie à vos développeurs
En dehors de la question pécuniaire, il y a aussi la possibilité de faire tourner des conteneurs sur le poste des développeurs, et ainsi de réduire les différences entre la "sainte" production, et l'environnement local sur le poste des développeurs.
Pourquoi utiliser des conteneurs ?
Les conteneurs permettent de réduire les coûts, d'augmenter la densité de l'infrastructure, tout en améliorant le cycle de déploiement.
Les conteneurs étant capables de démarrer très rapidement, ils sont souvent utilisés en production pour ajouter des ressources disponibles, et ainsi répondre à des besoins de mise à l'échelle ou de scalabilité. Mais ils répondent aussi à des besoins de préproduction ; en étant légers et rapides au démarrage, il permettent de créer des environnements dynamiques et ainsi de répondre à des besoins métier.
En résumé
Vous connaissez maintenant la différence entre conteneur et machine virtuelle ; vous avez ainsi pu voir les différences entre la virtualisation lourde et la virtualisation légère.
Un conteneur doit être léger, il ne faut pas ajouter de contenu superflu dans celui-ci afin de le démarrer rapidement, mais il apporte une isolation moindre. À contrario, les machines virtuelles offrent une très bonne isolation, mais elle sont globalement plus lentes et bien plus lourdes.
Dans le prochain chapitre, nous allons découvrir une solution de conteneur qui s'est imposée comme leader des technologies de conteneurisation, et que vous allez apprendre à utiliser dans ce cours : Docker !