Qu'est-ce que Docker ?
Docker est une plateforme open source qui permet de créer, de déployer et de gérer des applications conteneurisées
S'abonner au bulletin d'information IBM
Fond noir et bleu
Qu'est-ce que Docker ?

Docker est une plateforme open source qui permet aux développeurs de créer, déployer, exécuter, mettre à jour et gérer des conteneurs, des composants exécutables standardisés qui combinent le code source d'une application avec les bibliothèques de système d'exploitation et les dépendances nécessaires pour exécuter ce code dans n'importe quel environnement.

Les conteneurs simplifient le développement et la distribution d'applications distribuées. Ils connaissent un engouement croissant alors que les organisations se tournent vers le développement cloud natif et les environnements multiclouds hybrides. Les développeurs peuvent créer des conteneurs sans Docker, en utilisant directement les fonctionnalités intégrées à Linux et à d'autres systèmes d'exploitation. Mais Docker accélère et simplifie la conteneurisation et la rend plus sûre. Au moment de la rédaction de cet article, plus de 13 millions de développeurs utilisent la plateforme Docker (lien externe à ibm.com).

Docker fait également référence à Docker, Inc. (lien externe à ibm.com), la société qui vend la version commerciale de Docker, et au projet open source Docker, auquel Docker, Inc et de nombreuses autres organisations et utilisateurs contribuent.

Fonctionnement des conteneurs et explication de leur succès

Lesconteneurs sont rendus possibles par les fonctionnalités d'isolement et de virtualisation des processus intégrées au noyau Linux. Ces fonctionnalités, telles que les groupes de contrôle (Cgroups) pour l'allocation des ressources entre les processus et les espaces de noms pour la limitation de l'accès ou la visibilité sur d'autres ressources ou zones du système, permettent à plusieurs composants d'application de partager les ressources d'une seule instance du système d'exploitation hôte de la même manière qu'un hyperviseur permet à plusieurs machines virtuelles (VM) de partager l'unité centrale, la mémoire et d'autres ressources d'un seul serveur matériel. 

Par conséquent, la technologie de conteneur offre toutes les fonctionnalités et tous les avantages des machines virtuelles, y compris l'isolement des applications, l'évolutivité rentable et la disponibilité, ainsi que d'autres avantages importants :

  • Conteneurs plus légers : contrairement aux machines virtuelles, les conteneurs ne portent pas le contenu d'une instance de système d'exploitation et d'un hyperviseur entiers. Ils ne comprennent que les processus et les dépendances du système d'exploitation nécessaires à l'exécution du code. Les conteneurs sont mesurés en mégaoctets (alors que les VM le sont en gigaoctets), ils utilisent plus efficacement la capacité matérielle et démarrent plus rapidement. 

  • Productivité accrue des développeurs : les applications conteneurisées peuvent être écrites une fois et exécutées partout. Comparés aux machines virtuelles, les conteneurs sont plus rapides et plus faciles à déployer, à allouer et à redémarrer. Ils constituent donc une solution idéale pour les pipelines d'intégration continue et de distribution continue (CI/CD) et conviennent mieux aux équipes de développement qui adoptent les pratiques Agile et DevOps.

  • Efficacité accrue des ressources : les conteneurs permettent aux développeurs d'exécuter plusieurs fois plus de copies d'une application sur le même matériel qu'avec des VM, ce qui peut réduire les dépenses cloud.

Les entreprises qui utilisent des conteneurs soulignent d'autres avantages, notamment la meilleure qualité des applications et une meilleure réactivité aux changements du marché. Pour en savoir plus sur cet outil interactif : 

Télécharger le rapport complet : Containers in the enterprise (PDF, 1,4 Mo)
Pourquoi utiliser Docker ?

Docker est tellement plébiscité aujourd'hui que « Docker » et « conteneurs » sont utilisés indifféremment. Mais les premières technologies liées aux conteneurs étaient disponibles depuis des années, voire des décennies (lien externe à IBM), avant que Docker ne devienne public en 2013. 

Plus particulièrement, en 2008, LinuXContainers (LXC) a été implémenté dans le noyau Linux, permettant ainsi la virtualisation d'une seule instance de Linux. Bien que LXC soit encore utilisé aujourd'hui, de nouvelles technologies utilisant le noyau Linux sont disponibles. Ubuntu, un système d'exploitation Linux open source moderne, fournit également cette fonctionnalité. 

Docker permet aux développeurs d'accéder à ces fonctionnalités de conteneurisation natives à l'aide de commandes simples et de les automatiser via une interface de programme d'application (API) qui leur permet de gagner du temps. Comparé à LXC, Docker présente les avantages suivants :

  • Portabilité améliorée et transparente : alors que les conteneurs LXC font souvent référence à des configurations spécifiques à une machine, les conteneurs Docker s'exécutent sans modification sur n'importe quel ordinateur de bureau, centre de données et environnement cloud. 
  • Mises à jour toujours plus légères et granulaires : avec LXC, plusieurs processus peuvent être combinés dans un seul conteneur. Ainsi, vous pouvez générer une application qui peut continuer à s'exécuter, alors qu'une de ses parties est arrêtée pour une mise à jour ou une réparation. 

     

  • Création automatique des conteneurs : Docker peut générer automatiquement un conteneur basé sur le code source de l'application. 

     

  • Gestion des versions : Docker peut assurer le suivi des versions d'une image de conteneur, revenir aux versions précédentes et déterminer qui a créé une version et comment elle a été créée. Il peut même télécharger uniquement les deltas entre une version existante et une nouvelle version. 

     

  • Réutilisation des conteneurs : les conteneurs existants peuvent être utilisés comme images de base, essentiellement comme des modèles pour la création de conteneurs. 

     

  • Bibliothèques de conteneurs partagés : les développeurs peuvent accéder à un registre open source contenant des milliers de conteneurs auxquels contribuent les utilisateurs. 

Aujourd'hui, la conteneurisation Docker fonctionne également avec Microsoft Windows et Apple MacOS. Les développeurs peuvent exécuter des conteneurs Docker sur n'importe quel système d'exploitation et dans le cloud de la plupart des principaux fournisseurs de cloud. Amazon Web Services (AWS), Microsoft Azure et IBM Cloud, notamment, offrent des services spécifiques pour aider les développeurs à créer, déployer et exécuter des applications conteneurisées avec Docker.

Outils et terminologie Docker

Voici quelques-uns des outils, termes et technologies que les développeurs rencontrent lorsqu'ils utilisent Docker : 

DockerFile

Chaque conteneur Docker commence par un simple fichier texte contenant des instructions sur la façon de créer l'image du conteneur Docker. DockerFile  automatise le processus de création d'image Docker. Il s'agit essentiellement d'une liste d'instructions d'interface de ligne de commande (CLI) que le moteur Docker exécute pour assembler l'image. La liste des commandes Docker est énorme, mais normalisée : les opérations Docker fonctionnent de la même manière, quels que soient le contenu, l'infrastructure ou les autres variables d'environnement. 

Images Docker

Les images Docker contiennent le code source exécutable de l'application, ainsi que tous les outils, bibliothèques et dépendances dont le code de l'application a besoin pour fonctionner en tant que conteneur. Lorsque vous exécutez une image Docker, elle devient une instance (ou plusieurs instances) du conteneur. 

Il est possible de créer complètement une image Docker, mais la plupart des développeurs la récupèrent dans des référentiels communs. Il est possible de créer plusieurs images Docker à partir d'une seule image de base, qui partageront les points communs de leur pile. 

Les images Docker sont constituées de couches, chaque couche correspondant à une version de l'image. Chaque fois qu'un développeur apporte des modifications à l'image, une nouvelle couche supérieure est créée, et cette couche remplace la couche supérieure précédente en tant que version actuelle de l'image. Les couches précédentes sont sauvegardées pour les restaurations ou pour être réutilisées dans d'autres projets. 

Chaque fois qu'un conteneur est créé à partir d'une image Docker, une nouvelle couche appelée couche conteneur est créée. Les modifications apportées au conteneur, telles que l'ajout ou la suppression de fichiers, sont enregistrées dans la couche conteneur uniquement et n'existent que pendant l'exécution du conteneur. Ce processus itératif de création d'images permet d'accroître l'efficacité globale, car plusieurs instances de conteneur actives peuvent s'exécuter à partir d'une seule image de base, et elles exploitent donc une pile commune. 

Conteneurs Docker

Les conteneurs Docker sont les instances actives en cours d'exécution des images Docker. Alors que les images Docker sont des fichiers en lecture seule, les conteneurs sont des contenus actifs, éphémères et exécutables. Les utilisateurs peuvent interagir avec eux et les administrateurs peuvent ajuster leurs paramètres et conditions à l'aide de commandes Docker. 

Docker Hub

Docker Hub (lien externe à ibm.com) est le référentiel public d'images Docker que Docker revendique comme la « plus grande bibliothèque et communauté d'images de conteneurs au monde ». Il contient plus de 100 000 images de conteneurs provenant de fournisseurs de logiciels commerciaux, de projets open source et de développeurs, des images produites par Docker, Inc, des images certifiées appartenant au Docker Trusted Registry et plusieurs milliers d'autres images. 

Tous les utilisateurs de Docker Hub peuvent partager leurs images à volonté. Ils peuvent également télécharger des images de base prédéfinies à partir du système de fichiers Docker pour les utiliser comme point de départ pour des projets de conteneurisation. 

Il existe d'autres référentiels d'images, notamment GitHub. GitHub est un service d'hébergement de référentiel bien connu pour les outils de développement d'applications et en tant que plateforme qui favorise la collaboration et la communication. Les utilisateurs de Docker Hub peuvent créer un référentiel pouvant contenir de nombreuses images. Le référentiel peut être public ou privé et lié à des comptes GitHub ou BitBucket. 

Docker Desktop

Docker Desktop (lien externe à ibm.com) est une application pour Mac ou Windows qui comprend Docker Engine, le client d'interface de ligne de commande Docker, Docker Compose, Kubernetes, etc. Il comprend également l'accès à Docker Hub. 

Démon Docker

Le démon Docker est un service qui crée et gère des images Docker à l'aide des commandes du client. Il sert essentiellement de centre de contrôle pour votre implémentation Docker. Le serveur sur lequel s'exécute le démon Docker s'appelle l'hôte Docker.

Registre Docker

Un registre Docker est un système de stockage et de distribution open source évolutif pour les images Docker. Le registre vous permet de suivre les versions des images dans les référentiels, en utilisant le balisage pour l'identification. Cette opération s'effectue à l'aide de git, un outil de contrôle des versions. 

Déploiement et orchestration de Docker

Si vous n'exécutez que quelques conteneurs, il est assez simple de gérer une application dans Docker Engine, l'environnement d'exécution, de facto, du secteur. Mais pour les déploiements comprenant des milliers de conteneurs et des centaines de services, il est presque impossible de gérer le flux de travail sans l'aide de certains outils spécialement conçus.

Plug-in Docker

Les plug-ins Docker (lien externe à ibm.com) peuvent être utilisés pour rendre Docker encore plus fonctionnel.Certains plug-in Docker sont inclus dans le système de plug-in Docker Engine, et des plug-in tiers peuvent être également chargés. 

Docker Compose

Les développeurs peuvent utiliser Docker Compose pour gérer des applications multi-conteneurs, dans lesquelles tous les conteneurs s'exécutent sur le même hôte Docker. Docker Compose crée un fichier YAML (.YML) qui spécifie les services inclus dans l'application, et peut déployer et exécuter des conteneurs à l'aide d'une seule commande. Comme la syntaxe YAML est indépendante du langage, les fichiers YAML peuvent être utilisés dans des programmes écrits en Java, Python, Ruby et dans de nombreux autres langages. 

Les développeurs peuvent également utiliser Docker Compose pour définir des volumes persistants pour le stockage, spécifier des nœuds de base et documenter et configurer les dépendances de service. 

Kubernetes

La surveillance et la gestion des cycles de vie des conteneurs dans des environnements plus complexes nécessitent un outil d'orchestration de conteneur. Alors que Docker inclut son propre outil d'orchestration (appelé Docker Swarm), la plupart des développeurs choisissent plutôt Kubernetes. 

Kubernetes est une plateforme d'orchestration de conteneur open source, issue d'un projet développé en interne chez Google. Kubernetes planifie et automatise les tâches qui font partie intégrante de la gestion des architectures basées sur des conteneurs, notamment le déploiement des conteneurs, les mises à jour, la reconnaissance de services, l'allocation de l'espace de stockage, l'équilibrage de charge, le contrôle de l'intégrité, etc. En outre, l'écosystème d'outils open source pour Kubernetes, notamment Istio et Knative,permet aux entreprises de déployer une plateforme en tant que service (PaaS) à haute productivité pour les applications conteneurisées et de passer plus rapidement à l'informatique sans serveur.

En savoir plus sur Kubernetes

Solutions connexes
Red Hat® OpenShift on IBM Cloud

Red Hat OpenShift on IBM Cloud exploite OpenShift dans les environnements publics et hybrides afin d'offrir vitesse, réactivité sur le marché, évolutivité et fiabilité.

Découvrir Red Hat OpenShift on IBM Cloud
IBM Cloud Satellite®

Avec IBM Cloud Satellite®, vous pouvez lancer des services cloud cohérents n'importe où : sur site, en périphérie et dans des environnements de cloud public.

Découvrir IBM Cloud Satellite®
Solutions de stockage dans le cloud hybride

Stockez les données dans un emplacement le plus pertinent possible pour les applications et les services, avec les solutions de stockage dans le cloud hybride IBM sur site, dans un cloud privé et public.

Découvrir les solutions de stockage pour cloud hybride
Services cloud

Découvrez comment une approche de services cloud gérés permet d'atténuer les tensions potentielles entre la gestion informatique traditionnelle et la culture DevOps.

Découvrir les services de cloud
Ressources Conteneurs dans l'entreprise

Une nouvelle étude d'IBM montre que l'adoption des conteneurs et de Kubernetes est en plein essor.

Fournir des modèles sur Kubernetes ou OpenShift à l'aide de conteneurs autonomes

Créez une image de conteneur autonome pour servir les modèles NLP de Watson, puis exécutez-la sur un cluster Kubernetes ou Red Hat OpenShift.

Pour aller plus loin

Une plateforme de conteneurs d'entreprise permet d'orchestrer plusieurs clouds publics et privés, afin d'unifier vos environnements pour améliorer les performances commerciales et opérationnelles. Il s'agit d'un élément clé d'une stratégie de cloud hybride ouvert qui permet d'éviter de dépendre d'un seul fournisseur, de créer et d'exécuter des charges de travail n'importe où de manière cohérente, ainsi que d'optimiser et de moderniser l'ensemble de votre informatique. Déployez des clusters Kubernetes à haute disponibilité et entièrement gérés avec Red Hat OpenShift on IBM Cloud, un service OpenShift géré qui tire parti de l'échelle d'entreprise et de la sécurité d'IBM Cloud pour automatiser les mises à jour, la mise à l'échelle et la mise à disposition.

Découvrir Red Hat® OpenShift on IBM Cloud