Docker vs Vagrant

Docker vs Vagrant

Les équipes de développement et d'exploitation sont confrontées à la complexité des environnements logiciels depuis le début. C'est un problème courant où le code de travail dans un environnement ne fonctionne pas dans un autre. Docker et Vagrant aident à créer des environnements de développement prévisibles et reproductibles. Cependant, Docker utilise la technologie des conteneurs tandis que Vagrant utilise des machines virtuelles pour atteindre cet objectif. Comprendre les forces et les faiblesses de Docker et Vagrant aidera les développeurs à mélanger et faire correspondre ces outils pour obtenir les résultats souhaités. Commençons par les technologies sous-jacentes d'abord.

Machines virtuelles

Une machine virtuelle (VM) émule un ordinateur physique. Il est livré avec son propre système d'exploitation complet et allocation des ressources. La machine hôte fournit les ressources physiques nécessaires, mais l'environnement virtualisé fonctionne comme une machine indépendante avec ses propres adaptateurs de bios, de processeur, de stockage et de réseau. Même si VMware aujourd'hui est le plus célèbre pour la technologie VM moderne, l'idée de la machine virtuelle existe depuis longtemps. En 1965, IBM Yorktown Research Center avait besoin d'un moyen de mesurer l'efficacité des différentes idées d'informatique. L'équipe de recherche voulait basculer entre les fonctionnalités et mesurer les résultats. L'équipe a conçu un schéma pour diviser une seule machine en partitions plus petites. Les plus petites partitions géreraient leurs propres ressources. Ce seraient de petites machines virtuelles. L'idée VM a réussi. IBM a commencé à créer des systèmes d'exploitation basés sur des machines virtuelles. IBM System 370 (S / 370) et IBM System 390 (S / 390), tous deux systèmes IBM VM / ESA, sont devenus populaires auprès des entreprises et des universités car ils ont permis aux institutions de laisser leurs utilisateurs partager des ressources informatiques sans affecter les environnements les uns des autres. L'idée a également aidé à créer le système d'exploitation UNIX et le langage de programmation Java.

Les machines virtuelles modernes fonctionnent sur des hyperviseurs. Les hyperviseurs sont le logiciel, le micrologiciel ou le matériel responsable de la création et de l'exécution des machines virtuelles. Il y a beaucoup d'hyperviseurs disponibles sur le marché. KVM, Red Hat Enterprise Virtualization (RHEV), Xenserver, Microsoft Hyper-V et VMware vSphere / Esxi sont les joueurs de premier plan. Aujourd'hui, les machines virtuelles ont stimulé la croissance du cloud computing. Amazon AWS, Microsoft Azure, Google Cloud, Digital Ocean et d'autres sociétés de cloud dépendent fortement de la technologie de virtualisation.

Conteneurs

Les conteneurs créent une virtualisation au niveau du système d'exploitation. Ils travaillent comme un progiciel exécutable qui isole les applications de son environnement environnant. À l'intérieur du package, un conteneur a les propriétés nécessaires comme le code, l'exécution, les bibliothèques système et les outils pour maintenir l'application séparée de l'influence extérieure. Il s'exécute sur le système d'exploitation de la machine hôte. Les conteneurs partagent des bibliothèques et des binaires lorsque cela est possible et sépare uniquement les ressources absolument nécessaires.

En 1979, les appels du système «chroot» pourraient isoler les processus pour Unix. C'était la première graine de l'idée de conteneur. La technologie des premiers conteneurs a commencé avec les prisons FreeBSD en 2000. Un an plus tard, Linux VServer a permis à plusieurs machines Linux de fonctionner sur un seul hôte. En 2004, les zones d'Oracle Solaris ont fourni des fonctionnalités similaires à celles des prisons FreeBSD. En 2006-2007, Google a développé un conteneur de processus puis l'a fusionné dans le noyau Linux. Les conteneurs Linux (LXC) ont été créés en 2008 pour profiter des CGROUP LINUX et de l'espacement de noms. En 2013, Docker a été créé en combinant des idées LXC. Il a également ajouté des outils pour construire et récupérer facilement des images de conteneurs.

Docker

Docker est une technologie de conteneur open source basé sur LXC. Il est populaire car il est plus facile de créer, d'exécuter et de déployer des applications dans un environnement autonome. Docker ne crée pas un système d'exploitation entier comme une machine virtuelle. Au lieu de cela, il utilise le noyau du système d'exploitation de l'hôte et ne crée la virtualisation que pour l'application et les bibliothèques nécessaires. Cette approche le rend beaucoup plus léger que les machines virtuelles.

Les conteneurs Docker sont créés à partir d'images Docker. Les images Docker peuvent être considérées comme des instantanés de machines. Les utilisateurs peuvent facilement démarrer un conteneur à partir d'une image. Les images sont créées sous forme de couches. Supposons qu'une équipe de développement a besoin d'un conteneur avec Apache et Python installés sur une certaine version de Linux. Un développeur peut télécharger une image Linux à partir de Docker Hub, démarrer un conteneur, installer Apache et Python, créer une nouvelle image à partir du conteneur et partager cette image. D'autres membres de l'équipe n'ont pas besoin de passer par la même installation. Il aide à maintenir un environnement cohérent pour tous.

Docker prend également en charge les applications de scripts et multi-container. Les utilisateurs peuvent utiliser un DockerFile à base de texte pour définir les exigences, puis construire des conteneurs via Docker Compose. L'exemple ci-dessus de la création d'un serveur Apache / Python / Linux peut également être réalisé via ce processus. Avec Docker Compose, les équipes n'ont qu'à partager le dockerfile pour créer le même environnement. Docker a des outils plus spécialisés pour des tâches complexes. Docker Swarm aide à orchestrer les déploiements Docker à grande échelle.

Vagabond

Vagrant est un outil open-source qui aide à créer et à maintenir des machines virtuelles. Il fonctionne avec VirtualBox, VMware, AWS et d'autres fournisseurs. Vagrant simplifie la gestion des machines virtuelles. À l'aide d'un VagrantFile, les développeurs peuvent définir les propriétés de la machine virtuelle comme le système d'exploitation, les installations de logiciels et autres. Le VagrantFile basé sur le texte peut être partagé via le contrôle de la version et la machine nécessaire peut être démarrée à l'aide d'une commande simple comme «Vagrant Up». Les utilisateurs peuvent ensuite se connecter à la machine comme un serveur physique.

Quand utiliser docker ou vagabond

L'utilisation de Docker ou Vagrant se résume souvent à la nécessité de conteneurs ou de machines virtuelles. Voici quelques similitudes et différences entre Docker et Vagrant en termes d'utilisation. Docker et Vagrant ont des environnements facilement configurables qui peuvent être contrôlés via des scripts. Ils sont également adaptés au cloud. Virtual Machine Vagrant fournit une séparation de sécurité basée sur le noyau. La séparation rend les machines virtuelles moins risquées que les conteneurs. Mais les conteneurs Docker sont très légers. Ils utilisent moins de ressources et sont rapides en exécution. Vous pouvez donc avoir beaucoup plus de conteneurs sur un seul hôte que les machines virtuelles. De plus, le démarrage et l'arrêt des conteneurs sont presque instantanés par rapport aux machines virtuelles. Les machines virtuelles passent par le cycle de démarrage complet du BIOS et du système d'exploitation.

La séparation de sécurité d'une machine virtuelle rend un échec de machine virtuelle plus autonome. D'un autre côté, les conteneurs partagent des ressources et peuvent avoir un effet de crash en cascade. De plus, les menaces de sécurité des conteneurs peuvent atteindre le noyau du système d'exploitation hôte. Cependant, la vitesse d'exécution et l'empreinte légère des conteneurs rendent Docker très attrayant pour le développement. Avec une architecture de microservice, les conteneurs peuvent bien performer car les facteurs de risque sont atténués grâce à l'utilisation des microservices. De plus, des progrès sont en cours pour rendre Docker plus sécurisé chaque jour.

Du point de vue pratique du cas d'utilisation, Docker et Vagrant ne sont utilisés que par les professionnels de l'informatique et / ou les développeurs, ils ne sont pas utilisés par les consommateurs généraux ou les technologies informatiques. Dans un Vagrant spécifique, peut être plus pratique lorsque vous voulez vraiment imiter un système entier, tandis que Docker peut-être plus pratique lors de la création d'un système de test d'intégration continue (CI) pour un logiciel fréquemment modifié. Docker est souvent utilisé fréquemment dans les déploiements de production d'applications pour exécuter des serveurs Web ou d'applications qui sont apatrides et facilement tués et recréés sur n'importe quel hôte ou IP. Donc Docker est probablement beaucoup plus un cas d'utilisation commun.

Conclusion

Docker et Vagrant sont tous deux des technologies utiles qui peuvent aider les développeurs à améliorer leur productivité. Si la sécurité des applications est une préoccupation, alors l'utilisation de Vagrant et des VM peut être une bonne idée. Pour le développement et le partage rapides, Docker offre un avantage. La plupart des équipes utilisent les deux pour exécuter une opération en douceur.