L'écosystème Docker : une introduction aux composants communs

De Get Docs
Aller à :navigation, rechercher

Introduction

La conteneurisation est le processus de distribution et de déploiement d'applications de manière portable et prévisible. Pour ce faire, il regroupe les composants et leurs dépendances dans des environnements de processus standardisés, isolés et légers appelés conteneurs.  De nombreuses organisations s'intéressent désormais à la conception d'applications et de services qui peuvent être facilement déployés sur des systèmes distribués, permettant au système d'évoluer facilement et de survivre aux défaillances des machines et des applications.  Docker, une plate-forme de conteneurisation développée pour simplifier et normaliser le déploiement dans divers environnements, a largement contribué à stimuler l'adoption de ce style de conception et de gestion de services.  Une grande quantité de logiciels ont été créés pour s'appuyer sur cet écosystème de gestion distribuée des conteneurs.

Docker et conteneurisation

Docker est le logiciel de conteneurisation le plus couramment utilisé aujourd'hui. Alors qu'il existe d'autres systèmes de conteneurisation, Docker simplifie la création et la gestion des conteneurs et s'intègre à de nombreux projets open source.

Dans cette image, vous pouvez commencer à voir (dans une vue simplifiée) comment les conteneurs sont liés au système hôte. Les conteneurs isolent les applications individuelles et utilisent les ressources du système d'exploitation qui ont été abstraites par Docker. Dans la vue éclatée à droite, nous pouvons voir que les conteneurs peuvent être construits par "superposition", avec plusieurs conteneurs partageant des couches sous-jacentes, ce qui réduit l'utilisation des ressources.

Les principaux avantages de Docker sont :

  • Utilisation légère des ressources : au lieu de virtualiser tout un système d'exploitation, les conteneurs s'isolent au niveau du processus et utilisent le noyau de l'hôte.
  • Portabilité : toutes les dépendances d'une application conteneurisée sont regroupées à l'intérieur du conteneur, ce qui lui permet de s'exécuter sur n'importe quel hôte Docker.
  • Prévisibilité : l'hôte ne se soucie pas de ce qui s'exécute à l'intérieur du conteneur et le conteneur ne se soucie pas de l'hôte sur lequel il s'exécute.  Les interfaces sont standardisées et les interactions sont prévisibles.

En règle générale, lors de la conception d'une application ou d'un service pour utiliser Docker, il est préférable de répartir les fonctionnalités dans des conteneurs individuels, une décision de conception connue sous le nom d'architecture orientée services. Cela vous donne la possibilité de mettre à l'échelle ou de mettre à jour facilement les composants indépendamment à l'avenir. Cette flexibilité est l'une des nombreuses raisons pour lesquelles les gens s'intéressent à Docker pour le développement et le déploiement.

Pour en savoir plus sur la conteneurisation des applications avec Docker, cliquez ici.

Découverte de services et magasins de configuration globale

La découverte de services est l'un des composants d'une stratégie globale visant à rendre les déploiements de conteneurs évolutifs et flexibles. La découverte de service est utilisée pour que les conteneurs puissent découvrir l'environnement dans lequel ils ont été introduits sans intervention de l'administrateur. Ils peuvent trouver des informations de connexion pour les composants avec lesquels ils doivent interagir et ils peuvent s'enregistrer pour que d'autres outils sachent qu'ils sont disponibles. Ces outils fonctionnent également généralement comme des magasins de configuration distribués à l'échelle mondiale où des paramètres de configuration arbitraires peuvent être définis pour les services fonctionnant dans votre infrastructure.

Dans l'image ci-dessus, vous pouvez voir un exemple de flux dans lequel une application enregistre ses informations de connexion auprès du système de service de découverte. Une fois enregistrées, d'autres applications peuvent interroger le service de découverte pour savoir comment se connecter à l'application.

Ces outils sont souvent implémentés sous forme de simples magasins clé-valeur répartis entre les hôtes dans un environnement en cluster. Généralement, les magasins clé-valeur fournissent une API HTTP pour accéder aux valeurs et les définir. Certains incluent des mesures de sécurité supplémentaires telles que des entrées cryptées ou des mécanismes de contrôle d'accès. Les magasins distribués sont essentiels pour gérer les hôtes Docker en cluster en plus de leur fonction principale de fournir des détails d'auto-configuration pour les nouveaux conteneurs.

Certaines des responsabilités des magasins de découverte de services sont :

  • Permettre aux applications d'obtenir les données nécessaires pour se connecter aux services dont elles dépendent.
  • Permettre aux services d'enregistrer leurs informations de connexion dans le but ci-dessus.
  • Fournir un emplacement globalement accessible pour stocker des données de configuration arbitraires.
  • Stockage des informations sur les membres du cluster selon les besoins de tout logiciel de gestion de cluster.

Certains outils de découverte de services populaires et projets connexes sont :

  • etcd : découverte de service / magasin de clé-valeur distribué à l'échelle mondiale
  • consul : découverte de service / magasin clé-valeur distribué à l'échelle mondiale
  • zookeeper : découverte de services / magasin de valeurs-clés distribué à l'échelle mondiale
  • crypt : projet pour chiffrer les entrées etcd
  • confd : surveille le magasin de valeurs-clés pour les modifications et déclenche la reconfiguration des services avec de nouvelles valeurs

Pour en savoir plus sur la découverte de services avec Docker, consultez notre guide ici.

Outils de mise en réseau

Les applications conteneurisées se prêtent à une conception orientée services qui encourage la décomposition des fonctionnalités en composants discrets. Bien que cela facilite la gestion et la mise à l'échelle, cela nécessite encore plus d'assurance concernant la fonctionnalité et la fiabilité de la mise en réseau entre les composants. Docker lui-même fournit les structures de mise en réseau de base nécessaires à la communication de conteneur à conteneur et de conteneur à hôte.

Les capacités de mise en réseau natives de Docker fournissent deux mécanismes pour connecter les conteneurs ensemble. La première consiste à exposer les ports d'un conteneur et éventuellement à les mapper sur le système hôte pour le routage externe. Vous pouvez sélectionner le port hôte à mapper ou autoriser Docker à choisir au hasard un port élevé et inutilisé. Il s'agit d'un moyen générique de fournir un accès à un conteneur qui fonctionne bien dans la plupart des cas.

L'autre méthode consiste à permettre aux conteneurs de communiquer en utilisant les « liens » Docker. Un conteneur lié obtiendra des informations de connexion sur son homologue, lui permettant de se connecter automatiquement s'il est configuré pour prêter attention à ces variables. Cela permet un contact entre conteneurs sur un même hôte sans avoir à connaître au préalable le port ou l'adresse où se situera le service.

Ce niveau de mise en réseau de base convient aux environnements à hôte unique ou étroitement gérés. Cependant, l'écosystème Docker a produit une variété de projets qui se concentrent sur l'expansion des fonctionnalités de mise en réseau disponibles pour les opérateurs et les développeurs. Certaines fonctionnalités de mise en réseau supplémentaires disponibles via des outils supplémentaires incluent :

  • Mise en réseau superposée pour simplifier et unifier l'espace d'adressage sur plusieurs hôtes.
  • Réseaux privés virtuels adaptés pour fournir une communication sécurisée entre divers composants.
  • Affectation de sous-réseaux par hôte ou par application
  • Établir des interfaces macvlan pour la communication
  • Configuration d'adresses MAC personnalisées, de passerelles, etc. pour vos conteneurs

Certains projets impliqués dans l'amélioration de la mise en réseau Docker sont :

  • flannel : réseau superposé fournissant à chaque hôte un sous-réseau distinct.
  • weave : réseau superposé représentant tous les conteneurs sur un seul réseau.
  • pipework : boîte à outils réseau avancée pour des configurations réseau arbitrairement avancées.

Pour un examen plus approfondi des différentes approches de mise en réseau avec Docker, cliquez ici.

Planification, gestion des clusters et orchestration

Un autre composant nécessaire lors de la création d'un environnement de conteneurs en cluster est un planificateur. Les planificateurs sont responsables du démarrage des conteneurs sur les hôtes disponibles.

L'image ci-dessus illustre une décision de planification simplifiée. La demande est transmise via une API ou un outil de gestion. À partir de là, le planificateur évalue les conditions de la demande et l'état des hôtes disponibles. Dans cet exemple, il extrait des informations sur la densité des conteneurs d'un magasin de données/service de découverte distribué (comme indiqué ci-dessus) afin de pouvoir placer la nouvelle application sur l'hôte le moins occupé.

Ce processus de sélection de l'hôte est l'une des principales responsabilités du planificateur. Habituellement, il a des fonctions qui automatisent ce processus avec l'administrateur ayant la possibilité de spécifier certaines contraintes. Certaines de ces contraintes peuvent être :

  • Planifiez le conteneur sur le même hôte qu'un autre conteneur donné.
  • Assurez-vous que le conteneur n'est pas placé sur le même hôte qu'un autre conteneur donné.
  • Placez le conteneur sur un hôte avec une étiquette ou des métadonnées correspondantes.
  • Placez le conteneur sur l'hôte le moins occupé.
  • Exécutez le conteneur sur chaque hôte du cluster.

Le planificateur est responsable du chargement des conteneurs sur les hôtes concernés et du démarrage, de l'arrêt et de la gestion du cycle de vie du processus.

Étant donné que le planificateur doit interagir avec chaque hôte du groupe, les fonctions de gestion de cluster sont également généralement incluses. Ceux-ci permettent au planificateur d'obtenir des informations sur les membres et d'effectuer des tâches d'administration. L'orchestration dans ce contexte fait généralement référence à la combinaison de la planification des conteneurs et de la gestion des hôtes.

Certains projets populaires qui fonctionnent comme des planificateurs et des outils de gestion de flotte sont :

  • fleet : ordonnanceur et outil de gestion de cluster.
  • marathon : planificateur et outil de gestion des services.
  • Swarm : planificateur et outil de gestion des services.
  • mesos : service d'abstraction d'hôte qui consolide les ressources de l'hôte pour le planificateur.
  • kubernetes : planificateur avancé capable de gérer des groupes de conteneurs.
  • compose : outil d'orchestration de conteneurs pour créer des groupes de conteneurs.

Pour en savoir plus sur la planification de base, le regroupement de conteneurs et le logiciel de gestion de clusters pour Docker, cliquez ici.

Conclusion

À présent, vous devriez être familiarisé avec la fonction générale de la plupart des logiciels associés à l'écosystème Docker. Docker lui-même, ainsi que tous les projets de support, fournissent une stratégie de gestion, de conception et de déploiement de logiciels qui permet une évolutivité massive. En comprenant et en exploitant les capacités de divers projets, vous pouvez exécuter des déploiements d'applications complexes suffisamment flexibles pour tenir compte des exigences de fonctionnement variables.