0

Qu’est-ce que Docker ? Explication sur les conteneurs Docker

Mis à jours 7 novembre 2022

Docker aide les développeurs à créer des conteneurs logiciels légers et portables. Ils permettent de simplifier le développement, les tests et le déploiement des applications.

Docker est une plate-forme logicielle qui permet de créer des applications basées sur des conteneurs. Ces derniers sont des environnements d’exécution petits et légers qui utilisent le noyau du système d’exploitation en partage. Par contre, ils s’exécutent, indépendamment les uns des autres.

Bien que le concept des conteneurs existe depuis un certain temps déjà, Docker est un projet open source lancé en 2013.

Il a contribué à populariser la technologie. Il a aussi stimuler la tendance à la conteneurisation et aux microservices dans le développement de logiciels, désormais connue sous le nom de développement cloud-native.

Quels sont les conteneurs ?

Quels sont les conteneurs ?

L’un des objectifs du développement logiciel moderne est de garder les applications sur le même hébergeur ou le même cluster.

Les applications doivent être isolées les unes des autres afin qu’elles ne nuisent pas indûment à leur fonctionnement ou à leur maintenance. Cela peut être difficile, à cause des packages, des bibliothèques et autres composants logiciels nécessaires à leur exécution.

Toutefois, il existe une solution qui consiste à utiliser des machines virtuelles. Ces dernières maintiennent les applications sur le même matériel mais entièrement séparées. De plus, elle réduisent au minimum les conflits entre les composants logiciels et la concurrence pour les ressources matérielles.

Cependant, les machines virtuelles sont encombrantes. Chacune nécessitant son propre système d’exploitation. Elle a donc généralement une taille en gigaoctets. Elle est, ainsi,  difficile à entretenir et à mettre à niveau.

Les conteneurs, en revanche, isolent les environnements d’exécution des applications. Toutefois, ils partagent le noyau du système d’exploitation sous-jacent.

Ils sont généralement:

  • Mesurés en Mégaoctets
  • Utilisent beaucoup moins de ressources que les ordinateurs virtuels
  • Démarrent presque immédiatement.
  • Ils peuvent être emballés de manière beaucoup plus dense sur le même matériel
  • Tournés en masse avec beaucoup moins d’effort et de frais.

Les conteneurs constituent un mécanisme extrêmement efficace et extrêmement granulaire. Ils permettent de combiner des composants logiciels dans les types d’applications et de piles de services nécessaires dans une entreprise moderne. De plus, ils gardent ces composants logiciels mis à jour et maintenus.

Piles de virtualisation et d'infrastructure de conteneur

Voyez comment s’empilent les piles de virtualisation et d’infrastructure de conteneur.

Qu’est-ce que Docker ?

Docker est un projet open source qui facilite la création de conteneurs et d’applications basées sur les conteneurs.

Construit à l’origine pour Linux, il fonctionne désormais aussi sur Windows et MacOS.

Pour comprendre le fonctionnement de Docker, nous allons voir certains des composants que vous utiliseriez pour créer des applications conteneurisées par Docker.

1. Dockerfile

Chaque conteneur Docker commence par un fichier Docker ou Dockerfile. Ce dernier est un fichier texte écrit dans une syntaxe facile à comprendre.

Il contient les instructions pour créer une image Docker. Un fichier Dockerfile spécifie les points suivants:

  1. Le système d’exploitation sous-jacent au conteneur,
  2. Les langages,
  3. Les variables d’environnement,
  4. Les emplacements de fichiers,
  5. Les ports réseau,
  6. Les autres composants dont il a besoin et, bien sûr, ce que le conteneur fera réellement une fois exécuté.

Paige Niedringhaus à ITNext a une bonne répartition de la syntaxe d’un fichier Docker ou Dockerfile.

2. Docker image

Une fois votre fichier Docker écrit, vous appelez l’utilitaire de constructeur pour créer une image basée sur ce fichier.

Le fichier Docker est l’ensemble d’instructions qui demande au constructeur comment créer l’image.

De l’autre coté, Docker image est un fichier portable contenant les spécifications pour les composants logiciels pour lesquels le conteneur sera exécuté et comment il sera exécuté.

Puisqu’un fichier Docker contiendra probablement des instructions sur comment récupérer certains logiciels dans des référentiels en ligne, vous devez veiller à spécifier explicitement les versions appropriées.

Sans cela, votre fichier pourrait créer des images incohérentes selon le moment où il est appelé. Mais une fois l’image créée, elle devient statique.

Codefresh offre un aperçu détaillé sur comment créer une image.

3. Docker run

L’utilitaire d’exécution de Docker (Docker run) est la commande qui lance un conteneur.

Chaque conteneur est une instance d’une image. Les conteneurs sont conçus pour être transitoires et temporaires. Toutefois, ils peuvent être arrêtés et redémarrés, ce qui lance le conteneur dans le même état que lors de son arrêt.

En outre, plusieurs instances de conteneur de la même image peuvent être exécutées simultanément. Cela se fait à condition que chaque conteneur porte un nom unique. La révision du code présente une grande diversité des différentes options pour la commande d’exécution, afin de vous donner une idée de son fonctionnement.

4. Docker Hub

Docker Hub

Bien que la création de conteneurs soit simple, vous n’imaginez pas que vous aurez besoin de créer chacune de vos images à partir de rien.

Docker Hub est un référentiel SaaS pour le partage et la gestion de conteneurs. Vous y trouverez des images officielles de Docker issues de projets open source, des fournisseurs de logiciels et des images non officielles du grand public.

Vous pouvez télécharger des images de conteneur contenant du code utile. Vous pouvez aussi télécharger vos propres images, les partager avec le public ou les rendre privées.

Vous pouvez également créer un registre Docker local si vous préférez. Il faut savoir que Docker Hub a eu des problèmes avec des images téléchargées avec des portes dérobées intégrées.)

5. Docker Engine

Docker Engine est le cœur de Docker. C’est la technologie client-serveur sous-jacente qui crée et exécute les conteneurs.

En général, lorsque quelqu’un dit Docker de manière générique et ne parle pas de la société ou du projet dans son ensemble, ils parlent de Docker Engine.

Deux versions différentes de Docker Engine sont proposées : Docker Engine Enterprise et Docker Engine Community.

Docker Community Edition

Docker a publié son édition Entreprise en 2017. Toutefois, elle a été renommée à Docker Community Edition et elle est restée open source et gratuite, sans perdre aucune fonctionnalité.

Par contre, Enterprise Edition, qui coûte 1 500 dollars par nœud et par an, a ajouté des fonctionnalités de gestion avancées. On trouve notamment des contrôles pour la gestion des grappes et des images, ainsi que la surveillance des vulnérabilités.

Comment Docker a conquis le monde des conteneurs ?

Docker a conquis le monde des conteneurs

L’idée qu’un processus donné puisse être exécuté avec un certain degré d’isolation par rapport au reste de son environnement d’exploitation existait depuis des décennies.

La technologie de conteneur Linux d’origine, LXC, est une méthode de virtualisation au niveau du système d’exploitation permettant d’exécuter plusieurs systèmes Linux isolés sur un seul hébergeur.

LXC a été rendu possible par deux fonctionnalités Linux :

  1. Les espaces de noms, qui réunissent un ensemble de ressources système et les présentent à un processus pour donner l’impression qu’ils sont dédiés à ce processus ; et
  2. Les groupes de contrôle, qui régissent l’isolation et l’utilisation des ressources système, telles que le processeur et la mémoire, pour un groupe de processus.

Les conteneurs séparent les applications des systèmes d’exploitation. Cela signifie que les utilisateurs peuvent disposer d’un système d’exploitation Linux propre et minimal. En plus d’exécuter tout le reste dans un ou plusieurs conteneurs isolés.

De plus, comme le système d’exploitation est extrait des conteneurs, vous pouvez déplacer un conteneur sur n’importe quel serveur Linux prenant en charge l’environnement d’exécution du conteneur.

Docker a introduit plusieurs modifications importantes dans LXC qui rendent les conteneurs plus portables et plus faciles à utiliser.

Avec les conteneurs Docker, vous pouvez déployer, répliquer, déplacer et sauvegarder une charge de travail encore plus rapidement et plus facilement qu’avec des machines virtuelles. Il apporte une flexibilité de type cloud à toute infrastructure capable de gérer des conteneurs.

Les outils d’image de conteneur de Docker constituaient également une avancée par rapport à LXC. Ils permettent aux développeurs:

  1. De créer des bibliothèques d’images,
  2. Composer des applications à partir de plusieurs images
  3. Lancer ces conteneurs et applications sur une infrastructure locale ou distante.

Docker Compose, Swarm et Kubernetes

Docker Compose, Swarm et Kubernetes

Docker facilite également la coordination des comportements entre les conteneurs. Il permet ainsi de créer des piles d’applications en attachant ensemble les conteneurs.

Docker Compose a été créé pour simplifier le processus de développement et de test d’applications multi-conteneurs.

C’est un outil de ligne de commande qui intègre un fichier de descripteur spécialement formaté pour assembler des applications à partir de plusieurs conteneurs. Ensuite, les exécuter ensemble sur un seul hébergeur.

Des versions plus avancées de ces comportements (appelée orchestration de conteneur) sont proposées par d’autres produits, tels que Docker Swarm et Kubernetes. Mais, Docker fournit les bases. Bien que Swarm soit né du projet Docker, Kubernetes est devenu la plate-forme d’orchestration de facto de Docker.

Les avantages de Docker

Les conteneurs Docker permettent de créer des applications d’entreprise dans tous les secteurs d’activité.

Elles sont plus faciles à assembler, à gérer et à déplacer que leurs homologues classiques.

L’isolation et la régulation

Les conteneurs Docker maintiennent les applications isolées non seulement les unes des autres, mais également du système sous-jacent.

Cela crée non seulement une pile logicielle plus propre, mais permet également de mieux déterminer la manière dont une application conteneurisée utilise les ressources du système (CPU, processeur graphique, mémoire, E/S, réseau, etc.). Cela facilite également la séparation des données et du code.

La portabilité

La portabilité des conteneurs Docker

Un conteneur Docker s’exécute sur n’importe quel ordinateur prenant en charge l’environnement d’exécution du conteneur.

Il n’est pas nécessaire de lier les applications au système d’exploitation de l’hébergeur, à l’environnement d’application et à l’environnement d’exploitation sous-jacent. Elles peuvent être maintenues propres et minimisées.

Par exemple, un conteneur MySQL pour Linux sera exécuté sur la plupart des systèmes Linux prenant en charge les conteneurs. Toutes les dépendances de l’application sont généralement livrées dans le même conteneur.

Les applications basées sur des conteneurs peuvent facilement être déplacées des systèmes sur site vers des environnements cloud ou des ordinateurs portables de développeurs aux serveurs. Cela est fait à condition que le système cible prenne en charge Docker et les outils tiers éventuellement utilisés, tels que Kubernetes.

Normalement, les images de conteneur Docker doivent être créées pour une plate-forme spécifique.

Un conteneur Windows, par exemple, ne fonctionnera pas sous Linux et inversement. Auparavant, l’un des moyens de contourner cette limitation consistait à lancer une machine virtuelle qui exécutait une instance du système d’exploitation requis et à exécuter le conteneur dans la machine virtuelle.

Cependant, l’équipe Docker a depuis mis au point une solution plus élégante, appelée manifestes.

Ces derniers permettent aux images de plusieurs systèmes d’exploitation d’être regroupées côte à côte dans la même image. Les manifestes sont toujours considérés comme expérimentaux. Mais, ils indiquent comment les conteneurs pourraient devenir une solution applicative multi-plateforme ainsi que multi-environnement.

La composabilité

La plupart des applications d’entreprise sont constituées de plusieurs composants distincts organisés en une pile :

  1. Un serveur Web,
  2. Une base de données et
  3. Un cache en mémoire.

Les conteneurs permettent de composer ces pièces dans une unité fonctionnelle avec des pièces facilement interchangeables. Chaque pièce est fournie par un conteneur différent et peut être maintenue, mise à jour, remplacée et modifiée indépendamment des autres.

Il s’agit essentiellement du modèle de microservices de conception d’applications. On fait référence ici aux

  1. Fonctionnalités des applications en services distincts et autonomes,
  2. Le modèle microservices constitue un antidote pour ralentir les processus de développement traditionnels et
  3. Les applications monolithiques inflexibles.

Des conteneurs légers et portables facilitent la création et la maintenance d’applications basées sur les microservices.

L’orchestration et la mise à l’échelle

Avec des conteneurs légers et un faible coût, il est possible d’en exécuter beaucoup plus sur un système donné.

Puis, les conteneurs peuvent également être utilisés pour la mise à l’échelle d’une application sur plusieurs grappes de systèmes. De plus, ils peuvent augmenter ou réduire les services afin de répondre aux pointes de la demande ou de préserver les ressources.

Les versions les plus professionnelles des outils de déploiement, de gestion et de mise à l’échelle des conteneurs sont fournies par le biais de projets tiers.

Parmi eux, il y a Kubernetes de Google.

C’est un système qui permet d’automatiser la manière dont les conteneurs sont déployés et mis à l’échelle. Il permet également la manière dont ils sont connectés, équilibrés et gérés.

Kubernetes permet également de créer et de réutiliser les applications multi-conteneurs ou « diagrammes de Helm », de sorte que des piles d’applications complexes puissent être créées et gérées à la demande.

Docker comprend également son propre système d’orchestration intégré. Il s’agit du mode Swarm, qui est toujours utilisé pour les cas moins exigeants.

Cela dit, Kubernetes est devenu le choix par défaut. En fait, Kubernetes est fourni avec Docker Enterprise Edition.

Les points faibles de Docker

Les points faibles de Docker

Les conteneurs résolvent un grand nombre de problèmes, mais ils ne sont pas une panacée.

Un de leurs points faibles est le design, alors que d’autres sont des sous-produits de leur design.

1. Les conteneurs Docker ne sont pas des machines virtuelles

L’erreur conceptuelle la plus courante avec les conteneurs est de les considérer comme des machines virtuelles.

Toutefois, les conteneurs et les machines virtuelles utilisant différents mécanismes d’isolation,. Ils présentent des avantages et des inconvénients nettement différents.

Les machines virtuelles fournissent un degré élevé d’isolation des processus. La raison est qu’elles s’exécutent dans leur propre instance d’un système d’exploitation.

Ce dernier ne doit pas nécessairement être le même que celui exécuté sur l’hébergeur. Une machine virtuelle Windows peut fonctionner sur un hyperviseur Linux et inversement.

Par contre, les conteneurs utilisent des parties contrôlées des ressources du système d’exploitation de l’hébergeur.

De nombreuses applications partagent le même noyau de système d’exploitation, de manière hautement gérée. Par conséquent, les applications conteneurisées ne sont pas aussi complètement isolées que celles dans les machines virtuelles. Toutefois, elles fournissent suffisamment d’isolement pour la grande majorité des charges de travail.

2. N’offrent pas une vitesse sans faille

La vitesse des conteneurs

Les conteneurs engendrent moins de frais que les machines virtuelles, mais leur impact sur les performances est toujours mesurable.

Si votre charge de travail a besoin d’une vitesse sans faille, un conteneur pourra peut-être vous en fournir presque (beaucoup plus qu’une machine virtuelle), mais vous allez tout de même payer des frais supplémentaires.

3. Les conteneurs Docker sont sans état et immuables

Les conteneurs démarrent et s’exécutent à partir d’une image décrivant leur contenu. Cette image est immuable par défaut. Une fois créée, elle ne change pas.

Par conséquent, les conteneurs ne sont pas persistants. Si vous démarrez une instance de conteneur, puis la supprimez et redémarrez, la nouvelle instance de conteneur ne comportera aucune des informations d’état associées à l’ancienne.

C’est une autre différence entre les conteneurs et les machines virtuelles. Une machine virtuelle a une persistance entre les sessions par défaut, car elle possède son propre système de fichiers.

Avec un conteneur, la seule chose qui persiste est l’image utilisée pour démarrer le logiciel qui s’exécute dans le conteneur. En fait, le seul moyen de la changer consiste à créer une nouvelle image de conteneur révisée.

Du côté positif, l’état des conteneurs rend le contenu des conteneurs plus cohérent et plus facile à composer de manière prévisible en piles d’applications. Cela oblige également les développeurs à séparer les données d’application du code de l’application.

Si vous souhaitez qu’un conteneur ait un type d’état persistant, vous devez le placer ailleurs. Cela peut être une base de données ou un volume de données autonome connecté au conteneur au moment du démarrage.

4. Les conteneurs Docker ne sont pas des microservices

Les conteneurs Docker ne sont pas des microservices

J’ai déjà parlé de la manière dont les conteneurs se prêtent à créer des applications microservices. Cela ne signifie pas que prendre une application donnée et la coller dans un conteneur créera automatiquement un microservice.

Une application de microservices doit être créée en fonction du modèle de design de microservice, qu’elle soit déployée dans des conteneurs ou non. Il est possible de conteneuriser une application dans le cadre du processus de conversion en microservice, mais ce n’est qu’une étape parmi d’autres.

Lorsque les machines virtuelles sont arrivées, elles ont permis de découpler les applications des systèmes sur lesquels elles étaient exécutées.

A ce sujet, les conteneurs Docker vont plus loin : non seulement ils sont plus légers, plus portables et plus rapides à tourner que les machines virtuelles, mais ils offrent également des fonctionnalités de mise à l’échelle, de composition et de gestion que les machines virtuelles n’en disposent pas.

Aina Strauss

À lire aussi

equilibreur charge gcp

Équilibreur de charge sur Google Cloud Platform

Table de matièreQuels sont les conteneurs ?Qu’est-ce que Docker ?1. Dockerfile2. Docker image3. Docker run4. …