Är du nybörjare när det gäller visualiseringsverktyg? Eller kämpar du med att förstå tekniska diskussioner om containrar och virtuella maskiner?
Virtualisering är en process där enskilda resurser som minne (RAM), processorkraft (CPU), nätverk och lagringsenheter kan ”virtualiseras” och hanteras som om de vore flera resurser. En grundläggande skillnad är att containrar endast kan virtualisera mjukvaruskikt som är byggda ovanpå operativsystemsnivån. Virtuella maskiner å andra sidan, kan virtualisera hela maskiner ner till hårdvaruskiktet.
Trots dessa tydliga skillnader, finns det flera likheter mellan containrar och virtuella maskiner. Båda förbättrar IT-effektiviteten, möjliggör portabilitet av applikationer, optimerar DevOps och accelererar mjukvaruutvecklingslivscykeln (SDLC). Vi kommer att gå in på detaljerna senare i artikeln.
Detta inlägg kommer att bryta ner koncepten kring containrar och virtuella maskiner, utforska fördelarna med båda och avsluta med vägledning om hur du väljer rätt verktyg utifrån dina specifika behov. Vi förutsätter att du har grundläggande kunskaper om containrar och virtuella maskiner. Men även om du är helt ny inom området, kan denna artikel vara en bra start.
Virtualiseringens historia
Innan containrar blev populära, var virtuella maskiner den huvudsakliga metoden för att isolera miljöer inom en fysisk infrastruktur. Det var dock först 2013 som Docker lanserade sin första containeriseringsprogramvara.
Sedan dess har containrar fått ett enormt intresse, och de har haft en stor inverkan på hur molnet ser ut idag.
Många utvecklare har blivit särskilt intresserade av den smidiga utveckling som containrar möjliggör. Det är viktigt att komma ihåg att både containrar och virtuella maskiner bygger på konceptet att optimera resursanvändningen inom befintlig fysisk infrastruktur.
Hur virtualisering fungerar
Virtualisering innebär att man använder programvara för att skapa ett abstraktionslager över datorsystemets hårdvara. Detta gör att hårdvarukomponenter, till exempel i en dator, kan delas upp och användas som flera separata datorer. Programvaran som utför denna process kallas för en hypervisor.
En hypervisor gör det möjligt att köra flera olika operativsystem samtidigt på samma fysiska hårdvara. Genom att applicera detta koncept på fysiska datorer eller servrar i datacenter, kan man separera operativsystem och applikationer från den underliggande hårdvaran. Resultatet blir att den fysiska datorn delas upp i flera ”virtuella maskiner”.
Vad är en container?
Källa: docker.com
Containrar är en lättviktig och flexibel metod för att hantera virtualisering. Eftersom de inte kräver hypervisorer, ger de dig snabbare tillgång till resurser och snabbare leverans av nya applikationer.
Tänk på en container som ett mjukvarupaket som innehåller alla de beroenden som behövs för att köra ett specifikt program.
Dessa beroenden kan inkludera systembibliotek, externa kodpaket (från tredje part) och alla andra applikationer på operativsystemnivå. Alla beroenden som ingår i en container ligger på en högre nivå än operativsystemet.
Fördelar 👍
- Snabb iterationshastighet – Containrar är lätta och innehåller endast programvara på hög nivå. De är enkla att justera och du kan snabbt upprepa utvecklingsprocessen. Tack vare testdriven utveckling och snabb tillgänglighet möjliggör containrar även snabbare mjukvaruleverans.
- Robust ekosystem – De flesta containerkörningssystem erbjuder redan ett stort, publikt register med färdiga containrar. Detta register innehåller en rad populära mjukvaruapplikationer, till exempel databaser och meddelandesystem, som kan laddas ner och användas direkt. Detta reducerar utvecklingsteamens tidsåtgång.
- Skalbarhet – Containrar är ett utmärkt val för att hantera stora arbetsbelastningar och hög trafik. IT-experter kan använda containrar för att hantera och distribuera molninfrastruktur på ett resurseffektivt sätt, vilket ger flexibilitet i användningen.
- Mikrotjänster – Containrar passar utmärkt om du vill distribuera flera mikrotjänster. Mikrotjänster är mindre komponenter som är del av din huvudapplikation eller programvara. Genom att paketera varje mikrotjänst som en separat container, får du en smidig distribution, skalning och hantering.
Nackdelar 👎
- Delad värdmiljö – Eftersom containrar delar samma underliggande hårdvara som är byggd under operativsystemslagret, finns en risk att en säkerhetsbrist i en container kan spridas och påverka den underliggande hårdvaran. Att de flesta containrar har publika register med färdiga containrar utgör också en säkerhetsrisk. Om en komprometterad eller utnyttjad offentlig bild används, kan det skapa sårbarheter som kan leda till cyberattacker.
- Körs endast på ett operativsystem – Om du enbart använder ett operativsystem, kan containrar låta dig köra tidigare versioner, vilket kan vara praktiskt. Däremot är containrar inte det bästa valet om du behöver stöd för flera olika operativsystem.
Populära containerleverantörer
Här är några välkända containerleverantörer:
- Docker – Docker är den mest använda containerlösningen i världen. Docker Hub är ett stort register för de mest populära containerbaserade applikationerna. Du kan ladda ner containrar från Docker Hub och distribuera en lokal Docker-runtime.
- Linux Containers (LXC) – Linux Containers-projektet ligger bakom den öppen källkod-baserade containerkörningen för Linux. LXC isolerar operativsystemsprocesser från varandra. Om du tittar närmare på Docker ser du att Docker använder LXC i sin underliggande arkitektur.
Vad är en virtuell maskin?
Källa: docker.com
Virtuella maskiner (VM), å andra sidan, är stora (tunga) mjukvarupaket som erbjuder en komplett emulering av lågnivåhårdvara, såsom centralprocessorn (CPU), lagringsenheter och nätverkskort.
Med virtuella maskiner kan du köra flera olika operativsystem samtidigt på en enda dator. Som vi nämnde tidigare använder virtuella maskiner hypervisorer för att interagera med den fysiska hårdvaran. Hypervisorer separerar de virtuella maskinerna från varandra och fördelar resurser som minne och processorkraft mellan dem.
Fördelar 👍
- Fullständig isolering och säkerhet – Virtuella maskiner fungerar isolerat som helt separata system, skyddade från störningar och attacker från andra virtuella maskiner. Om en attack riktas mot en specifik virtuell maskin, är den isolerad, vilket gör att attacken inte kan sprida sig till de andra maskinerna.
- Interaktiv utveckling – Containrar är ofta statiska definitioner av de förväntade beroenden och konfigurationer som behövs för att köra containern. Virtuella maskiner är mer dynamiska, vilket möjliggör interaktiv utveckling. När du har angett dina hårdvarukrav, kan du tänka på den virtuella maskinen som en helt ny, avskalad dator. Du kan installera programvara manuellt och använda den virtuella maskinen för att lagra den nuvarande systemkonfigurationen. Ögonblicksbilder av den virtuella maskinen kan användas för versionskontroll, och vid behov kan du återställa den virtuella maskinen till ett visst tillstånd eller skapa fler maskiner med en specifik konfiguration.
Nackdelar 👎
- Långsam iterationshastighet – Virtuella maskiner är fullstacks programvara och tar därför lång tid att bygga. Ändringar i en ögonblicksbild av en virtuell maskin kan ta tid att genomföra och verifiera, för att se till att de senaste uppdateringarna fungerar som förväntat.
- Höga lagringskostnader – Eftersom virtuella maskiner är fullstacks programvara, är de stora. De tar upp mycket lagringsutrymme och kan snabbt växa till flera gigabyte. Det kan leda till brist på lagringsutrymme, antingen på den fysiska maskinen som är värd för de virtuella maskinerna eller på de virtuella maskinerna själva.
Populära leverantörer av virtuella maskiner
Här är några populära leverantörer av virtuella maskiner:
- Virtualbox – Virtualbox är en av de mest etablerade plattformarna för virtuella maskiner. Virtualbox-ekosystemet har extra verktyg för att utveckla och distribuera virtuella maskinbilder. Det är ett gratis emuleringssystem med öppen källkod som ägs av Oracle.
- VMware – VMware är byggt på x86-arkitektur och är ett börsnoterat företag. Denna lösning kommer med en hypervisor för att distribuera och hantera virtuella maskiner. Det är ett populärt val för sitt användarvänliga gränssnitt för att hantera virtuella maskiner, och är ett effektivt företagsverktyg med supportfunktioner.
Containrar kontra virtuella maskiner
Även om virtuella maskiner har funnits länge, har de i många situationer ersatts av containrar. Du har nu sett fördelarna och nackdelarna med båda teknologierna. Här är de viktigaste skillnaderna.
Funktion | Containrar | Virtuella maskiner |
Storlek och portabilitet | Små och portabla tack vare delningen av operativsystemet. Containrar mäter utrymme i megabyte. Kan flyttas mellan olika datorer. | Stora och mindre portabla eftersom varje virtuell maskin har sitt eget operativsystem. Virtuella maskiner tar upp mycket utrymme, mätt i gigabyte. Virtuella maskiner är inte lika portabla. |
Operativsystem | Har inte ett eget operativsystem. | Har sina egna operativsystem, vilket ger extra möjligheter, inklusive möjligheten att köra program som inte är kompatibla med värdoperativsystemet, flera program på olika operativsystem, samt köra applikationer som inte kan dela resurser och funktioner i operativsystemet. |
Hastighet | Containrar startar snabbare än virtuella maskiner på grund av att operativsystemet redan är igång. Starttiden är vanligtvis sekunder. | Virtuella maskiner är långsammare att starta eftersom de först måste starta sina egna operativsystem. Starttiden kan ta flera minuter. |
Tillgång till resurser | Containrar har tillgång till alla resurser i värddatorn. | Virtuella maskiner använder de specifika resurser som tilldelats dem av hypervisorn. |
Säkerhet | Mindre säker. Containrar som körs i en delad värdmiljö är sårbara när värdoperativsystemet blir komprometterat. | Fullständig isolering och säkerhet. Om en virtuell maskin blir komprometterad, påverkas inte de andra. |
Deployment | Enkel distribution tack vare sin ”fristående” natur. Containrar är enklare att distribuera, flytta eller uppgradera. | Komplex distribution. Komplexiteten hos virtuella maskiner innebär att utveckling och implementering tar längre tid. |
Kostnad | Kostnaden för containrar är relativt lägre eftersom det finns färre krav jämfört med virtuella maskiner. | Kostnaden för virtuella maskiner är relativt högre på grund av större resurskrav och komplexitet. |
Hur man använder containrar och virtuella maskiner samtidigt
Om du har funderat på om det är möjligt att använda containrar och virtuella maskiner tillsammans, är svaret ja. Men det finns bara några få praktiska fall. Du kan skapa en virtuell maskin för att emulera en specifik maskinvarukonfiguration och installera ett operativsystem.
När den virtuella maskinen har startat upp och fungerar som den ska, har du ett emulerat beräkningssystem med specifik hårdvara som du sedan kan installera containrar på.
Ett bra exempel på detta är att experimentera med system för inbyggda datorer (on-chip). Populära metoder som utvecklingskort som BeagleBone och Raspberry Pi kan emuleras som virtuella maskiner. Sedan kan du experimentera med att köra containrar, innan du testar dem på den faktiska hårdvaran.
En annan fördel med att använda både containrar och virtuella maskiner är att du kan öka säkerheten. Du kan till exempel distribuera containrar inuti virtuella maskiner. Tänk dig att du har tio containrar som körs på en dator för att illustrera detta.
Om datorn blir komprometterad, riskerar du att alla tio containrar påverkas. Lösningen är att dela upp de tio containrarna på tio separata virtuella maskiner. Om en virtuell maskin blir komprometterad, fortsätter resten av systemet att fungera som vanligt.
Slutord
Om du har exakta hårdvarukrav för ditt projekt, eller om du utvecklar på en typ av hårdvara, men den slutgiltiga produkten ska köras på en annan, som Windows vs. MacOS, är det bäst att använda virtuella maskiner. I andra situationer, där det endast handlar om ”mjukvarukrav”, är det bästa alternativet att använda containrar.
I de flesta fall kommer dina behov att uppfyllas av ett av dessa två alternativ. För att välja det bästa alternativet, måste du förstå dina resursbehov och de olika kompromisser som måste göras. Det rätta verktyget beror därför på vad ditt projekt kräver.
Om du behöver snabb och effektiv distribution, är containrar det bästa valet. Om din organisation behöver virtualisera ett fullständigt operativsystem på en viss hårdvara, är virtuella maskiner det rätta valet. Och om du vill maximera säkerheten, är en kombination av båda det bästa alternativet, men tänk på att detta medför extra kostnader.
Slutligen är både containrar och virtuella maskiner bra lösningar. Det viktigaste är att du utgår från dina specifika behov och krav. Om du behöver ytterligare vägledning och mer djupgående information, kan du söka efter artiklar som jämför Docker med virtuella maskiner.