Vagrant vs Docker : lequel vous convient le mieux ? (Pourrait être les deux)
Publié: 2023-01-26Les équipes DevOps subissent une pression croissante pour fournir rapidement de meilleures fonctionnalités aux clients. Les fournisseurs de cloud offrent une solution via des plates-formes évolutives avec d'excellentes intégrations CLI et API. Malheureusement, les interfaces exposées par les fournisseurs de cloud peuvent être incompatibles. Mais certains outils natifs du cloud aident les équipes DevOps à créer des solutions personnalisées pour n'importe quel fournisseur de cloud.
Deux de ces outils sont Vagrant et Docker. Comprendre ce qu'ils font et comment ils fonctionnent ensemble est essentiel pour tirer le meilleur parti de votre environnement cloud.
Vagrant est un outil permettant de créer et de gérer des environnements de machines virtuelles (VM) dans un flux de travail unique. Que vous construisiez des machines virtuelles locales à exécuter avec des hyperviseurs ou simplement des machines virtuelles cloud, Vagrant fournit un format de configuration cohérent, une CLI unique et des provisionneurs partagés pour installer des logiciels et modifier les configurations.
Docker offre la possibilité de regrouper les logiciels et la configuration de prise en charge dans des images exécutées de manière cohérente sur plusieurs plates-formes. Docker permet aux équipes DevOps d'avoir la certitude que le logiciel fonctionnera sur un poste de travail local de la même manière qu'il s'exécute sur une plate-forme cloud gérée.
Bien que Vagrant et Docker partagent l'objectif de créer des environnements reproductibles, ils le font de manières différentes mais complémentaires. Cet article explore comment Vagrant et Docker atteignent leurs objectifs.
Qu'est-ce que Docker ?
Docker est une plate-forme ouverte pour le développement, la livraison et l'exécution d'applications. Il permet aux équipes DevOps de regrouper des logiciels personnalisés, des applications de support et des bibliothèques, ainsi que des instructions pour la configuration, la mise en réseau, les montages de fichiers, les vérifications de l'état et le lancement de scripts dans un artefact autonome appelé image.
Les images sont ensuite exécutées dans un environnement léger et isolé appelé conteneur. Contrairement aux machines virtuelles, qui réservent généralement des quantités fixes de mémoire et limitent strictement l'utilisation du processeur, les conteneurs sont beaucoup plus élastiques et ne consomment que la mémoire et le processeur dont ils ont besoin.
Cela permet à de nombreux conteneurs de fonctionner côte à côte efficacement, ce qui réduit les coûts et augmente l'échelle. Cependant, les conteneurs ne sont pas considérés comme aussi sécurisés que les machines virtuelles, ce qui signifie que les conteneurs ne sont pas une solution idéale pour exécuter du code non approuvé.
Pourquoi utiliser Docker (vs Vagrant) ?
Les équipes DevOps utilisent généralement Docker pour fournir et exécuter des applications Web, y compris des applications cloud natives qui s'intègrent aux files d'attente de messages ou sont hébergées sur des plateformes de fonction en tant que service (FaaS) répondant aux déclencheurs et événements basés sur le cloud.
Des plates-formes comme Kubernetes s'appuient sur Docker, permettant aux conteneurs d'être orchestrés à grande échelle. De plus, chaque fournisseur de cloud prend en charge la possibilité d'exécuter des conteneurs Docker dans leurs offres de plate-forme en tant que service (PaaS). Il est maintenant rare de trouver un PaaS qui ne supporte pas Docker.
Docker peut également distribuer et exécuter des outils basés sur CLI, avec tous les outils cloud natifs populaires offrant des images Docker intégrant leur CLI.
Quels sont les avantages de Docker ?
Docker résout un problème courant rencontré par les processus de déploiement de logiciels traditionnels, où les applications personnalisées peuvent présenter des résultats différents lorsqu'elles sont exécutées sur le poste de travail local d'un développeur et dans un environnement de production. Ces différences sont souvent dues au fait que les développeurs exécutent différentes versions de langages de programmation, ont des configurations différentes pour prendre en charge des applications telles que des serveurs Web ou exécutent des systèmes d'exploitation complètement différents de ceux de l'environnement de production. Ces différences entraînent des problèmes d'assistance qui vont et viennent entre les équipes avec des commentaires tels que "Cela fonctionne sur ma machine".
Comme les images Docker incluent le code des applications personnalisées, toutes les applications de prise en charge et les bibliothèques, les images s'exécutent dans des conteneurs qui fournissent des résultats plus cohérents, quel que soit l'endroit où elles sont exécutées.
Les images Docker sont faciles à distribuer à l'aide de registres comme Docker Hub, permettant aux équipes DevOps de partager rapidement des images entre elles et de déployer les images à l'aide des différentes plateformes d'hébergement. Par exemple, vous trouverez Docker derrière la suite de développement DevKinsta WordPress de Kinsta.
Lorsque des piles d'applications plus complexes sont nécessaires, comme le déploiement d'une base de données parallèlement à une application backend ou une collection de microservices associés, Docker Compose offre la possibilité de créer et de lier plusieurs conteneurs Docker avec une seule commande. Tous les conteneurs, les paramètres associés et les configurations réseau sont définis dans un seul fichier YAML. Docker Compose lit ensuite ce fichier pour créer et gérer plusieurs conteneurs comme une seule unité.
Docker bénéficie également d'une prise en charge quasi universelle par les principaux fournisseurs de cloud, ce qui signifie que les équipes DevOps n'ont que l'embarras du choix lors de l'exécution de leurs images Docker dans le cloud.
Qu'est-ce que le vagabond ?
Depuis des décennies, les machines virtuelles se sont révélées être une solution fiable et sécurisée pour le partitionnement et le provisionnement des ressources informatiques. Les machines virtuelles restent les services les plus populaires exposés par les fournisseurs de cloud et de nombreuses solutions commerciales et open source pour les équipes cherchent à exécuter des machines virtuelles sur site.
Cependant, cette variété pose un défi aux équipes DevOps. Chaque solution expose une CLI et une API différentes pour créer et gérer des machines virtuelles, ce qui rend difficile le maintien de la cohérence entre les environnements de développement locaux et les plates-formes basées sur le cloud.
Vagrant offre une solution en faisant abstraction des différences sous-jacentes entre les plates-formes de VM, permettant aux équipes DevOps de provisionner de nouvelles VM avec une seule CLI et une syntaxe de configuration cohérente. Les équipes qui adoptent Vagrant peuvent créer des machines virtuelles cohérentes, qu'elles s'exécutent sur site ou dans un environnement cloud, et peuvent facilement basculer entre les environnements. Vagrant a une multitude d'utilisations différentes, y compris en remplacement de MAMP (macOS, Apache, MySQL/MariaDB et PHP, Perl ou Python).
Pourquoi utiliser Vagrant (vs Docker) ?
Il est possible de démarrer une machine virtuelle et de configurer manuellement le système d'exploitation en installant manuellement le logiciel et en modifiant les fichiers de configuration. Ce n'est pas idéal, car le processus n'est pas reproductible, ce qui signifie que les machines virtuelles doivent être recréées manuellement pour différents systèmes d'exploitation et fournisseurs. Cela rend également presque impossible de comprendre comment une machine virtuelle a été configurée à une date ultérieure.
Une meilleure pratique consiste à automatiser le processus requis pour configurer une machine virtuelle. Vagrant fournit un outil unique pour automatiser le processus de construction de machines virtuelles pour de nombreux fournisseurs. Vagrant fournit également une large sélection de machines virtuelles de haute qualité sur Vagrant Cloud que les équipes DevOps peuvent utiliser pour démarrer leurs propres machines virtuelles.
Quels sont les avantages du vagabondage ?
Les équipes DevOps utilisant Vagrant disposent d'un seul outil pour apprendre, qu'elles construisent des machines virtuelles pour des plates-formes sur site, des plates-formes cloud ou les deux. Vous pouvez facilement modifier les fichiers de configuration Vagrant et les réexécuter ou les revoir ultérieurement pour comprendre comment une machine virtuelle a été construite.
Vagrant permet également aux équipes DevOps de migrer vers le cloud ou entre fournisseurs sans repenser le processus qu'elles utilisent pour créer des machines virtuelles.
Les machines virtuelles créées par Vagrant offrent un haut niveau d'isolation, tirant souvent parti de la prise en charge spécialisée de la virtualisation intégrée aux processeurs modernes. Cela fait des machines virtuelles et des outils qui les créent, comme Vagrant, le meilleur choix où la sécurité et l'isolation sont une priorité élevée.
De nombreuses distributions Linux, telles qu'Ubuntu et Fedora, fournissent également des boîtes Vagrant officielles sur lesquelles les équipes DevOps peuvent s'appuyer. Cela réduit le temps nécessaire pour créer des machines virtuelles personnalisées.
Vagrant vs Docker : un examen plus approfondi
Vagrant et Docker rendent les équipes DevOps plus efficaces en automatisant la création, la distribution et l'exécution des applications logicielles.
Docker atteint cet objectif avec un format de packaging personnalisé sous forme d'images et un environnement d'exécution léger via des conteneurs. Les conteneurs s'exécutent de manière cohérente entre les plates-formes, ce qui donne aux équipes DevOps une plus grande confiance dans le fait que leur logiciel fonctionne comme prévu. Docker est bien pris en charge par les plates-formes cloud PaaS et FaaS, permettant aux équipes DevOps de choisir la meilleure plate-forme pour leurs besoins.
De nombreux conteneurs peuvent coexister sur un seul hôte, principalement - mais pas complètement - isolés les uns des autres tout en partageant le même pool de ressources. Cela permet aux conteneurs de s'adapter efficacement.
Vagrant atteint cet objectif en fournissant une méthode cohérente pour construire des machines virtuelles avec des fournisseurs existants. C'est un choix idéal pour les équipes qui ont déjà investi dans des machines virtuelles, en s'appuyant sur leur haut niveau d'isolation, de sécurité, de contrôle et de personnalisation.
Docker fournit également la meilleure solution lors de l'exécution de code de confiance tout en minimisant les coûts de calcul. Les conteneurs sont raisonnablement isolés les uns des autres mais entraînent très peu de frais généraux. Cela signifie que de nombreux conteneurs peuvent s'exécuter simultanément sur un système d'exploitation partagé. Les machines virtuelles offrent la meilleure solution lorsque les équipes ont besoin de niveaux élevés d'isolement et de sécurité ou nécessitent la capacité d'exécuter de nombreux systèmes d'exploitation différents côte à côte, Vagrant fournissant une solution pratique pour créer des machines virtuelles de manière automatisée et reproductible.
Vagrant et Docker ne sont pas des technologies mutuellement exclusives, et les deux outils peuvent être utilisés côte à côte. Par exemple, les équipes DevOps peuvent utiliser Docker pour développer et exécuter des applications tout en utilisant Vagrant pour recréer des environnements spécialisés afin de reproduire les problèmes. Docker peut même être exécuté à l'intérieur d'une machine virtuelle créée par Vagrant, peut-être pour tester de nouvelles versions de Docker ou pour tester des outils distribués sous forme d'images Docker dans un environnement isolé.
Résumé
Les équipes DevOps ont de nombreux choix lors de la création, de la distribution et de l'exécution d'applications.
Docker fournit un format d'image personnalisé et un environnement d'exécution de conteneur qui permet une utilisation efficace et à grande échelle des ressources et est pris en charge sur les plates-formes PaaS et FaaS.
Les machines virtuelles offrent des environnements d'exécution sécurisés et isolés à partir de nombreux fournisseurs de machines virtuelles cloud et sur site, Vagrant éliminant de nombreuses différences pour fournir une seule CLI et une syntaxe de configuration cohérente pour instancier les machines virtuelles entre les fournisseurs.
Avant de commencer à développer votre prochaine application, découvrez comment le service d'hébergement d'applications de Kinsta peut tirer parti des Dockerfiles pour gérer le déploiement de votre code.