J'ai entendu parler de Docker il y a quelques jours et je voulais en parler.
Mais en fait, je ne sais pas à quoi sert ce "conteneur"?
Qu'est-ce qu'un conteneur?
Peut-il remplacer une machine virtuelle dédiée au développement?
Quel est le but, en termes simples, d'utiliser Docker dans les entreprises? L'avantage principal?
Réponses:
VM: À l'aide du logiciel VM, par exemple, Ubuntu peut être installé dans un Windows. Et ils courraient tous les deux en même temps. C'est comme construire un PC, avec ses composants de base comme le CPU, la RAM, les disques, les cartes réseau, etc., dans un système d'exploitation et les assembler pour fonctionner comme s'il s'agissait d'un vrai PC. De cette façon, le PC virtuel devient un "invité" à l'intérieur d'un PC réel qui avec son système d'exploitation, qui est appelé un hôte.
Conteneur: C'est le même que ci-dessus mais au lieu d'utiliser un système d'exploitation entier, il a réduit les composants "inutiles" du système d'exploitation virtuel pour en créer une version minimale. Cela a conduit à la création de LXC (Linux Containers), plus rapide que les machines VM.
Docker: un conteneur Docker , contrairement à une machine virtuelle et à un conteneur, ne nécessite ni n'inclut un système d'exploitation séparé. Au lieu de cela, il s'appuie sur les fonctionnalités du noyau Linux et utilise l'isolation des ressources.
Objectif de Docker: Son objectif principal est d'automatiser le déploiement d'applications à l'intérieur de conteneurs logiciels et l'automatisation de la virtualisation au niveau du système d'exploitation sous Linux. Il est plus léger que les conteneurs standard et démarre en quelques secondes.
(Notez qu'il n'y a pas de système d'exploitation invité requis dans le cas de Docker)
la source
[Notez que cette réponse se concentre sur les conteneurs Linux et peut ne pas s'appliquer entièrement à d'autres systèmes d'exploitation. ]
C'est une application : un conteneur est un moyen d'exécuter des applications isolées les unes des autres. Plutôt que de virtualiser le matériel pour exécuter plusieurs systèmes d'exploitation, les conteneurs reposent sur la virtualisation du système d'exploitation pour exécuter plusieurs applications. Cela signifie que vous pouvez exécuter plus de conteneurs sur le même matériel que les machines virtuelles, car vous n'avez qu'une seule copie du système d'exploitation en cours d'exécution et vous n'avez pas besoin de préallouer la mémoire et les cœurs de processeur pour chaque instance de votre application. Comme toute autre application, lorsqu'un conteneur a besoin du processeur ou de la mémoire, il les alloue, puis les libère une fois terminé, permettant à d'autres applications d'utiliser ces mêmes ressources limitées plus tard.
Ils tirent parti des espaces de noms du noyau : chaque conteneur recevra par défaut un environnement dans lequel les espaces de noms suivants sont:
/
dans le conteneur seront différents de ceux/
de l'hôte.Chacun de ces espaces de noms empêche également un conteneur de voir des éléments tels que le système de fichiers ou les processus sur l'hôte, ou dans d'autres conteneurs, sauf si vous supprimez explicitement cet isolement.
Et d'autres outils de sécurité Linux : les conteneurs utilisent également d'autres fonctionnalités de sécurité telles que SELinux, AppArmor, Capabilities et Seccomp pour empêcher les utilisateurs à l'intérieur du conteneur, y compris l'utilisateur root, de pouvoir s'échapper du conteneur ou d'avoir un impact négatif sur l'hôte.
Empaquetez vos applications avec leurs dépendances pour la portabilité : l'empaquetage d'une application dans un conteneur implique d'assembler non seulement l'application elle-même, mais toutes les dépendances nécessaires pour exécuter cette application, dans une image portable. Cette image est le système de fichiers de base utilisé pour créer un conteneur. Parce que nous isolons uniquement l'application, ce système de fichiers n'inclut pas le noyau et les autres utilitaires du système d'exploitation nécessaires pour virtualiser un système d'exploitation entier. Par conséquent, une image pour un conteneur doit être nettement plus petite qu'une image pour une machine virtuelle équivalente, ce qui accélère le déploiement sur les nœuds du réseau. En conséquence, les conteneurs sont devenus une option populaire pour le déploiement d'applications dans le cloud et les centres de données distants.
Cela dépend : si votre environnement de développement exécute Linux et que vous n'avez pas besoin d'accéder à des périphériques matériels, ou qu'il est acceptable d'avoir un accès direct au matériel physique, vous trouverez une migration vers un conteneur Linux assez simple. La cible idéale pour un conteneur Docker sont des applications telles que les API basées sur le Web (par exemple, une application REST), auxquelles vous accédez via le réseau.
Dev ou Ops : Docker est généralement introduit dans un environnement selon l'un des deux chemins. Les développeurs recherchant un moyen de développer et de tester localement plus rapidement leur application, et les opérations cherchant à exécuter plus de charge de travail sur moins de matériel que ce qui serait possible avec des machines virtuelles.
Ou Devops : L'une des cibles idéales est de tirer parti de Docker immédiatement à partir de l'outil de déploiement CI / CD, en compilant l'application et en créant immédiatement une image qui est déployée pour le développement, le CI, la production, etc. Les conteneurs réduisent souvent le temps de déplacement de l'application depuis l'enregistrement du code jusqu'à ce qu'il soit disponible pour les tests, ce qui rend les développeurs plus efficaces. Et lorsqu'elle est conçue correctement, la même image qui a été testée et approuvée par les développeurs et les outils CI peut être déployée en production. Étant donné que cette image inclut toutes les dépendances de l'application, le risque de rupture de la production qui a fonctionné en développement est considérablement réduit.
Évolutivité : un dernier avantage clé des conteneurs que je mentionnerai est qu'ils sont conçus pour une évolutivité horizontale à l'esprit. Lorsque vous avez des applications sans état sous une charge importante, les conteneurs sont beaucoup plus faciles et plus rapides à mettre à l'échelle en raison de leur taille d'image plus petite et de leur surcharge réduite. Pour cette raison, vous voyez des conteneurs utilisés par de nombreuses grandes entreprises basées sur le Web, telles que Google et Netflix.
la source
Les mêmes questions me frappaient la tête il y a quelques jours et ce que j'ai trouvé après y être entré, comprenons avec des mots très simples.
Prenons un exemple que nous développons une application utilisant les services nodeJs, MongoDB, Redis, RabbitMQ etc [vous pouvez penser à tous les autres services].
Maintenant, nous faisons face à ces choses suivantes comme des problèmes dans le développement d'applications et le processus d'expédition si nous oublions l'existence de docker ou d'autres alternatives d'applications de conteneurisation.
Compatibilité des services (nodeJs, mongoDB, Redis, RabbitMQ, etc.) avec le système d'exploitation (même après avoir trouvé des versions compatibles avec le système d'exploitation, si quelque chose d'inattendu se produit lié aux versions, nous devons à nouveau rechercher la compatibilité et corriger cela).
Si deux composants système nécessitent une bibliothèque / dépendance avec différentes versions dans l'application dans le système d'exploitation (cela nécessite un relookage à chaque fois en cas de comportement inattendu de l'application en raison d'un problème de version de bibliothèque et de dépendance).
Plus important encore, si une nouvelle personne rejoint l'équipe, nous trouvons très difficile de configurer le nouvel environnement, la personne doit suivre un grand nombre d'instructions et exécuter des centaines de commandes pour enfin configurer l'environnement Et cela prend du temps et des efforts.
Les gens doivent s'assurer qu'ils utilisent la bonne version du système d'exploitation et vérifier la compatibilité des services avec le système d'exploitation, et chaque développeur doit le suivre à chaque fois lors de la configuration.
Nous avons également différents environnements comme le développement, le test et la production.Si un développeur est à l'aise avec un système d'exploitation et l'autre est à l'aise avec un autre système d'exploitation Et dans ce cas, nous ne pouvons pas garantir que notre application se comportera de la même manière dans ces deux situations différentes .
Tout cela nous complique la vie dans le processus de développement , de test et d' expédition des applications.
Nous avons donc besoin de quelque chose qui gère les problèmes de compatibilité et nous permet d'apporter des changements et des modifications dans n'importe quel composant du système sans affecter les autres composants.
Comment docker résout les problèmes ci-dessus
Nous pouvons exécuter chaque composant de service (nodeJs, MongoDB, Redis, RabbitMQ) dans différents conteneurs avec ses propres dépendances et bibliothèques dans le même système d'exploitation mais avec des environnements différents.
Nous devons simplement exécuter la configuration docker une fois, puis tous les développeurs de notre équipe peuvent commencer avec une simple commande docker run, nous avons économisé beaucoup de temps et d'efforts ici :) .
J'espère que ce serait utile.
la source
Laissez-moi essayer de fournir des réponses aussi simples que possible:
Qu'est-ce qu'un conteneur?
En termes simples: un package contenant un logiciel . Plus précisément, une application et toutes ses dépendances regroupées. Un environnement d'application standard non dockerisé est directement relié au système d'exploitation, tandis qu'un conteneur Docker est une couche d'abstraction du système d'exploitation.
Et un conteneur diffère d'une image en ce qu'un conteneur est une instance d'exécution d'une image - similaire à la façon dont les objets sont des instances d'exécution de classes au cas où vous seriez familiarisé avec la POO.
Les VM et les conteneurs Docker sont des techniques de virtualisation, en ce sens qu'ils fournissent une abstraction en plus de l'infrastructure système.
Une machine virtuelle exécute un système d'exploitation «invité» complet avec un accès virtuel aux ressources hôte via un hyperviseur. Cela signifie que la machine virtuelle fournit souvent à l'environnement plus de ressources qu'il n'en a réellement besoin. En général, les machines virtuelles fournissent un environnement avec plus de ressources que la plupart des applications n'en ont besoin. Par conséquent, les conteneurs sont une technique plus légère. Les deux résolvent des problèmes différents.
La conteneurisation va de pair avec les microservices. Les petits services qui composent la plus grande application sont souvent testés et exécutés dans des conteneurs Docker. Cela facilite les tests continus.
De plus, comme les conteneurs Docker sont en lecture seule, ils appliquent un principe DevOps clé: les services de production doivent rester inchangés
Quelques avantages généraux de leur utilisation:
la source