Les équipes DevOps subissent une pression croissante pour fournir rapidement de plus grandes fonctionnalités aux clients. Les fournisseurs de cloud computing offrent une solution grâce à des plateformes évolutives dotées d’excellentes intégrations CLI et API. Malheureusement, les interfaces exposées par les fournisseurs de cloud peuvent être incompatibles. Mais certains outils « cloud-native » aident les équipes DevOps à construire 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) en un seul flux de travail. Que vous construisiez des VM locales pour les exécuter avec des hyperviseurs ou simplement des VM de 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 permet de regrouper les logiciels et la configuration de support dans des images qui sont exécutées de manière cohérente sur plusieurs plateformes. Docker permet aux équipes DevOps d’avoir la certitude que le logiciel s’exécutera sur un poste de travail local de la même manière que sur une plateforme cloud infogérée.

Bien que Vagrant et Docker partagent l’objectif de créer des environnements reproductibles, ils le font de manière différente mais complémentaire. Cet article explore la manière dont Vagrant et Docker atteignent leurs objectifs.

Qu’est-ce que Docker ?

Docker est une plateforme ouverte pour le développement, l’expédition et l’exécution d’applications. Elle 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 contrôles de santé et les scripts de lancement dans un artefact autonome appelé image.

Les images sont ensuite exécutées dans un environnement léger et isolé appelé conteneur. Contrairement aux VM, qui réservent généralement des quantités fixes de mémoire et limitent strictement l’utilisation du CPU, les conteneurs sont beaucoup plus élastiques et ne consomment que la mémoire et le CPU dont ils ont besoin.

Cela permet à de nombreux conteneurs de fonctionner efficacement côte à côte, ce qui réduit les couts et augmente l’échelle. Cependant, les conteneurs ne sont pas considérés comme aussi surs que les VM, ce qui signifie que les conteneurs ne sont pas une solution idéale pour exécuter du code non fiable.

Docker
Docker

Pourquoi utiliser Docker (vs Vagrant) ?

Les équipes DevOps utilisent généralement Docker pour livrer et exécuter des applications web, y compris des applications natives du cloud qui s’intègrent aux files d’attente de messages ou qui sont hébergées sur des plateformes de type « function-as-a-service » (FaaS) répondant à des déclencheurs et des évènements basés sur le cloud.

Des plateformes comme Kubernetes s’appuient sur Docker, ce qui permet d’orchestrer des conteneurs à l’échelle. En outre, tous les fournisseurs de cloud prennent en charge la possibilité d’exécuter des conteneurs Docker dans leurs offres de plate-forme en tant que service (PaaS). Il est désormais rare de trouver un PaaS qui ne prenne pas en charge Docker.

Docker peut également distribuer et exécuter des outils basés sur des CLI, tous les outils natifs du cloud populaires proposant des images Docker intégrant leur CLI.

Quels sont les avantages de Docker ?

Docker résout un problème courant rencontré par les processus traditionnels de déploiement de logiciels, où les applications personnalisées pouvaient présenter des résultats différents lorsqu’elles étaient 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 utilisent des versions différentes des langages de programmation, qu’ils ont des configurations différentes pour supporter des applications comme les serveurs web, ou qu’ils utilisent des systèmes d’exploitation complètement différents de ceux de l’environnement de production. Ces différences conduisent à des problèmes de support rebondissant d’une équipe à l’autre avec des commentaires du type « Ça marche sur ma machine »

Comme les images Docker incluent le code des applications personnalisées, toutes les applications de support 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ù ils sont exécutés.

Les images Docker sont faciles à distribuer à l’aide de registres tels que Docker Hub, ce qui permet aux équipes DevOps de partager rapidement les images entre elles et de les déployer à l’aide des différentes plateformes d’hébergement. Par exemple, vous trouverez Docker derrière la suite de développement WordPress DevKinsta de Kinsta.

Lorsque des piles d’applications plus complexes sont nécessaires, comme le déploiement d’une base de données aux côtés d’une application backend, ou une collection de micro-services connexes, Docker Compose permet de créer et de lier plusieurs conteneurs Docker avec une seule commande. Tous les conteneurs, les réglages 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 clouds, ce qui signifie que les équipes DevOps ont l’embarras du choix pour exécuter leurs images Docker dans le cloud.

Qu’est-ce que Vagrant ?

Depuis des décennies, les VM se sont avérées être une solution fiable et sure pour le partitionnement et le provisionnement des ressources informatiques. Les VM restent les services les plus populaires exposés par les fournisseurs de clouds et de nombreuses solutions commerciales et open source pour les équipes qui cherchent à exécuter des VM sur site.

Cependant, cette variété pose un défi aux équipes DevOps. Chaque solution expose un CLI et une API différents pour créer et gérer les VM, ce qui rend difficile le maintien de la cohérence entre les environnements de développement locaux et les plateformes basées sur le cloud.

Vagrant offre une solution en abstrayant les différences sous-jacentes entre les plateformes 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 VM cohérentes, qu’elles soient exécutées sur site ou dans un environnement cloud, et peuvent facilement passer d’un environnement à l’autre. Vagrant a une multitude d’utilisations différentes, notamment comme remplacement de MAMP (macOS, Apache, MySQL/MariaDB et PHP, Perl ou Python).

Vagrant
Vagrant

Pourquoi utiliser Vagrant (vs Docker) ?

Il est possible de démarrer une VM et de configurer manuellement le système d’exploitation en installant manuellement les logiciels 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 VM doivent être recréées manuellement pour différents systèmes d’exploitation et fournisseurs. Il est également presque impossible de comprendre comment une VM a été configurée à une date ultérieure.

Une meilleure pratique consiste à automatiser le processus nécessaire à la configuration d’une machine virtuelle. Vagrant fournit un outil unique pour automatiser le processus de construction de VM pour de nombreux fournisseurs. Vagrant fournit également une large sélection de VM de haute qualité sur Vagrant Cloud que les équipes DevOps peuvent utiliser pour commencer leurs propres VM.

Quels sont les avantages de Vagrant ?

Les équipes DevOps qui utilisent Vagrant disposent d’un seul outil à apprendre, qu’elles construisent des VM pour des plateformes sur site, des plateformes cloud ou les deux. Vous pouvez facilement modifier les fichiers de configuration de Vagrant et les réexécuter ou les examiner ultérieurement pour comprendre comment une VM a été construite.

Vagrant permet également aux équipes DevOps de migrer vers le cloud ou d’un fournisseur à l’autre sans avoir à revoir le processus qu’elles utilisent pour construire les VM.

Les VM créées par Vagrant offrent un haut niveau d’isolation, en tirant souvent parti du support de virtualisation spécialisé intégré aux CPU modernes. Cela fait des VM, et des outils qui les créent, comme Vagrant, le meilleur choix lorsque la sécurité et l’isolation sont une priorité élevée.

De nombreuses distributions Linux, comme Ubuntu et Fedora, fournissent également des boîtes Vagrant officielles sur lesquelles les équipes DevOps peuvent construire. Cela réduit le temps nécessaire à la création de VM personnalisées.

Vagrant vs Docker : Un regard plus attentif

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 plateformes, ce qui donne aux équipes DevOps une plus grande confiance dans le fait que leurs logiciels fonctionnent comme prévu. Docker est bien supporté par les plateformes cloud PaaS et FaaS, ce qui permet aux équipes DevOps de choisir la meilleure plateforme 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 d’évoluer efficacement.

Vagrant atteint cet objectif en fournissant une méthode cohérente pour construire des VM avec des fournisseurs existants. C’est un choix idéal pour les équipes qui ont déjà investi dans les VM, en s’appuyant sur leur haut niveau d’isolation, de sécurité, de contrôle et de personnalisation.

Docker constitue également la meilleure solution pour exécuter du code de confiance tout en minimisant les couts informatiques. Les conteneurs sont raisonnablement isolés les uns des autres mais entrainent très peu de frais généraux. Cela signifie que de nombreux conteneurs peuvent fonctionner simultanément sur un système d’exploitation partagé. Les VM constituent la meilleure solution lorsque les équipes ont besoin de niveaux élevés d’isolation et de sécurité ou qu’elles doivent pouvoir exécuter de nombreux systèmes d’exploitation différents côte à côte. Vagrant offre une solution pratique pour créer des VM de manière automatisée et reproductible.

Vagrant et Docker ne sont pas des technologies qui s’excluent mutuellement, 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 des problèmes. Docker peut même être exécuté à l’intérieur d’une VM 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 lorsqu’elles construisent, distribuent et exécutent des applications.

Docker fournit un format d’image personnalisé et un environnement d’exécution de conteneur qui permet une utilisation efficace des ressources à grande échelle et qui est pris en charge par les plateformes PaaS et FaaS.

Les VM offrent des environnements d’exécution sécurisés et isolés à partir de nombreux fournisseurs de VM dans le cloud et sur site, Vagrant faisant abstraction de nombreuses différences pour fournir une CLI unique et une syntaxe de configuration cohérente pour instancier les VM à travers les fournisseurs.

Avant de commencer à développer votre prochaine application, regardez comment le service d’hébergement d’applications de Kinsta peut tirer parti des Dockerfiles pour gérer le déploiement de votre code.

Salman Ravoof

Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.