Docker vs Vagrant

Docker vs Vagrant

Utviklings- og operasjonsteam har taklet kompleksiteten i programvaremiljøer siden begynnelsen. Det er et vanlig problem der arbeidskode i ett miljø ikke fungerer i et annet. Både Docker og Vagrant er med på å skape forutsigbare og repeterbare utviklingsmiljøer. Imidlertid bruker Docker containerteknologi mens Vagrant bruker virtuelle maskiner for å oppnå dette målet. Å forstå styrkene og svakhetene til Docker og Vagrant vil hjelpe utviklere med å blande og matche disse verktøyene for å oppnå de ønskede resultatene. La oss starte med de underliggende teknologiene først.

Virtuelle maskiner

En virtuell maskin (VM) emulerer en fysisk datamaskin. Den leveres med sitt eget komplette operativsystem og ressursallokering. Vertsmaskinen gir de nødvendige fysiske ressursene, men det virtualiserte miljøet fungerer som en uavhengig maskin med egne BIOS-, CPU-, lagrings- og nettverksadaptere. Selv om VMware i dag er mest kjent for den moderne VM -teknologien, har den virtuelle maskinideen eksistert i lang tid. I 1965 trengte IBM Yorktown Research Center en måte å måle effektiviteten til forskjellige informatikkideer. Forskerteamet ønsket å veksle mellom funksjoner og måle resultatene. Teamet utviklet et ordning for å dele en enkelt maskin i mindre partisjoner. De mindre partisjonene ville administrere sine egne ressurser. De ville være små virtuelle maskiner. VM -ideen var vellykket. IBM begynte å lage operativsystemer basert på virtuelle maskiner. IBM System 370 (s/370) og IBM System 390 (s/390), begge IBM VM/ESA -baserte systemer, ble populære blant bedrifter og universiteter fordi de tillot institusjonene å la brukerne sine dele databehandlingsressurser uten å påvirke hverandres miljøer. Ideen var også med på å lage UNIX -operativsystemet og Java -programmeringsspråket.

Moderne virtuelle maskiner kjøres på hypervisorer. Hypervisorer er programvaren, firmware eller maskinvare som er ansvarlig for oppretting og utførelse av VMS. Det er mange hypervisorer tilgjengelig i markedet. KVM, Red Hat Enterprise Virtualization (RHEV), XenServer, Microsoft Hyper-V og VMware vSphere / ESXi er de fremtredende spillerne. I dag har virtuelle maskiner ansporet veksten av skyberegning. Amazon AWS, Microsoft Azure, Google Cloud, Digital Ocean og andre skyselskaper er sterkt avhengig av virtualiseringsteknologi.

Containere

Containere skaper virtualisering på operativsystemnivå. De fungerer som en kjørbar programvarepakke som isolerer applikasjoner fra det omgivende miljøet. Inne i pakken har en beholder de nødvendige egenskapene som kode, runtime, systembiblioteker og verktøy for å holde applikasjonen adskilt fra utenfra påvirkning. Den kjører på operativsystemet til vertsmaskinen. Containere deler biblioteker og binære filer når det er mulig og skiller bare de absolutt nødvendige ressursene.

I 1979 kunne "Chroot" -systemanrop isolere prosesser for UNIX. Det var det første frøet fra containerideen. Den tidlige containerteknologien startet med FreeBSD -fengsler i 2000. Et år senere tillot Linux Vserver flere Linux -maskiner å kjøre på en enkelt vert. I 2004 ga Oracle Solaris Zones lignende funksjonalitet som FreeBSD -fengsler. I 2006-2007 utviklet Google Process Container og slo den sammen i Linux-kjernen. Linux Containers (LXC) ble opprettet i 2008 for å dra nytte av Linux CGroups og navnefelt. I 2013 ble Docker opprettet gjennom å kombinere LXC -ideer. Den la også til verktøy for enkelt å bygge og hente bilder av containere.

Docker

Docker er en open source containerteknologi basert på LXC. Det er populært fordi det gjør det lettere å lage, kjøre og distribuere applikasjoner i et selvstendig miljø. Docker lager ikke et helt operativsystem som en virtuell maskin. I stedet bruker den kjernen til vertens operativsystem og oppretter bare virtualisering for applikasjonen og nødvendige biblioteker. Denne tilnærmingen gjør den mye mer lett enn virtuelle maskiner.

Docker -containere er laget av Docker -bilder. Docker -bilder kan tenkes som øyeblikksbilder av maskiner. Brukere kan enkelt starte en beholder fra et bilde. Bildene er laget som lag. Anta at et utviklingsteam trenger en beholder med Apache og Python installert på en viss versjon av Linux. En utvikler kan laste ned et Linux -bilde fra Docker Hub, starte en container, installere Apache og Python, lage et nytt bilde fra beholderen og dele det bildet. Andre medlemmer av teamet trenger ikke å gå gjennom den samme installasjonen. Det hjelper med å opprettholde et konsistent miljø for alle.

Docker støtter også skripting og multi-container applikasjoner. Brukere kan bruke en tekstbasert DockerFile for å definere krav og deretter bygge containere gjennom Docker-komponering. Eksemplet ovenfor med å lage en Apache/Python/Linux -server kan også oppnås gjennom denne prosessen. Med Docker Compose trenger lag bare å dele Dockerfile for å skape det samme miljøet. Docker har mer spesialiserte verktøy for komplekse oppgaver. Docker Swarm hjelper til med å orkestrere storskala Docker-distribusjoner.

Vagrant

Vagrant er et åpen kildekodeverktøy som hjelper deg med å lage og vedlikeholde virtuelle maskiner. Det fungerer med VirtualBox, VMware, AWS og andre leverandører. Vagrant forenkler styringen av VMS. Ved hjelp av en VagrantFile kan utviklere definere de virtuelle maskinegenskapene som operativsystem, programvareinstallasjoner og andre. Den tekstbaserte VagrantFile kan deles gjennom versjonskontroll, og den nødvendige maskinen kan startes ved å bruke en enkel kommando som "Vagrant Up". Brukere kan deretter logge inn på maskinen som en fysisk server.

Når du skal bruke Docker eller Vagrant

Bruken av Docker eller Vagrant kommer ofte ned på nødvendigheten av containere eller virtuelle maskiner. Her er noen likheter og forskjeller mellom Docker og Vagrant når det gjelder bruk. Både Docker og Vagrant har lett konfigurerbare miljøer som kan kontrolleres gjennom skript. De er også skyvennlige. Vagrant virtuell maskin gir kjernebasert sikkerhetsseparasjon. Separasjonen gjør virtuelle maskiner mindre risikable enn containere. Men Docker -containere er veldig lette. De bruker færre ressurser og er raske i utførelse. Så du kan ha mye flere containere på en enkelt vert enn virtuelle maskiner. Å starte og stoppe containere er nesten øyeblikkelig sammenlignet med VMS. VM -ene går gjennom hele BIOS og operativsystemets oppstartssyklus.

Sikkerhetsseparasjonen av en virtuell maskin gjør en VM-feil mer selvstendig. På den annen side deler containere ressurser og kan ha en kaskaderende krasjffekt. Trusler for containersikkerhet kan også nå kjernen til vertsoperativsystemet. Imidlertid gjør hastigheten på utførelsen og det lette fotavtrykket til containere Docker veldig attraktiv for utvikling. Med en mikroservicearkitektur kan containere fungere godt fordi risikofaktorene blir dempet gjennom bruk av mikroservices. Det gjøres også fremskritt for å gjøre Docker sikrere hver dag.

Fra et praktisk brukssak. I spesifikk vagrant kan det være mer nyttig når du virkelig ønsker å etterligne et helt system, mens Docker kanskje er mer nyttig når du bygger en kontinuerlig integrasjon (CI) testsystem for ofte skiftende programvare. Docker brukes ofte ofte i produksjonsdistribusjoner av applikasjoner for å kjøre nett- eller applikasjonsservere som er statsløse og lett drept og gjenskapt på en hvilken som helst vert eller IP. Så Docker er sannsynligvis mye mer av en vanlig brukssak.

Konklusjon

Docker og Vagrant er begge nyttige teknologier som kan hjelpe utviklere med å forbedre produktiviteten. Hvis applikasjonssikkerhet er en bekymring, kan det være en god idé å bruke Vagrant og VMS. For rask utvikling og deling gir Docker en fordel. De fleste lag bruker begge for å drive en jevn operasjon.