DevOps teams staan onder steeds meer druk om snel meer functionaliteit aan klanten te leveren. Cloudproviders bieden hiervoor een oplossing via schaalbare platforms met uitstekende CLI en API integraties. Helaas kunnen de interfaces van cloudproviders incompatibel zijn. Maar sommige cloud-native tools helpen DevOps teams om aangepaste oplossingen te bouwen voor elke cloudprovider.

Twee van zulke tools zijn Vagrant en Docker. Begrijpen wat ze doen en hoe ze met elkaar samenwerken is de beste manier om het meeste uit je cloudomgeving te halen.

Vagrant is een tool voor het bouwen en beheren van virtuele machine (VM) omgevingen binnen een enkele workflow. Of je nu lokale VM’s bouwt om met hypervisors te draaien of alleen cloud VM’s, Vagrant biedt een consistent configuratieformat, een enkele CLI en gedeelde provisioners om software te installeren en configuraties te wijzigen.

Docker biedt de mogelijkheid om software en ondersteunende configuratie te verpakken in images die consistent op meerdere platforms draaien. Met Docker kunnen DevOps teams erop vertrouwen dat software op een lokaal werkstation net zo werkt als op een beheerd cloudplatform.

Hoewel Vagrant en Docker het doel delen om herhaalbare omgevingen te creëren, doen ze dat op verschillende maar complementaire manieren. Dit artikel onderzoekt hoe Vagrant en Docker hun doelen bereiken.

Wat is Docker?

Docker is een open platform voor het ontwikkelen, lanceren en draaien van applicaties. Het stelt DevOps teams in staat om custom software, ondersteunende applicaties en bibliotheken, evenals instructies voor configuratie, netwerken, bestandsmounts, gezondheidscontroles en lanceringsscripts te verpakken in een op zichzelf staand artefact dat een image wordt genoemd.

Images worden dan uitgevoerd in een lichtgewicht, geïsoleerde omgeving die container heet. In tegenstelling tot VM’s, die meestal vaste hoeveelheden geheugen reserveren en het CPU gebruik strikt beperken, zijn containers veel elastischer en gebruiken ze alleen het geheugen en de CPU die ze nodig hebben.

Hierdoor kunnen veel containers efficiënt naast elkaar draaien, waardoor de kosten dalen en de schaal toeneemt. Containers worden echter niet zo veilig geacht als VM’s, wat betekent dat containers geen ideale oplossing zijn voor het draaien van niet-vertrouwde code.

Docker
Docker

Waarom Docker gebruiken (vs Vagrant)?

DevOps teams gebruiken Docker meestal om webapplicaties te leveren en te draaien, inclusief cloud-native applicaties die ofwel integreren met message queues of gehost worden op function-as-a-service (FaaS) platforms die reageren op cloudgebaseerde triggers en events.

Platforms als Kubernetes bouwen voort op Docker, waardoor containers op schaal kunnen worden georkestreerd. Bovendien ondersteunt elke cloudprovider de mogelijkheid om Docker containers te draaien in hun platform as a service (PaaS) aanbod. Het is nu zeldzaam om een PaaS te vinden die Docker niet ondersteunt.

Docker kan ook CLI gebaseerde tooling verspreiden en uitvoeren, waarbij alle populaire cloud-native tools Docker images aanbieden die hun CLI insluiten.

Wat zijn de voordelen van Docker?

Docker lost een veel voorkomend probleem op waar traditionele software deploymentprocessen mee te maken hebben, waarbij customer applicaties verschillende resultaten kunnen vertonen wanneer ze op het lokale werkstation van een developer worden uitgevoerd en in een productieomgeving. Deze verschillen zijn vaak het gevolg van developers die verschillende versies van programmeertalen draaien, verschillende configuraties hebben voor ondersteunende applicaties zoals webservers, of geheel andere besturingssystemen draaien dan de productieomgeving. Deze verschillen leiden tot ondersteuningsproblemen die heen en weer stuiteren tussen teams met opmerkingen als: “Het werkt wél op mijn machine.”

Omdat Docker images de code voor aangepaste applicaties, alle ondersteunende applicaties en bibliotheken bevatten, worden de images uitgevoerd in containers die consistentere resultaten opleveren, ongeacht waar ze worden uitgevoerd.

Docker images zijn gemakkelijk te verspreiden met behulp van registers zoals Docker Hub, waardoor DevOps teams snel images onderling kunnen delen en de images kunnen inzetten met behulp van de verschillende hostingplatforms. Je vindt Docker bijvoorbeeld achter DevKinsta, Kinsta’s WordPress ontwikkelingssuite.

Waar complexere applicatiestacks nodig zijn, zoals het inzetten van een database naast een backend applicatie, of een verzameling gerelateerde microservices, biedt Docker Compose de mogelijkheid om met een enkel commando meerdere Docker containers aan te maken en te koppelen. Alle containers, bijbehorende instellingen en netwerkconfiguraties worden gedefinieerd in een enkel YAML bestand. Docker Compose leest vervolgens dit bestand om meerdere containers als een enkele eenheid aan te maken en te beheren.

Docker wordt ook bijna universeel ondersteund door de belangrijkste cloudproviders, wat betekent dat DevOps teams keuze te over hebben bij het uitvoeren van hun Docker images in de cloud.

Wat is Vagrant?

Al tientallen jaren zijn VM’s een betrouwbare en veilige oplossing voor het partitioneren en beschikbaar stellen van computingresources. VM’s blijven de meest populaire diensten die door cloudproviders worden aangeboden en veel commerciële en open source oplossingen voor teams willen VM’s op locatie draaien.

Deze verscheidenheid vormt echter een uitdaging voor DevOps teams. Elke oplossing stelt een andere CLI en API beschikbaar om VM’s te maken en te beheren, wat het moeilijk maakt om consistentie te handhaven tussen lokale ontwikkelomgevingen en platforms in de cloud.

Vagrant biedt een oplossing door de onderliggende verschillen tussen VM platforms te abstraheren, zodat DevOps teams nieuwe VM’s kunnen maken met een enkele CLI en een consistente configuratiesyntaxis. Teams die Vagrant gebruiken kunnen consistente VM’s maken, ongeacht of ze on-premises of in een cloudomgeving draaien, en kunnen gemakkelijk wisselen tussen omgevingen. Vagrant heeft een groot aantal applicaties, waaronder als MAMP vervanger (macOS, Apache, MySQL/MariaDB en PHP, Perl of Python).

Vagrant
Vagrant

Waarom Vagrant (vs Docker) gebruiken?

Het is mogelijk om een VM op te starten en het besturingssysteem handmatig te configureren door handmatig software te installeren en configuratiebestanden te bewerken. Dit is niet ideaal, omdat het proces niet herhaalbaar is, wat betekent dat VM’s handmatig opnieuw gemaakt moeten worden voor verschillende besturingssystemen en providers. Het maakt het ook bijna onmogelijk om later te begrijpen hoe een VM is geconfigureerd.

Een betere manier is het automatiseren van het proces dat nodig is om een virtuele machine te configureren. Vagrant biedt een enkel tool om het proces van het bouwen van VM’s voor vele providers te automatiseren. Vagrant biedt ook een grote selectie hoogwaardige VM’s op Vagrant Cloud die DevOps teams kunnen gebruiken om hun eigen VM’s te beginnen.

Wat zijn de voordelen van Vagrant?

DevOps teams die Vagrant gebruiken hebben één tool om te leren, ongeacht of ze VM’s bouwen voor on-premise platforms, cloudplatforms, of beide. Je kunt Vagrant configuratiebestanden gemakkelijk aanpassen en ze later opnieuw uitvoeren of bekijken om te begrijpen hoe een VM is opgebouwd.

Met Vagrant kunnen DevOps teams ook migreren naar de cloud of tussen providers zonder het proces dat ze gebruiken om VM’s te bouwen opnieuw in te richten.

De door Vagrant gemaakte VM’s bieden een hoge mate van isolatie, waarbij vaak gebruik wordt gemaakt van gespecialiseerde virtualisatie ondersteuning die in moderne CPU’s is ingebouwd. Dit maakt VM’s, en tools die ze maken, zoals Vagrant, de beste keuze als beveiliging en isolatie een hoge prioriteit hebben.

Veel Linux distributies, zoals Ubuntu en Fedora, leveren ook officiële Vagrant boxen waarop DevOps teams kunnen bouwen. Dit vermindert de tijd die nodig is om aangepaste VM’s te bouwen.

Vagrant vs Docker: Een blik van dichterbij

Zowel Vagrant als Docker maken DevOps teams efficiënter door het bouwen, distribueren en draaien van software applicaties te automatiseren.

Docker bereikt dit doel met een aangepast verpakkingsformat in de vorm van images en een lichtgewicht uitvoeringsomgeving via containers. Containers voeren consistent uit tussen platforms, waardoor DevOps teams er meer vertrouwen in krijgen dat hun software werkt zoals verwacht. Docker wordt goed ondersteund door PaaS en FaaS cloudplatforms, waardoor DevOps teams het beste platform voor hun behoeften kunnen kiezen.

Veel containers kunnen naast elkaar bestaan op een enkele host, voornamelijk – maar niet volledig – geïsoleerd van elkaar, terwijl ze dezelfde pool van resources delen. Hierdoor kunnen containers efficiënt schalen.

Vagrant bereikt dit doel door een consistente methode te bieden voor het bouwen van VM’s met bestaande providers. Het is een ideale keuze voor teams die al hebben geïnvesteerd in VM’s, vertrouwend op hun hoge niveau van isolatie, beveiliging, controle en maatwerk.

Docker biedt ook de beste oplossing voor het draaien van vertrouwde code en het minimaliseren van computerkosten. Containers zijn redelijk van elkaar geïsoleerd, maar hebben weinig overhead. Dat betekent dat veel containers tegelijk kunnen draaien op een gedeeld OS. VM’s bieden de beste oplossing wanneer teams hoge niveaus van isolatie en beveiliging nodig hebben of de mogelijkheid nodig hebben om veel verschillende besturingssystemen naast elkaar te draaien, waarbij Vagrant een handige oplossing biedt om VM’s te bouwen op een geautomatiseerde en herhaalbare manier.

Vagrant en Docker sluiten elkaar niet uit, en beide tools kunnen naast elkaar gebruikt worden. DevOps teams kunnen bijvoorbeeld Docker gebruiken om applicaties te ontwikkelen en te draaien, terwijl ze Vagrant gebruiken om gespecialiseerde omgevingen opnieuw te bouwen om problemen te reproduceren. Docker kan zelfs in een VM draaien die door Vagrant is gemaakt, misschien om nieuwe versies van Docker te testen of om tooling te testen die als Docker images in een geïsoleerde omgeving wordt gedistribueerd.

Samenvatting

DevOps teams hebben veel keuzes bij het bouwen, distribueren en draaien van applicaties.

Docker biedt een aangepast imageformat en containeruitvoeringsomgeving die grootschalig en efficiënt resourcegebruik mogelijk maakt en ondersteund wordt door PaaS en FaaS platforms.

VM’s bieden veilige en geïsoleerde uitvoeringsomgevingen van vele cloud en on-premise VM providers, waarbij Vagrant veel verschillen wegwerkt om een enkele CLI en consistente configuratiesyntax te bieden om VM’s te instantiëren bij verschillende providers.

Voordat je begint met het ontwikkelen van je volgende app, kijk eens hoe Kinsta’s Applicatie Hosting service kan profiteren van Dockerfiles om het deployen van je code te beheren.

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.