DevOps-teams er under stigende pres for at levere større funktionalitet til kunderne hurtigt. Cloud-udbydere tilbyder en løsning gennem skalerbare platforme med fremragende CLI- og API-integrationer. Desværre kan de grænseflader, som cloud-udbyderne eksponerer, være inkompatible. Men nogle cloud-native værktøjer hjælper DevOps-teams med at bygge tilpassede løsninger til enhver cloud-udbyder.

To værktøjer som gør dette er Vagrant og Docker. Det er vigtigt at forstå, hvad de gør, og hvordan de arbejder sammen, for at få mest muligt ud af dit cloud-miljø.

Vagrant er et værktøj til at opbygge og administrere virtuelle maskinmiljøer (VM) i en enkelt arbejdsgang. Uanset om du opbygger lokale VM’er til at køre med hypervisorer eller blot cloud-VM’er, giver Vagrant et ensartet konfigurationsformat, en enkelt CLI og delte provisioners til at installere software og ændre konfigurationer.

Docker giver mulighed for at pakke software og understøttende konfiguration til images, der køres ensartet på tværs af flere platforme. Docker gør det muligt for DevOps-teams at have tillid til, at software vil køre på en lokal arbejdsstation på samme måde som på en administreret cloud-platform.

Selv om Vagrant og Docker har det samme mål om at skabe gentagelige miljøer, gør de det på forskellige, men komplementære måder. I denne artikel undersøges det, hvordan Vagrant og Docker opnår deres mål.

Hvad er Docker?

Docker er en åben platform til at udvikle, sende og køre applikationer. Den gør det muligt for DevOps-teams at pakke tilpasset software, understøttende applikationer og biblioteker samt instruktioner til konfiguration, netværk, filmounts, sundhedstjek og lanceringsscripts i et selvstændigt artefakt kaldet et image.

Images udføres derefter i et letvægts, isoleret miljø kaldet en container. I modsætning til virtuelle maskiner, som typisk reserverer faste mængder hukommelse og begrænser CPU-forbruget nøje, er containere meget mere elastiske og bruger kun den hukommelse og CPU, de har brug for.

Dette gør det muligt at køre mange containere side om side på en effektiv måde, hvilket reducerer omkostningerne og øger skalerbarheden. Containere anses dog ikke for at være lige så sikre som VM’er, hvilket betyder, at containere ikke er en ideel løsning til at køre ikke-troværdig kode.

Docker
Docker

Hvorfor bruge Docker (vs Vagrant)?

DevOps-teams bruger typisk Docker til at levere og køre webapplikationer, herunder cloud-native applikationer, der enten integreres med beskedkøer eller hostes på FaaS (Function-as-a-service)-platforme, der reagerer på cloud-baserede udløsere og hændelser.

Platforme som Kubernetes bygger på Docker og gør det muligt at orkestrere containere i stor skala. Desuden understøtter alle cloud-udbydere muligheden for at køre Docker-containere i deres PaaS-tilbud (platform as a service). Det er nu sjældent at finde en PaaS, der ikke understøtter Docker.

Docker kan også distribuere og udføre CLI-baserede værktøjer, idet alle populære cloud-native værktøjer tilbyder Docker-images med indlejring af deres CLI.

Hvad er fordelene ved Docker?

Docker løser et almindeligt problem, som traditionelle softwareimplementeringsprocesser står over for, hvor tilpassede applikationer kan udvise forskellige resultater, når de køres på en udviklers lokale arbejdsstation og i et produktionsmiljø. Disse forskelle er ofte resultatet af, at udviklerne kører forskellige versioner af programmeringssprog, har forskellige konfigurationer til understøttelse af applikationer som webservere eller kører helt andre operativsystemer end produktionsmiljøet. Disse forskelle fører til, at supportproblemer hopper frem og tilbage mellem teams med kommentarer som: “Det virker på min maskine.”

Da Docker-images indeholder koden til brugerdefinerede applikationer, alle understøttende applikationer og biblioteker, udføres images i containere, der giver mere konsistente resultater, uanset hvor de køres.

Docker-images er nemme at distribuere ved hjælp af registre som Docker Hub, hvilket gør det muligt for DevOps-teams at dele images indbyrdes hurtigt og implementere images ved hjælp af de forskellige hostingplatforme. For eksempel finder du Docker bag Kinstas DevKinsta WordPress-udviklingspakke DevKinsta.

Når der er behov for mere komplekse applikationsstacks, som f.eks. udrulning af en database sammen med en backend-applikation eller en samling relaterede mikrotjenester, giver Docker Compose mulighed for at oprette og sammenkoble flere Docker-containere med en enkelt kommando. Alle containere, tilknyttede indstillinger og netværkskonfigurationer defineres i en enkelt YAML-fil. Docker Compose læser derefter denne fil for at oprette og administrere flere containere som en enkelt enhed.

Docker nyder også næsten universel understøttelse på tværs af de største cloud-udbydere, hvilket betyder, at DevOps-teams er forkælet med valgmuligheder, når de skal afvikle deres Docker-images i skyen.

Hvad er Vagrant?

I årtier har VM’er vist sig at være en pålidelig og sikker løsning til partitionering og tilrådighedsstillelse af computerressourcer. VM’er er fortsat de mest populære tjenester, der udsættes af cloud-udbydere, og mange kommercielle og open source-løsninger til teams søger at køre VM’er på stedet.

Denne variation udgør imidlertid en udfordring for DevOps-teams. Hver løsning eksponerer en anden CLI og API til at oprette og administrere VM’er, hvilket gør det svært at opretholde konsistens mellem lokale udviklingsmiljøer og cloud-baserede platforme.

Vagrant tilbyder en løsning ved at abstrahere de underliggende forskelle mellem VM-platforme, så DevOps-teams kan tilvejebringe nye VM’er med en enkelt CLI og en konsistent konfigurationssyntaks. Teams, der anvender Vagrant, kan oprette konsistente VM’er, uanset om de skal køre lokalt eller i et cloud-miljø, og de kan nemt skifte mellem miljøer. Vagrant har et væld af forskellige anvendelsesmuligheder, bl.a. som en MAMP-erstatning (macOS, Apache, MySQL/MariaDB og PHP, Perl eller Python).

Vagrant
Vagrant

Hvorfor bruge Vagrant (vs Docker)?

Det er muligt at starte en VM op og manuelt konfigurere operativsystemet ved manuelt at installere software og redigere konfigurationsfiler. Dette er ikke ideelt, da processen ikke kan gentages, hvilket betyder, at VM’er skal genskabes manuelt for forskellige operativsystemer og udbydere. Det gør det også næsten umuligt at forstå, hvordan en VM blev konfigureret på et senere tidspunkt.

En bedre praksis er at automatisere den proces, der kræves for at konfigurere en virtuel maskine. Vagrant giver et enkelt værktøj til automatisering af processen med at konstruere VM’er for mange udbydere. Vagrant tilbyder også et stort udvalg af VM’er af høj kvalitet på Vagrant Cloud, som DevOps-teams kan bruge til at begynde deres egne VM’er.

Hvad er fordelene ved Vagrant?

DevOps-teams, der anvender Vagrant, har et enkelt værktøj at lære, uanset om de opbygger VM’er til on-premises platforme, cloud-platforme eller begge dele. Du kan nemt justere Vagrant-konfigurationsfiler og genudføre eller gennemgå dem på et senere tidspunkt for at forstå, hvordan en VM blev konstrueret.

Vagrant giver også DevOps-teams mulighed for at migrere til skyen eller mellem udbydere uden at omlægge den proces, de bruger til at bygge VM’er.

De VM’er, der oprettes af Vagrant, giver en høj grad af isolation, idet de ofte udnytter den specialiserede virtualiseringsstøtte, der er indbygget i moderne CPU’er. Dette gør VM’er og værktøjer, der skaber dem, som Vagrant, til det bedste valg, når sikkerhed og isolation har høj prioritet.

Mange Linux-distributioner, såsom Ubuntu og Fedora, leverer også officielle Vagrant-bokse, som DevOps-teams kan bygge på. Dette reducerer den tid, det tager at bygge brugerdefinerede VM’er.

Vagrant vs. Docker: Et nærmere kig

Både Vagrant og Docker gør DevOps-teams mere effektive ved at automatisere opbygningen, distributionen og kørslen af softwareapplikationer.

Docker opnår dette mål med et tilpasset pakkeformat i form af images og et letvægtsudførelsesmiljø via containere. Containere udføres ensartet mellem platforme, hvilket giver DevOps-teams større tillid til, at deres software fungerer som forventet. Docker understøttes godt af PaaS- og FaaS-cloud platforme, hvilket giver DevOps-teams mulighed for at vælge den bedste platform til deres behov.

Mange containere kan eksistere side om side på en enkelt vært, primært – men ikke helt – isoleret fra hinanden, mens de deler den samme pulje af ressourcer. Dette gør det muligt for containere at skalere effektivt.

Vagrant opnår dette mål ved at levere en konsistent metode til at konstruere VM’er med eksisterende udbydere. Det er et ideelt valg for teams, der allerede har investeret i VM’er, og som er afhængige af deres høje niveau af isolation, sikkerhed, kontrol og tilpasning.

Docker giver også den bedste løsning, når der skal køres pålidelig kode, samtidig med at computeromkostningerne minimeres. Containere er rimeligt isolerede fra hinanden, men medfører meget lidt overhead. Det betyder, at mange containere kan køre samtidigt på et delt operativsystem. VM’er er den bedste løsning, når teams har brug for et højt niveau af isolation og sikkerhed eller har brug for muligheden for at køre mange forskellige operativsystemer side om side, og Vagrant er en praktisk løsning til at opbygge VM’er på en automatiseret og gentagelig måde.

Vagrant og Docker er ikke teknologier, der udelukker hinanden, og begge værktøjer kan bruges side om side. DevOps-teams kan f.eks. bruge Docker til at udvikle og køre applikationer, mens de bruger Vagrant til at genskabe specialiserede miljøer for at reproducere problemer. Docker kan endda køres inde i en VM, der er oprettet af Vagrant, måske for at teste nye versioner af Docker eller for at teste værktøjer, der distribueres som Docker-images i et isoleret miljø.

Opsummering

DevOps-teams har mange valgmuligheder, når de skal opbygge, distribuere og køre applikationer.

Docker leverer et tilpasset imageformat og et miljø til udførelse af containere, der giver mulighed for storskala og effektiv ressourceudnyttelse og understøttes på tværs af PaaS- og FaaS-platforme.

VM’er tilbyder sikre og isolerede eksekveringsmiljøer fra mange cloud- og lokale VM-udbydere, og Vagrant abstraherer mange forskelle for at give en enkelt CLI og en konsistent konfigurationssyntaks til instantiering af VM’er på tværs af udbydere.

Før du begynder at udvikle din næste app, kan du se, hvordan Kinstas Applikation Hosting-tjeneste kan udnytte Dockerfiles til at styre implementeringen af din kode.

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.