Pourquoi utiliser Docker et les conteneurs

Un livre publié en 1981, intitulé  Nailing Jelly to a Tree , décrit les logiciels comme «nébuleux et difficiles à maîtriser». C'était vrai en 1981, et ce n'est pas moins vrai depuis près de quatre décennies. Les logiciels, qu'il s'agisse d'une application que vous avez achetée ou d'une application que vous avez créée vous-même, restent difficiles à déployer, à gérer et à exécuter.

Les conteneurs Docker permettent de maîtriser les logiciels. Vous pouvez utiliser Docker pour encapsuler une application de telle sorte que ses problèmes de déploiement et d'exécution - comment l'exposer sur un réseau, comment gérer son utilisation du stockage et de la mémoire et des E / S, comment contrôler les autorisations d'accès - sont traités en dehors de l'application elle-même, et d'une manière cohérente dans toutes les applications «conteneurisées». Vous pouvez exécuter votre conteneur Docker sur n'importe quel hôte compatible avec le système d'exploitation (Linux ou Windows) sur lequel le runtime Docker est installé.

Docker offre de nombreux autres avantages en plus de cette pratique d'encapsulation, d'isolation, de portabilité et de contrôle. Les conteneurs Docker sont petits (mégaoctets). Ils commencent instantanément. Ils ont leurs propres mécanismes intégrés pour la gestion des versions et la réutilisation des composants. Ils peuvent être facilement partagés via le Docker Hub public ou le référentiel privé.

Dans cet article, j'explorerai comment les conteneurs Docker facilitent à la fois la création et le déploiement de logiciels: les problèmes que les conteneurs résolvent, comment ils les résolvent, quand ils sont la bonne réponse au problème et quand ils ne le sont pas.

Avant les conteneurs Docker

Depuis de nombreuses années maintenant, les logiciels d'entreprise ont généralement été déployés soit sur «bare metal» (c.-à-d. Installé sur un système d'exploitation qui a un contrôle total sur le matériel sous-jacent) ou dans une machine virtuelle (c.-à-d. Installé sur un système d'exploitation qui partage le matériel sous-jacent. avec d'autres systèmes d'exploitation «invités»). Naturellement, l'installation sur du métal nu rendait le logiciel extrêmement difficile à déplacer et à mettre à jour, deux contraintes qui empêchaient le service informatique de répondre de manière agile aux changements des besoins de l'entreprise.

Puis la virtualisation est arrivée. Les plates-formes de virtualisation (également appelées «hyperviseurs») permettaient à plusieurs machines virtuelles de partager un seul système physique, chaque machine virtuelle émulant le comportement d'un système entier, avec son propre système d'exploitation, stockage et E / S, de manière isolée . Le service informatique pourrait désormais répondre plus efficacement aux changements dans les besoins de l'entreprise, car les machines virtuelles pouvaient être clonées, copiées, migrées et réactivées pour répondre à la demande ou conserver les ressources.

Les machines virtuelles ont également permis de réduire les coûts, car davantage de machines virtuelles pouvaient être regroupées sur moins de machines physiques. Les systèmes hérités exécutant des applications plus anciennes pourraient être transformés en VM et physiquement mis hors service pour économiser encore plus d'argent.

Mais les machines virtuelles ont toujours leur part de problèmes. Les machines virtuelles sont volumineuses (gigaoctets), chacune contenant un système d'exploitation complet. Seul un nombre limité d'applications virtualisées peut être consolidé sur un seul système. Le provisionnement d'une machine virtuelle prend encore un certain temps. Enfin, la portabilité des machines virtuelles est limitée. Au bout d'un certain temps, les machines virtuelles ne sont plus en mesure de fournir le type de vitesse, d'agilité et d'économies exigées par les entreprises à évolution rapide.

Avantages du conteneur Docker

Les conteneurs fonctionnent un peu comme des machines virtuelles, mais de manière beaucoup plus spécifique et granulaire. Ils isolent une seule application et ses dépendances (toutes les bibliothèques de logiciels externes dont l'application a besoin pour s'exécuter) à la fois du système d'exploitation sous-jacent et des autres conteneurs. Toutes les applications conteneurisées partagent un seul système d'exploitation commun (Linux ou Windows), mais elles sont compartimentées les unes des autres et du système dans son ensemble.

Les avantages des conteneurs Docker se manifestent à de nombreux endroits. Voici quelques-uns des principaux avantages de Docker et des conteneurs:

Docker permet une utilisation plus efficace des ressources système

Les instances d'applications conteneurisées utilisent beaucoup moins de mémoire que les machines virtuelles, elles démarrent et s'arrêtent plus rapidement, et elles peuvent être empaquetées de manière beaucoup plus dense sur leur matériel hôte. Tout cela revient à réduire les dépenses informatiques.

Les économies de coûts varient en fonction des applications en jeu et de leur consommation de ressources, mais les conteneurs sont invariablement plus efficaces que les VM. Il est également possible d'économiser sur les coûts des licences logicielles, car vous avez besoin de beaucoup moins d'instances de système d'exploitation pour exécuter les mêmes charges de travail.

Docker permet des cycles de livraison de logiciels plus rapides

Les logiciels d'entreprise doivent réagir rapidement aux conditions changeantes. Cela signifie à la fois une mise à l'échelle facile pour répondre à la demande et une mise à jour facile pour ajouter de nouvelles fonctionnalités selon les besoins de l'entreprise. 

Les conteneurs Docker facilitent la mise en production rapide de nouvelles versions de logiciels, dotées de nouvelles fonctionnalités professionnelles, et permettent de revenir rapidement à une version précédente si nécessaire. Ils facilitent également la mise en œuvre de stratégies telles que les déploiements bleu / vert.

Docker permet la portabilité des applications

L'endroit où vous exécutez une application d'entreprise est important - derrière le pare-feu, dans le but de garder les choses à proximité et en sécurité; ou dans un cloud public, pour un accès public facile et une grande élasticité des ressources. Étant donné que les conteneurs Docker encapsulent tout ce dont une application a besoin pour s'exécuter (et uniquement ces éléments), ils permettent aux applications d'être facilement naviguées entre les environnements. Tout hôte sur lequel le runtime Docker est installé, qu'il s'agisse d'un ordinateur portable de développeur ou d'une instance de cloud public, peut exécuter un conteneur Docker.

Docker brille pour l'architecture de microservices

Légers, portables et autonomes, les conteneurs Docker facilitent la création de logiciels sur des lignes avant-gardistes, de sorte que vous n'essayez pas de résoudre les problèmes de demain avec les méthodes de développement d'hier.

L'un des conteneurs de modèles logiciels facilitent les microservices, dans lesquels les applications sont constituées de nombreux composants faiblement couplés. En décomposant les applications «monolithiques» traditionnelles en services séparés, les microservices permettent aux différentes parties d'une application métier d'être mises à l'échelle, modifiées et entretenues séparément, par des équipes distinctes et selon des échéanciers distincts, si cela répond aux besoins du affaires. 

Les conteneurs ne sont pas obligés de mettre en œuvre des microservices, mais ils sont parfaitement adaptés à l'approche microservices et aux processus de développement agiles en général.

Problèmes que les conteneurs Docker ne résolvent pas

La première chose à garder à l'esprit à propos des conteneurs est le même conseil qui s'applique à toute technologie logicielle: ce n'est pas une solution miracle. Les conteneurs Docker ne peuvent à eux seuls résoudre tous les problèmes. En particulier:

Docker ne résoudra pas vos problèmes de sécurité

Un logiciel dans un conteneur peut être plus sécurisé par défaut qu'un logiciel exécuté sur du métal nu, mais c'est comme dire qu'une maison avec ses portes verrouillées est plus sûre qu'une maison avec ses portes déverrouillées. Il ne dit rien sur l'état du quartier, la présence visible d'objets de valeur tentant pour un voleur, la routine des gens qui y vivent, etc. Les conteneurs peuvent ajouter une couche de sécurité à une application, mais uniquement dans le cadre d'un programme général de sécurisation d'une application en contexte.

Docker ne transforme pas les applications comme par magie en microservices

Si vous conteneurisez une application existante, cela peut réduire sa consommation de ressources et faciliter son déploiement. Mais cela ne change pas automatiquement la conception de l'application, ni la façon dont elle interagit avec d'autres applications. Ces avantages ne viennent que du temps et des efforts du développeur, et pas seulement du mandat de tout déplacer dans des conteneurs.

Mettez une application monolithique ou de style SOA à l'ancienne dans un conteneur, et vous vous retrouvez avec une ancienne application dans un conteneur. Cela ne le rend pas plus utile à votre travail; le cas échéant, cela pourrait le rendre moins utile. 

Docker n'est pas un substitut aux machines virtuelles

Un mythe persistant des conteneurs est qu'ils rendent les VM obsolètes. De nombreuses applications qui ont utilisé pour exécuter dans une machine virtuelle peuvent être déplacés dans un récipient, mais cela ne signifie pas que tous d'entre eux peut ou doit. Si vous travaillez dans un secteur soumis à de fortes exigences réglementaires, par exemple, vous ne pourrez peut-être pas échanger des conteneurs contre des VM, car les VM offrent plus d'isolation que les conteneurs.

Le cas des conteneurs Docker

Le travail de développement d'entreprise est connu pour être limité et lent à réagir au changement. Les développeurs d'entreprise s'irritent constamment contre de telles contraintes - les limites qui leur sont imposées par l'informatique, les exigences qui leur sont faites par l'entreprise dans son ensemble. Docker et les conteneurs offrent aux développeurs davantage de liberté dont ils ont besoin, tout en offrant des moyens de créer des applications professionnelles qui répondent rapidement à l'évolution des conditions commerciales.