Qu’est-ce que Docker ?

Effectué

Avant de commencer notre présentation rapide des conteneurs Docker, voyons comment notre équipe développe et déploie des applications. Nous allons aussi aborder brièvement certains des défis auxquels nos équipes sont confrontées.

Le processus de développement et de gestion des applications dans votre entreprise implique généralement une ou plusieurs équipes. Il y a une équipe de développement qui crée les logiciels, et une équipe d’exploitation qui est responsable du déploiement de ces applications. L’équipe d’exploitation est également responsable de la gestion de l’infrastructure d’hébergement des applications.

Par exemple, supposons que nous développions un portail de suivi des commandes pour les différents points de vente de notre entreprise. Plusieurs environnements hébergent nos applications pendant le processus de développement et de publication des applications. Tout d’abord, l’équipe de développement développe et teste le logiciel dans un environnement de développement. À partir de là, le logiciel est ensuite déployé dans un environnement d’assurance qualité, puis dans un environnement de préproduction et enfin dans un environnement de production.

Nous devons prendre en compte plusieurs défis dans le scénario précédent :

  • Gestion des environnements d’hébergement

    Les différents environnements nécessitent tous une gestion des logiciels et du matériel. Nous devons faire en sorte que les logiciels installés et le matériel configuré dans chacun d’eux soient identiques. Nous devons également configurer des aspects comme l’accès réseau, le stockage des données et la sécurité pour chaque environnement, de façon cohérente et facilement reproductible.

  • Continuité de la livraison des logiciels

    Le déploiement d’applications dans nos environnements doit se faire de façon cohérente. Chaque package de déploiement doit inclure la totalité des packages système, des fichiers binaires, des bibliothèques, des fichiers de configuration et des autres éléments qui garantissent une application entièrement fonctionnelle. Nous devons également garantir que toutes ces dépendances correspondent aux versions et à l’architecture des logiciels.

  • Utilisation efficace du matériel

    Chaque application déployée doit s’exécuter de façon à être isolée des autres applications s’exécutant sur le même matériel. Nous avons l’intention d’exécuter plusieurs applications par serveur de façon à tirer le meilleur parti des ressources sans qu’elles se compromettent les unes avec les autres.

  • Portabilité des applications

    La portabilité des applications est essentielle pour plusieurs raisons. Un environnement d’hébergement peut être défaillant, ou il se peut que nous devions effectuer un scale-out de notre application. Dans les deux cas, le résultat potentiel est le redéploiement de nos logiciels dans un nouvel environnement. Nous voulons déplacer les logiciels d’un hôte à l’autre, même si l’infrastructure sous-jacente est différente. Un tel déplacement doit se produire aussi rapidement que possible, de façon à réduire les temps d’indisponibilité pour nos clients.

Avant d’examiner les fonctionnalités de Docker qui permettent de résoudre ces problèmes, nous allons présenter quelques concepts et examiner brièvement l’architecture de Docker.

Qu’est-ce qu’un conteneur ?

Un conteneur est un environnement faiblement isolé qui nous permet de générer et d’exécuter des packages de logiciels. Ces packages de logiciels incluent le code et toutes les dépendances permettant d’exécuter des applications de façon rapide et fiable dans n’importe quel environnement informatique. Nous appelons ces packages des images conteneur.

L’image conteneur devient l’unité que nous utilisons pour distribuer nos applications.

Qu’est-ce que la conteneurisation de logiciels ?

La conteneurisation de logiciels est une méthode de virtualisation de système d’exploitation utilisée pour déployer et exécuter des conteneurs sans utiliser de machine virtuelle. Les conteneurs peuvent s’exécuter sur du matériel physique, dans le cloud, sur des machines virtuelles et sur plusieurs systèmes d’exploitation.

Qu’est-ce que Docker ?

Docker est une plateforme de conteneurisation utilisée pour développer, livrer et exécuter des conteneurs. Docker n’utilise pas d’hyperviseur, et vous pouvez l’exécuter sur votre station de travail ou votre portable si vous développez et que vous testez des applications. La version pour station de travail de Docker prend en charge Linux, Windows et macOS. Concernant les systèmes de production, Docker est disponible pour les environnements de serveur, notamment de nombreuses variantes de Linux, et Microsoft Windows Server 2016 et ultérieur. De nombreux clouds, notamment Azure, prennent en charge Docker.

Architecture de Docker

La plateforme Docker est constituée de plusieurs composants que nous utilisons pour générer, exécuter et gérer nos applications conteneurisées.

Moteur Docker

Le moteur Docker est constitué de plusieurs composants configurés selon une implémentation client-serveur, dans laquelle le client et le serveur s’exécutent simultanément sur le même hôte. Le client communique avec le serveur en utilisant une API REST, qui permet au client de communiquer également avec une instance de serveur distante.

Diagramme montrant une vue d’ensemble de l’architecture de Docker.

Des flèches montrent la communication entre le serveur Docker, les conteneurs exécutés et les images conteneur stockées. Ces flèches indiquent comment le serveur Docker charge les images conteneur stockées et gère les conteneurs exécutés.

Le client Docker

Il existe deux alternatives pour le client Docker : une application en ligne de commande nommée docker ou une application à interface graphique utilisateur (GUI) appelée Docker Desktop. L’interface CLI et Docker Desktop interagissent tous deux avec un serveur Docker. Les commandes docker de l’interface CLI ou Docker Desktop utilisent l’API REST de Docker pour envoyer des instructions à un serveur local ou distant, et nous les utilisons comme interface principale pour gérer nos conteneurs.

Le serveur Docker

Le serveur Docker est un démon nommé dockerd. Le démon dockerd répond aux requêtes du client via l’API REST de Docker et peut interagir avec d’autres démons. Le serveur Docker est également responsable du suivi du cycle de vie de nos conteneurs.

Objets Docker

Vous allez créer et configurer plusieurs objets pour prendre en charge les déploiements de vos conteneurs. Il s’agit de réseaux, de volumes de stockage, de plug-ins et autres objets de service. Nous ne couvrirons pas tous ces objets ici, mais il est bon de garder à l’esprit que ces objets sont des éléments que nous pouvons créer et déployer en fonction des besoins.

Docker Hub

Docker Hub est un registre de conteneurs Docker SaaS (Software-as-a-Service). Les registres Docker sont des référentiels que nous utilisons pour stocker et distribuer les images conteneur que nous créons. Docker Hub est le registre public par défaut utilisé par Docker pour la gestion des images.

Gardez à l’esprit que vous pouvez créer et utiliser un registre Docker privé ou utiliser une des nombreuses options de fournisseur cloud disponibles. Par exemple, vous pouvez utiliser Azure Container Registry pour stocker les images conteneur à utiliser dans plusieurs services Azure compatibles avec les conteneurs.