Docker

De l’origine de la virtualisation à Docker

Du serveur physique, aux machines virtuelles, aux conteneurs

À l’origine, une application était installée directement sur un serveur que nous achetions et qui apportait une quantité définie et finie de puissance de calcul via CPU, de mémoire via la RAM et de quantité de stockage via le disque dur. Lorsque le besoin se faisait ressentir d’avoir plus de ressources (période de forte activité), il fallait faire évoluer la configuration du serveur, ou bien en acquérir d’autres.

Pour répondre à ce besoin ponctuel, les machines virtuelles ont été inventées. La machine virtuelle a ses avantages mais à également ses inconvénients. Il s’agit de virtualisation lourde. C’est à dire qu’on recréé un système d’exploitation complet au sein du système hôte, afin qu’il bénéficie de ses propres ressources en puisant dans celles du système hôte. Si l’isolation du système est donc totale, la VM réserve tout de même des ressources du système hôte sans forcément les utiliser.

Un système de virtualisation plus léger a donc été inventé : les conteneurs. Un conteneur représente un processus (ou plusieurs) qui est totalement isolé du reste du système. Le conteneur ne virtualise pas les ressources, mais uniquement le processus. Le conteneur partage les ressources avec le système hôte et ne se réserve pas de ressources inutilement. C’est là tout l’avantage du conteneur, c’est qu’il n’y a pas de système d’exploitation intermédiaire comme avec les machines virtuelles.

Autres avantages des conteneurs

Les conteneurs permettent également de changer rapidement la configuration d’un environnement sans devoir réinstaller tout un système avec les quelques changements à apporter. Les coûts de migration et déploiement sont donc moindres.

Les conteneurs sont très rapides à démarrer et facilitent l’intégration continue, l’usage d’un processus pour répondre à un besoin ponctuel, des tests de mises à l’échelle.

Un conteneur peut être exécuté sur n’importe quelle machine que celle-ci fonctionne sous Windows / Linux / Mac OS.

Docker

Origine et présentation

Créé pour répondre aux besoin de la société DotCloud, Docker a été déployé en projet open source par la société Docker Inc en mars 2013.

Selon la logique qu’apporte Docker, un conteneur ne doit faire tourner qu’un seul processus. Dans le cas d’une stack LAMP (Linux, Apache, MySQL, PHP), nous aurons alors 4 conteneurs. Chacun correspondant à l’une des 4 applications dans la version souhaitée. A l’inverse d’autres système de conteneurisation comme LXC ou OpenVZ qui feraient tourner tous les processus dans un seul conteneur.

Docker va donc permettre de créer un environnement de travail local. Ainsi, qu’importe le système d’exploitation de la machine de chaque collaborateur, l’application fonctionnera partout sans aucun problème de compatibilité, grâce aux conteneurs.

Conteneurs stateless / stateful, et immutabilité

Ces deux termes définissent deux catégories de conteneurs.

Le terme stateful est utilisé pour un conteneur qui stocke un état, c’est à dire que quand on éteint puis qu’on rallume le conteneur, on le retrouve dans le même état. C’est le cas par exemple du conteneur MySQL. À l’inverse, le terme stateless désigne un conteneur dont l’état n’est pas conservé quand on l’éteint et qu’on le rallume.

Un conteneur est immuable. C’est à dire qu’il ne doit pas stocker de données devant être conservées car celles-ci seront perdues. S’il est souhaité de mettre par exemple une base de données dans un conteneur, il faudra créer un volume pour que le conteneur puisse stocker et conserver des données.

Le Docker Hub

Le site Docker Hub propose une très grande quantité d’image en tout genre prête à l’emploi.

Docker Compose

Présentation

Docker Compose est un outil écrit en Python qui permet de décrire dans un fichier YAML les conteneurs que l’on souhaite faire fonctionner entre eux. Chaque conteneur pouvant être basé sur sa propre image.

Consulter l’article Docker Compose.

La console Docker

Docker fonctionne exclusivement en lignes de commandes. Sur Windows 10 il faut soit utiliser PowerShell soit installer la console Docker dédiée, tandis qu’avec Linux et Mac OS on utilise directement le terminal natif du système d’exploitation.

Consulter l’article Les commandes Docker.