Présentation Docker
Qu'est ce que c'est ?
Docker est un projet open-source qui permet d'automatiser le déploiement d'applications dans ce qu'on appelle des conteneurs.
Voici le fonctionnement simplifié :
On choisit une
image de conteneur sur laquelle se baser. Elle contient tous les éléments initiaux permettant la mise en place d'un environnement fonctionnel (
OS, librairies systèmes, utilitaires, paramètres de configuration de base). Elles sont mises à disposition de tous par des membres de la communauté, des développeurs et peuvent également être créées en partant de 0 ou encore en faisant un assemblage de plusieurs images.
On écrit une liste d'instructions à réaliser et une liste de paramètres à appliquer sur cette image : le Dockerfile.
On construit notre conteneur en appliquant notre dockerfile à notre image : on obtient un Container
Les containers
Une appli, un serveur
Initialement, un serveur physique était dédié à un système d'exploitation et à une seule application. Cette méthode apportait peu de flexibilité et d'évolutivité, si une application devenait obsolète, il fallait espérer que le matériel en place pourrait conserver une utilité pour une autre application, si une application évoluait, il fallait augmenter les capacités du serveur, ce qui était possible jusqu'à un certain point.
Cela entraînait des complications à mesure que le nombre d'applications augmentait :
Encombrement physique
Consommation électrique supérieure
Coût de plus en plus élevé
Augmentation du risque de panne
Maintenance plus complexe
Un serveur, des applis
L'apparition du concept des machines virtuelle permet de résoudre ces problèmes. On utilise désormais un serveur plus puissant, mais permettant de regrouper les serveurs physiques en les transformant en machines virtuelles :
Un serveur physique permet désormais d'héberger plusieurs applications
On installe le système d'exploitation que l'on souhaite pour chaque machine virtuelle.
Les ressources physiques sont optimisées et peuvent être adaptées pour chaque machine virtuelle (pour chaque application)
Limitation de la maintenance et du risque de panne car moins d'équipements physiques
La gestion de chaque machine virtuelle devient centralisée
Il devient possible de ré-allouer de la puissance informatique entre les applications en temps réel.
Mise en place d'instantanés permettant des restaurations de fichiers ou même du système entier de façon rapide et garantie.
L'évolutivité (stockage, puissance de calcul) est simple à planifier et à mettre en place.
Ce système n'est néanmoins pas parfait. Les machines virtuelles offrent de nouvelles possibilités mais ces nouvelles possibilités engendrent de nouvelles problématiques :
Le déploiement à la volée et sur un temps donné est complexe car le déploiement d'une VM est plus complexe à automatiser et plus lent à déployer
Surdéploiement des systèmes d'exploitation, chaque machine virtuelle ayant son système d'exploitation intégral
Toujours beaucoup de maintenance (logicielle) de ces systèmes.
C'est la que l'utilisation des conteneurs fait son apparition. Le principe est toujours de pouvoir utiliser un serveur pour plusieurs applications, mais avec l'idée de mieux optimiser leur déploiement :
Le déploiement est pré-configuré, donc plus rapide et répétable
au lieu d'avoir un système d'exploitation par machine virtuelle, il n'y a plus qu'un “moteur de conteneurisation” qui partage ses ressources avec les conteneurs. Cela permet certains avantages
Réduction de l'impact sur le stockage
Optimisation des ressources
Ce sont des applications qui sont déployées et non plus l'équivalent d'un serveur complet.
L'assignation des ressources matérielle en fonction du besoin est une fonctionnalité des conteneurs, ce qui permet la scalabilité à la volée de chaque conteneur.
Le système d'exploitation n'étant plus reproduit dans son intégralité, les performances d'un conteneurs sont meilleures.
Les conteneurs s'occupent des applications mais toute la partie stockage est déportée. Cette indépendance permet de garantir l'intégrité des données même en cas de problème applicatif.
Les orchestrateurs
Docker est un outil permettant de construire et de lancer des conteneurs.
Il nous faut désormais un outil permettant de gérer nos conteneurs sur un ensemble de serveurs : un orchestrateur.
Plusieurs solutions majeures existent : Docker Swarm et Kubernetes
Ces outils permettent la gestion et le déploiement de conteneurs sur plusieurs serveurs. Son rôle est de s'assurer que les ressources mises à disposition des conteneurs soient bien réparties et de vérifier que la liaison entre chaque serveur physique est bien fonctionnelle. Cela garantit que chaque conteneur soit fonctionnel et disponible en permanence.
Docker by Geco-iT
L'infrastructure de Geco-iT cumule les couches d'une infrastructure virtualisée et d'une infrastructure conteneurisée.
Cela permet de profiter des avantages de la virtualisation classique (optimisation des ressources, évolutivité, sauvegarde…) et d'y ajouter les fonctionnalités des conteneurs (partage de ressources, optimisation de déploiement, scalabilité…)