Docker

DOCKER

 

INTRODUCTION:

Docker est un service de gestion de conteneurs. Les mots-clés de Docker sont développer, expédier et fonctionner n'importe où. Docker a pour principe de permettre aux développeurs de développer facilement des applications, de les envoyer dans des conteneurs pouvant ensuite être déployés n’importe où.

Docker est un outil conçu pour faciliter la création, le déploiement et l'exécution d'applications à l'aide de conteneurs. Les conteneurs permettent à un développeur de conditionner une application avec toutes les pièces dont il a besoin, telles que des bibliothèques et autres dépendances, et de l'expédier dans un package unique. Ainsi, grâce au conteneur, le développeur peut être assuré que l'application s'exécutera sur toute autre machine Linux, quels que soient les paramètres personnalisés de cette machine susceptibles de différer de la machine utilisée pour l'écriture et le test du code.

Et surtout, Docker est open source. Cela signifie que n'importe qui peut contribuer à Docker et l'étendre pour répondre à ses propres besoins s'il a besoin de fonctionnalités supplémentaires qui ne sont pas disponibles immédiatement.

 

Pour qui est-il Docker?

Docker est un outil conçu à la fois pour les développeurs et les administrateurs système, ce qui en fait une partie intégrante de nombreux DevOps. Pour les développeurs, cela signifie qu'ils peuvent se consacrer à l'écriture de code sans se préoccuper du système sur lequel il fonctionnera. Cela leur permet également de prendre une longueur d'avance en utilisant l'un des milliers de programmes déjà conçus pour s'exécuter dans un conteneur Docker dans le cadre de leur application. Pour le personnel des opérations, Docker donne de la flexibilité et réduit potentiellement le nombre de systèmes nécessaires en raison de son faible encombrement et de ses frais généraux.

 

HISTOIRE DE DOCKER

 

Les conteneurs

Le concept de base des conteneurs est né en 1979 avec chroot UNIX, un système capable de fournir des espaces isolés pour les processus stockés. Pour cette caractéristique particulière, Chroot peut être considéré comme une sorte de précurseur des conteneurs réels.

Grâce au développement de nouvelles technologies et aux progrès réalisés dans les espaces de noms, le projet LinuX Container (LXC) est né en 2008: la solution la plus complète de gestion des conteneurs de ces années. Le développement de groupes de contrôle, créés par Google en 2006, permet de contrôler et de limiter la quantité de ressources utilisées pour un processus ou pour un groupe de processus.

Les conteneurs Linux sont une technologie de virtualisation au niveau du système d'exploitation permettant de fournir plusieurs environnements Linux isolés sur un même hôte Linux. Contrairement aux machines virtuelles (VM), les conteneurs n'exécutent pas de systèmes d'exploitation invités dédiés. Au lieu de cela, ils partagent le noyau du système d'exploitation hôte et utilisent les bibliothèques du système d'exploitation invité pour fournir les capacités de système d'exploitation requises. En l'absence de système d'exploitation dédié, les conteneurs démarrent beaucoup plus rapidement que les ordinateurs virtuels.

 

Les conteneurs utilisent les fonctionnalités du noyau Linux telles que les espaces de noms, Apparmor, les profils SELinux, les chroot et les CGroups pour fournir un environnement isolé similaire aux ordinateurs virtuels. Les modules de sécurité Linux garantissent que l’accès à la machine hôte et au noyau à partir des conteneurs est correctement géré pour éviter toute activité d’intrusion. De plus, les conteneurs peuvent exécuter différentes distributions Linux à partir de son système d'exploitation hôte si les deux systèmes d'exploitation peuvent s'exécuter sur la même architecture de processeur.

En général, les conteneurs permettent de créer des images de conteneur basées sur différentes distributions Linux, une API permettant de gérer le cycle de vie des conteneurs, des outils client permettant d’interagir avec l’API, des fonctions permettant de prendre des instantanés, de migrer des instances de conteneur d’un hôte à un autre, etc.

 

Docker

Docker est le système de gestion de conteneurs le plus populaire et le plus utilisé. Il a été développé en 2013 en tant que projet interne au sein d'une entreprise de plate-forme en tant que service appelée dotCloud, qui a été renommée Docker. Docker a utilisé LXC au début et a ensuite remplacé LXC par sa propre bibliothèque appelée libcontainer. Contrairement à d'autres plates-formes de conteneurs, Docker a introduit un écosystème complet pour la gestion des conteneurs. Cela inclut un modèle d'image de conteneur en couches hautement efficace, des registres de conteneurs globaux et locaux, une API REST propre, une CLI, etc. À un stade ultérieur, Docker a également pris l'initiative de mettre en œuvre une solution de gestion de grappes de conteneurs appelée Docker Swarm.

 

Windows Containers

Microsoft a également pris l’initiative d’ajouter la prise en charge des conteneurs au système d’exploitation Microsoft Windows Server en 2015 pour les applications Windows, appelées conteneurs Windows. Ceci doit être publié avec Microsoft Windows Server 2016. Avec cette implémentation, Docker pourrait exécuter des conteneurs Docker sur Windows de manière native sans avoir à exécuter une machine virtuelle pour exécuter Docker (Docker fonctionnait auparavant sous Windows utilisant une machine virtuelle Linux).

 

DESCRIPTION DE LA TECHNOLOGIE

Docker est un outil conçu pour faciliter la création, le déploiement et l'exécution d'applications à l'aide de conteneurs. Les conteneurs permettent à un développeur de conditionner une application avec toutes les pièces dont il a besoin, telles que des bibliothèques et autres dépendances, et de l'expédier dans un package unique. Ainsi, grâce au conteneur, le développeur peut être assuré que l'application s'exécutera sur toute autre machine Linux, quels que soient les paramètres personnalisés de cette machine susceptibles de différer de la machine utilisée pour l'écriture et le test du code.

D'une certaine manière, Docker est un peu comme une machine virtuelle. Mais contrairement à une machine virtuelle, plutôt que de créer un système d’exploitation virtuel complet, Docker permet aux applications d’utiliser le même noyau Linux que le système sur lequel elles s'exécutent. Cela améliore considérablement les performances et réduit la taille de l'application.

Docker est une plate-forme et une technologie de conteneur facilitant la gestion de l'ensemble du pipeline de distribution d'applications, du développement à la production, qui exécute vos applications dans des conteneurs.

 

Contrairement aux ordinateurs virtuels, les conteneurs docker extraient le noyau du système d'exploitation sans émuler le matériel, ce qui en fait un environnement léger, portable et économe en ressources pour le déploiement et la gestion de vos applications. Docker fonctionne sur n'importe quel cloud local, hybride ou privé. Vous pouvez ainsi migrer facilement vos applications de conteneur d'une infrastructure à une autre. Avec Docker, vous pouvez développer vos applications localement et les mettre en production, ou vous procurer des applications prêtes dans l'un des référentiels d'images publics ou privés. Elles fonctionneront de la même manière dans n'importe quel cloud.

 

Comment est-il différent des machines virtuelles?

En un coup d'œil, les machines virtuelles et les conteneurs Docker peuvent sembler identiques. Cependant, leurs principales différences deviendront apparentes lorsque vous examinerez le diagramme suivant:

Les applications exécutées sur des machines virtuelles, à l'exception de l'hyperviseur, nécessitent une instance complète du système d'exploitation et des bibliothèques de support. Les conteneurs, d'autre part, partagent le système d'exploitation avec l'hôte. Hypervisor est comparable au moteur de conteneur (représenté par Docker sur l'image) en ce sens qu'il gère le cycle de vie des conteneurs. La différence importante est que les processus en cours d'exécution dans les conteneurs ressemblent aux processus natifs sur l'hôte et n'introduisent pas de surcharge associée à l'exécution de l'hyperviseur. De plus, les applications peuvent réutiliser les bibliothèques et partager les données entre les conteneurs.

Comme les deux technologies ont des atouts différents, il est courant de trouver des systèmes combinant des machines virtuelles et des conteneurs.

 

Comment utiliser Docker

Pour exécuter votre application sur Docker, vous devez utiliser une image de conteneur, qui est un package autonome de votre application avec tous les outils, bibliothèques et fichiers de configuration nécessaires. À l'aide de Docker, vous extrayez une image de conteneur à partir d'un référentiel (par exemple: Docker Hub).

Quels sont les avantages de passer aux conteneurs Docker? Premièrement, une grande évolutivité et un équilibrage de la charge: vous pouvez réduire le nombre d'instances de vos applications et redistribuer les ressources si la charge augmente et redimensionner lorsque vous devez économiser des ressources. Deuxièmement, une gestion efficace des versions: vous pouvez mettre à jour vos applications sans interruption, créer, tester et déployer vos applications par incréments en toute sécurité.

Bien que le moyen le plus simple de gérer les conteneurs Docker consiste à utiliser ses outils internes, certains préfèrent utiliser des orchestrateurs tels que Swarm (de Docker) ou Kubernetes développé par Google pour automatiser la mise à l'échelle, la publication progressive, la gestion du stockage, etc.

 

Docker Engine

Docker Engine est une application client-serveur avec ces composants majeurs:

  • Un serveur qui est un type de programme à exécution longue appelé processus démon (commande dockerd).
  • Une API REST qui spécifie les interfaces que les programmes peuvent utiliser pour communiquer avec le démon et lui indiquer quoi faire.
  • Un client d'interface de ligne de commande (CLI) (la commande docker).

La CLI utilise l’API REST Docker pour contrôler ou interagir avec le démon Docker par le biais de scripts ou de commandes directes de la CLI. De nombreuses autres applications Docker utilisent les API et CLI sous-jacentes.

Le démon crée et gère des objets Docker, tels que des images, des conteneurs, des réseaux et des volumes.

 

Architecture Docker

Docker utilise une architecture client-serveur. Le client Docker parle au  Docker daemon, qui se charge de la construction, de l'exécution et de la distribution de vos conteneurs Docker. Le client et le Docker daemon peuvent s'exécuter sur le même système ou vous pouvez connecter un client Docker à un Docker daemon distant. Le client et le Docker daemon communiquent à l'aide d'une API REST, via des sockets UNIX ou une interface réseau.

The Docker daemon

Le Docker daemon (dockerd) écoute les requêtes de l'API Docker et gère les objets Docker tels que les images, les conteneurs, les réseaux et les volumes. Un daemon peut également communiquer avec d'autres daemons pour gérer les services Docker.

The Docker client

Le client Docker est le moyen principal utilisé par de nombreux utilisateurs Docker pour interagir avec Docker. Lorsque vous utilisez des commandes telles que l'exécution du menu fixe, le client envoie ces commandes à dockerd, qui les exécute. La commande docker utilise l'API Docker. Le client Docker peut communiquer avec plusieurs daemons.

Docker registries

Un registre Docker stocke des images Docker. Docker Hub est un registre public que tout le monde peut utiliser. Docker est configuré pour rechercher des images sur Docker Hub par défaut. Vous pouvez même gérer votre propre registre privé. Si vous utilisez Docker Datacenter (DDC), il inclut Docker Trusted Registry (DTR).

Lorsque vous utilisez les commandes docker pull ou docker run, les images requises sont extraites de votre registre configuré. Lorsque vous utilisez la commande docker push, votre image est transférée dans le registre configuré.

Docker objects

Lorsque vous utilisez Docker, vous créez et utilisez des images, des conteneurs, des réseaux, des volumes, des plug-ins et d'autres objets.

Docker Image

Une image est un modèle en lecture seule avec des instructions pour créer un conteneur Docker. Souvent, une image est basée sur une autre image, avec une personnalisation supplémentaire. Par exemple, vous pouvez créer une image basée sur l'image ubuntu, mais en installant le serveur Web Apache et votre application, ainsi que les détails de configuration nécessaires à l'exécution de votre application.

Vous pouvez créer vos propres images ou utiliser uniquement celles créées par d'autres et publiées dans un registre. Pour créer votre propre image, vous créez un fichier Dockerfile avec une syntaxe simple permettant de définir les étapes nécessaires à la création de l'image et à son exécution. Chaque instruction d'un fichier Docker crée un calque dans l'image. Lorsque vous modifiez le fichier Docker et reconstruisez l'image, seules les couches qui ont été modifiées sont reconstruites. Cela fait partie de ce qui rend les images si légères, petites et rapides par rapport aux autres technologies de virtualisation.

Container

Un conteneur est une instance exécutable d'une image. Vous pouvez créer, démarrer, arrêter, déplacer ou supprimer un conteneur à l'aide de l'API ou de la CLI de Docker. Vous pouvez connecter un conteneur à un ou plusieurs réseaux, y attacher un stockage ou même créer une nouvelle image en fonction de son état actuel.

Par défaut, un conteneur est relativement bien isolé des autres conteneurs et de son ordinateur hôte. Vous pouvez contrôler dans quelle mesure le réseau, le stockage ou les autres sous-systèmes sous-jacents d’un conteneur sont isolés des autres conteneurs ou de la machine hôte.

Un conteneur est défini par son image ainsi que par les options de configuration que vous lui fournissez lorsque vous le créez ou le démarrez. Lorsqu'un conteneur est supprimé, toute modification de son état qui n'est pas stockée dans le stockage persistant disparaît.

Service

Les services vous permettent de redimensionner les conteneurs sur plusieurs démons Docker, qui travaillent tous ensemble comme un essaim avec plusieurs gestionnaires et travailleurs. Chaque membre d'un essaim est un Docker daemon, et les daemons communiquent tous à l'aide de l'API Docker. Un service vous permet de définir l'état souhaité, tel que le nombre de réplicas du service qui doivent être disponibles à un moment donné. Par défaut, la charge du service est équilibrée entre tous les nœuds de travail. Pour le consommateur, le service Docker semble être une application unique.

Avantages des conteneurs Docker

  • Déploiement rapide de nouveaux services avec des ressources de mémoire et de performance limitées. Les conteneurs Docker, comme nous l'avons déjà mentionné ci-dessus, constituent une alternative légère aux hyperviseurs. De plus, ils ne nécessitent ni ressources OS ni la charge complète de l’image OS (l’image peut être lancée à partir d’un Cloud à accès privé ou public). Cela garantit un lancement immédiat du logiciel et minimise les contraintes de RAM. Les conteneurs fournissent également la vitesse élevée des opérations de calcul, nécessitant beaucoup moins de temps pour réagir aux demandes des utilisateurs.
  • Développement et déploiement accélérés de logiciels. L'utilisation de Docker Containers réduit considérablement la consommation de ressources pour la création et le déploiement de nouveaux logiciels, ce qui évite aux développeurs de mettre à jour le matériel réseau existant (un serveur plus puissant, par exemple), ce qui rend leur routine professionnelle sans effort.
  • Une approche simple de la mise à l'échelle des fonctionnalités des applications. Si vous souhaitez mettre à jour un logiciel existant, Docker Container vous aidera à le faire aussi facilement que possible, étant conçu pour la migration (vous n’aurez pas à changer une seule ligne de code lors de la mise à l’échelle horizontale);
  • Grande accessibilité. La migration vers le cloud permet le transfert rapide et facile d'une application vers un nouvel environnement, ce qui permet une mise à l'échelle supplémentaire ou de complexifier la logique commerciale de l'application. Alternativement, les conteneurs Docker peuvent être transférés vers toute infrastructure non Cloud. Cette approche permet d’éviter toute incompatibilité d’un système d’exploitation avec le logiciel déployé au niveau matériel.
  • Diminution des chances de conflits. Peu importe la rapidité avec laquelle les applications tierces et leurs exigences changent. Si vous envisagez d’intégrer votre logiciel basé sur les conteneurs Docker, vous n’aurez aucun problème de compatibilité. Cette solution logicielle est basée sur un code source ouvert, de sorte qu'elle peut être lancée sur un système d'exploitation Linux et Windows, dans le nuage sur des machines virtuelles, etc.
  • Réduction des temps d'arrêt. Chaque conteneur Docker est isolé des autres conteneurs. Cela permet des performances constantes et réduit les risques d’indisponibilité.

Désavantages des conteneurs de Docker

Parmi les problèmes les plus graves pouvant apparaître lors de l'utilisation de la technologie, les développeurs soulignent la vulnérabilité du logiciel cible. Par exemple, si vous fournissez un accès aux conteneurs via des serveurs Web à l'aide d'une API, vous devrez réfléchir en profondeur au processus de vérification des paramètres. En particulier, vous devez vous assurer (avec l'aide des autorisations de vérification UNIX, par exemple) qu'un pirate informatique ne transmet pas les données transformées avec la demande, ce qui peut provoquer une génération supplémentaire de nouveaux conteneurs.

 

APPLICATION

Docker containers vs. Machines Virtuelles: quelle est la meilleure?

Les conteneurs et les machines virtuelles présentent des avantages et des inconvénients, et la décision finale dépendra de vos besoins spécifiques, mais il existe quelques règles générales.

  • Les ordinateurs virtuels constituent un meilleur choix pour exécuter des applications qui nécessitent toutes les ressources et fonctionnalités du système d’exploitation, lorsque vous devez exécuter plusieurs applications sur des serveurs ou que vous devez gérer un grand nombre de systèmes d’exploitation.
  • Les conteneurs constituent un meilleur choix lorsque votre plus grande priorité est de maximiser le nombre d'applications s'exécutant sur un nombre minimal de serveurs.

Quelle est la différence: les machines virtuelles contre les conteneurs

 

VMs Conteneurs
Poids lourd Poids léger
Performance limitée Performance native
Chaque VM s'exécute dans son propre OS Tous les conteneurs partagent l'hôte OS
Virtualisation de niveau matériel OS virtualization
Temps de démarrage en minutes Temps de démarrage en millisecondes
Alloue la mémoire requise Nécessite moins d'espace mémoire
Entièrement isolé et donc plus sécurisé Isolation au niveau du processus, éventuellement moins sécurisée

 

Pour la plupart, la configuration idéale est susceptible d'inclure les deux. Avec l'état actuel de la technologie de virtualisation, la flexibilité des machines virtuelles et les exigences minimales en ressources des conteneurs fonctionnent ensemble pour fournir des environnements avec une fonctionnalité maximale.

 

Où puis-je obtenir cette technologie?

 

Docker est une technologie open-source disponible gratuitement. Vous pouvez utiliser la page officielle de Docker: https://docs.docker.com/

pour télécharger la technologie correspondant à votre système d'exploitation (Linux, Windows ou Mac).

 

Vous pouvez télécharger une image nécessaire à l’adresse suivante: https://hub.docker.com/

 

EXEMPLES D’UTILISATION

 

A titre d'exemple, j'ai exécuté un simple fichier .php nécessitant un serveur Apache et PHP.

Pour commencer, vous devez installer Docker sur votre ordinateur. C'était Docker Toolbox dans mon cas (car Windows Home ne prend pas en charge Hyper-V, il est nécessaire d'exécuter Docker) de: https://docs.docker.com/toolbox/overview/

 

J'ai d'abord créé un fichier php:

... et un fichier docker:

J'ai utilisé une image Docker de: https://hub.docker.com/:

Pour utiliser l'image, nous devons créer et nommer le projet:

Pour exécuter un fichier, nous utilisons le nom d’un projet (pour indiquer en echo: "Hello CampusID"):

Pour lister les conteneurs en cours d'exécution:

Pour arrêter le conteneur (à l'aide de l'ID de conteneur):

Pour vérifier la version de Docker:

 

Références:

https://www.tutorialspoint.com/docker/docker_overview.htm

https://docs.docker.com/

https://opensource.com/resources/what-docker

https://dzone.com/articles/evolution-of-linux-containers-future

https://medium.com/@Eddy_mens/what-the-heck-is-docker-used-for-bf661a20ebcb

https://www.toptal.com/devops/getting-started-with-docker-simplifying-devops

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *