Docker: programme de virtualisation de programmes dans des conteneurs

Docker est le open source multiplateforme projet que automatise le déploiement d'applications dans les conteneurs en utilisant isolation des ressources fonctionnalités afin que vous n'ayez pas à utiliser plusieurs machines virtuelles consommatrices de ressources pour accomplir la même tâche, en réduisant les frais généraux et en augmentant l'évolutivité et la portabilité.

En peu de temps, Docker est devenu la principale application de gestion de conteneurs dans le monde et, combiné à d'autres services tels que Kubernetes, il a des capacités qui couvrent presque toutes les exigences, pour tous, à l'exception de certains cas spécifiques que nous discuterons plus en détail, car Docker ne convient pas à toutes les utilisations en raison de sa conception.

Docker: programme de virtualisation de programmes dans des conteneurs

Pour commencer, un peu d'histoire

L'idée de Docker est née de la main de Solomon Hykes en tant que projet interne au sein de dotCloud (fondé en 2010), qui était une entreprise axée sur la création d'un PaaS, il serait renommé Docker Inc., qui est la société actuelle qui développe Docker Hub et Docker pour ordinateur de bureau.

À ses débuts, il utilisait LXC comme environnement d'exécution qui a ensuite été remplacé par sa propre bibliothèque écrite dans le langage de programmation Go appelé libcontainer pour le convertir en un programme multiplateforme.

Qu'est-ce que Docker et à quoi sert-il?

docker

Sa fonction coïncide avec le slogan et consiste à développer, envoyer et exécuter n'importe quelle application dans n'importe quel système d'exploitation, étant une alternative flexible avec un besoin en ressources beaucoup moins important que les machines virtuelles traditionnelles qui sont des émulations de composants matériels basés sur des machines virtuelles.

Il s'agit d'une technologie de virtualisation basée sur des conteneurs qui partage le noyau hôte pour exécuter des processus isolés dans l'espace utilisateur sans avoir besoin d'un autre système d'exploitation en cours d'exécution, consommant des ressources inutiles.

Différences avec les machines virtuelles traditionnelles

conteneurs-vs-machines-virtuelles

Nous économiserons toutes les ressources utilisées par les systèmes d'exploitation virtualisés et nous pouvons également exécuter nos conteneurs sur n'importe quel système d'exploitation sur lequel Docker est installé afin d'exécuter nos applications.

Gardez à l'esprit que Docker n'est pas valide pour tous les types d'applications car il est destiné aux micro-services sans interfaces utilisateur graphiques, ce n'est donc pas toujours la meilleure option par rapport à l'utilisation de machines virtuelles, car nous souhaitons peut-être utiliser un graphique interface, puis l'utilisation d'une machine virtuelle serait une meilleure option. De plus, la persistance de Docker est inexistante, donc si nous désactivons l'un des conteneurs, toutes les informations qu'il contient disparaîtront, donc pour ce type de service, il est préférable d'utiliser un service séparé ou d'utiliser une machine virtuelle dans ce but.

Qu'est-ce qui compose Docker?

Il est composé de trois composants fondamentaux que sont le moteur Docker, les images Docker et le Docker Hub.

L' Moteur Docker est une application client-serveur avec 3 composants fondamentaux:

  • L' Docker Daemon (serveur) qui est le processus qui s'exécute en arrière-plan sur l'hôte et qui est responsable de la création et de la gestion des images, des conteneurs et des processus réseau.
  • L' API REST est une DU REPOS- interface de programmation basée sur la responsabilité d'interagir et de donner des instructions au démon.
  • L' terminal (client) est en charge de fournir l'interface pour interagir avec le démon via l'API REST avec des scripts ou des commandes.

Images Docker sont les conteneurs que l'utilisateur crée ou télécharge à partir du Docker Hub et contiennent les ressources nécessaires pour exécuter une application spécifique et l'application à exécuter.

L' Docker Hub fournit Docker des images pour permettre aux utilisateurs de télécharger facilement des conteneurs avec des services prédéfinis, ce qui permet de gagner beaucoup de temps. Il s'agit d'une bibliothèque en ligne avec de nombreux référentiels publics où vous trouverez tout ce dont vous avez besoin pour commencer, bien qu'il dispose également de référentiels privés.

Quels sont ses avantages?

géré par docker

La chose la plus importante est dans le évolutivité car les conteneurs sont facilement réplicables et fournissent ainsi disponibilité , car si l'un échoue, il y aura encore d'autres conteneurs offrant le service. De plus, il peut être utilisé dans tous les systèmes d'exploitation sur lesquels la plate-forme Docker est installée, il offre donc une excellente portabilité , car il peut être créé dans un Ubuntu Focal Fossa, par exemple, puis apportez ce service à un Windows Serveur et il fonctionne à la perfection comme sur la machine où il a été créé.

Le grand avantage est que les applications avec des exigences différentes peuvent être exécutées de manière isolée en utilisant Linux/Unix Fonctions du noyau qui sont des groupes C et des espaces de noms.

Groupes C limiter l'accès des processus à l'utilisation de la mémoire, Processeur et les entrées et les sorties, empêchant différents processus de consommer des ressources d'autres processus.

Espaces de noms limiter les processus et les threads en les encapsulant, en utilisant 5 champs spécifiques:

  • UTS ou l'identifiant des systèmes sont utilisés pour attribuer aux conteneurs le domaine et le nom de l'ordinateur.
  • PID ou l'identificateur de processus est utilisé dans chaque conteneur Docker avec un espace de noms distinct afin que tous les processus en dehors du conteneur ne soient pas affectés s'ils ont le même PID évitant les conflits car ils sont encapsulés.
  • IPC ou le communicateur entre les processus est chargé d'isoler les processus dans chaque conteneur, en évitant la communication avec les processus externes.
  • FILET ou les ressources réseau sont responsables de l'attribution à chaque conteneur des ressources réseau dont il a besoin pour être connecté.
  • TMN ou le point de montage du système de fichiers est chargé d'isoler l'espace réservé du conteneur afin qu'il ne soit accessible qu'à partir du conteneur Docker

Comme nous l'avons mentionné précédemment, Docker utilisait à ses débuts LXC, qui a ensuite été remplacé par libcontainer, ce qui permet à Docker de devenir multiplateforme, pouvant fonctionner à la fois sur Linux et Windows, ainsi que sur MacOS, car s'il continuait à utiliser LXC, il ne pourrait fonctionner que sur des environnements Linux.

Quels sont ses inconvénients?

Il présente 5 principaux inconvénients à prendre en compte lorsque l'on décide d'utiliser Docker pour la virtualisation d'applications en conteneurs:

La vitesse d'exécution n'est pas la même que si nous exécutons l'application directement sur l'hôte . Les conteneurs, tout en réduisant considérablement les frais généraux par rapport à l'utilisation d'un système d'exploitation virtualisé, l'exécution de la même application ne vient pas à la même vitesse que si elle s'exécutait directement sur l'hôte.

L' l'écosystème des conteneurs est fracturé et certains des conteneurs ne fonctionnent pas avec d'autres tels que Red Hat OpenShift qui ne fonctionne qu'avec Kubernetes.

En utilisant Docker pour le stockage persistant ne devrait pas être une option , car en raison de la façon dont il a été conçu une fois qu'un conteneur disparaît, tout son contenu disparaît également, de sorte que tout stockage persistant à partir d'une base de données ne devrait jamais être dans un conteneur Docker, car nous risquons de perdre des informations.

Les applications avec interfaces graphiques ne fonctionnent pas bien parce que Docker par conception ne nécessite pas d'interface graphique, car il est orienté vers les applications serveur.

Toutes les applications ne bénéficient pas de l'utilisation de conteneurs car ils sont principalement destinés aux micro-services.

Difficulté

difficulté-médias

Avec le désir d'apprendre, la difficulté est légèrement supérieure à la virtualisation non basée sur des conteneurs, car elle n'a pas d'interface utilisateur graphique comme celles proposées par les solutions de virtualisation pour les systèmes d'exploitation tels que QEMU, HyperV, VMWare ou VirtualBox Cela devient peut-être un peu plus difficile au début. Mais comme nous l'avons déjà discuté, ces techniques de virtualisation non basées sur des conteneurs ont une surcharge beaucoup plus faible, ce qui offre un grand avantage par rapport à la virtualisation SO et il existe de nombreux tutoriels et vidéos disponibles sur Internet sur YTube pour en savoir plus sur Docker en un rien de temps avec peu d'effort.

Télécharger

Nous aurons la possibilité de télécharger gratuitement Docker depuis le site du développeur et nous aurons également accès à de nombreux documents qui nous expliquent comment les utiliser.