Er du nybegynner når det gjelder visualiseringsverktøy? Eller kanskje du prøver å forstå tekniske diskusjoner om containere og virtuelle maskiner?
Virtualisering er prosessen der enkeltstående ressurser, som RAM, CPU, nettverk og disker, kan «virtualiseres» og fremstå som flere ressurser. Hovedforskjellen er at containere kun kan virtualisere programvarelag som er bygget over operativsystemnivået. Derimot kan virtuelle maskiner virtualisere hele maskiner, helt ned til maskinvarenivå.
Selv om det er en klar forskjell mellom disse to, er det også likheter. Begge forbedrer IT-effektiviteten, muliggjør portabilitet for applikasjoner og styrker DevOps og programvareutviklingslivssyklusen (SDLC). Vi skal se nærmere på dette senere.
Dette innlegget vil forklare hva containere og virtuelle maskiner er, se på fordelene med begge, og avslutningsvis gi noen råd om hvordan du velger riktig verktøy for dine behov. Vi forutsetter at du har en grunnleggende forståelse av containere og virtuelle maskiner. Hvis ikke, er dette likevel et flott sted å begynne.
Virtualiseringens Historie
Før containere ble utbredt, var virtuelle maskiner den eneste løsningen for å isolere miljøer i en fysisk infrastruktur. Det var først i 2013 at Docker lanserte sin første containeriseringsprogramvare.
Siden den gang har det vært en enorm interesse for containere, og hvordan de endrer landskapet innen cloud computing.
Mange utviklere har fått øynene opp for fordelene med smidig utvikling som containere tilbyr. Det er viktig å huske at både containere og virtuelle maskiner er utviklet for å optimalisere ressursbruken i eksisterende fysisk infrastruktur.
Hvordan Virtualisering Fungerer
Virtualisering innebærer bruk av programvare for å skape et abstraksjonslag over maskinvare. Dette gjør det mulig å dele maskinvareresurser, for eksempel fra én datamaskin, inn i flere «virtuelle» datamaskiner. Programvaren som brukes til dette kalles en hypervisor.
Hypervisoren lar ulike operativsystemer kjøre samtidig og dele de samme fysiske ressurser. Når dette brukes på fysiske datamaskiner eller servere i datasentre, kan de skille operativsystemer (OS) og applikasjoner fra den fysiske maskinvaren. Deretter kan de deles inn i flere «virtuelle maskiner».
Hva er en Container?
Kilde: docker.com
Containere er en lett og fleksibel metode for å håndtere virtualisering. Siden de ikke krever hypervisorer, gir de raskere ressurstilgang og raskere tilgjengelighet for nye applikasjoner.
Du kan se på containere som programvarepakker som inneholder alle avhengigheter som er nødvendige for å kjøre en applikasjon.
Disse avhengighetene inkluderer systembiblioteker, eksterne (tredjeparts) kodepakker og andre applikasjoner som opererer på operativsystemnivå. Alle avhengigheter i en container eksisterer i lag over operativsystemet.
Fordeler 👍
- Rask iterasjon – Containere er lette og inkluderer kun programvare på høyt nivå. De er enkle å justere, og du kan raskt gjøre endringer. Containere gir også rask programvarelevering på grunn av testdrevet utvikling og enkel distribusjon.
- Robust økosystem – De fleste container-runtime-systemer tilbyr et offentlig depot med ferdige containere. Dette depotet inneholder populære programvareapplikasjoner, som databaser og meldingssystemer, som kan lastes ned og distribueres raskt, noe som sparer utviklingsteam for tid.
- Skalering – Containere er velegnet for å håndtere store arbeidsbelastninger og mye trafikk. IT-eksperter kan bruke containere til å administrere og tilby skyinfrastruktur på en ressurseffektiv måte.
- Mikrotjenester – Containere er ideelle for å distribuere mikrotjenester. Mikrotjenester er mindre komponenter som utgjør en del av en større applikasjon eller programvare. Ved å pakke hver mikrotjeneste som en container, får du en sømløs distribusjon, skalering og administrasjon.
Ulemper 👎
- Delt vertsutnyttelse – Siden containere deler et felles underliggende maskinvaresystem som er bygget under operativsystemet, er det en risiko for at en sårbarhet i en container kan spre seg og påvirke underliggende maskinvare. Det faktum at de fleste containere er basert på offentlige depoter med ferdigbygde containere, introduserer også en sikkerhetsrisiko. Dette gjelder særlig hvis et kompromittert offentlig image utgjør en sårbarhet som kan føre til cyberangrep.
- Kun ett operativsystem – Hvis du kun bruker ett operativsystem, kan containere hjelpe deg med å kjøre tidligere versjoner. Men, containere er ikke det beste alternativet hvis du skal støtte flere operativsystemer.
Populære containerleverandører
Her er noen kjente leverandører av containerløsninger:
- Docker – Docker er den mest brukte containerløsningen globalt. Docker Hub er et stort depot for mange containeriserte applikasjoner. Du kan laste ned containere fra Docker Hub og distribuere en lokal Docker-runtime.
- Linux Containers (LXC) – Linux Containers-prosjektet står bak den åpen kildekode container-runtime for Linux. LXC isolerer operativsystemprosesser fra hverandre. Hvis du ser nærmere på Docker, vil du oppdage at Docker bruker LXC i sin underliggende arkitektur.
Hva er en Virtuell Maskin?
Kilde: docker.com
Virtuelle maskiner (VM-er) er store (tunge) programvarepakker som emulerer maskinvare på lavt nivå, som CPU, disk og nettverksenheter.
VM-er lar deg kjøre flere virtuelle maskiner med forskjellige operativsystemer på én fysisk datamaskin. Hypervisorer sørger for at de virtuelle maskinene kan samhandle med fysiske datamaskiner. Hypervisoren skiller de virtuelle maskinene fra hverandre og fordeler ressurser, som minne og prosessorkraft, mellom dem.
Fordeler 👍
- Full isolasjon – Virtuelle maskiner opererer som separate systemer, og er immune mot sårbarheter og avbrudd fra andre virtuelle maskiner. Hvis et angrep rettes mot en virtuell maskin, er det isolert, noe som gjør det umulig for angrepet å spre seg til andre virtuelle maskiner.
- Interaktiv utvikling – Containere er ofte statiske definisjoner av forventede avhengigheter og konfigurasjoner som er nødvendige for å kjøre containeren. Virtuelle maskiner er dynamiske, noe som gir mulighet for interaktiv utvikling. Når du har spesifisert maskinvarebehovene dine, kan du tenke på den virtuelle maskinen som en «tom» datamaskin. Du kan installere programvare manuelt og bruke den virtuelle maskinen til å fange opp den gjeldende tilstanden. Øyeblikksbilder av den virtuelle maskinen kan brukes til versjonskontroll og gjenopprette den virtuelle maskinen til en bestemt tilstand, eller for å spinne opp flere maskiner med samme konfigurasjon.
Ulemper 👎
- Iterasjonshastighet – Virtuelle maskiner er full-stack programvare og tar tid å bygge. Endringer i et øyeblikksbilde av en virtuell maskin kan ta lang tid å iterere og validere at de siste oppdateringene oppfører seg som forventet.
- Lagringskostnader – Siden VM-er er full-stack programvare, krever de mye lagringsplass og kan raskt vokse til flere gigabyte. Dette kan føre til mangel på diskplass på maskinen som er vert for VM-ene.
Populære leverandører av virtuelle maskiner
Her er noen populære leverandører av virtuelle maskiner:
- Virtualbox – Virtualbox er en av de mest etablerte plattformene for virtuelle maskiner. Virtualbox-økosystemet har tilleggsverktøy for å utvikle og distribuere virtuelle maskinbilder. Det er et gratis og åpen kildekode-system for arkitekturemulering som eies av Oracle.
- VMware – VMware er bygget på x86-arkitektur maskinvare, og er et børsnotert selskap. Denne løsningen leveres med en hypervisor for å distribuere og administrere virtuelle maskiner. Den er populær for sitt robuste brukergrensesnitt (UI) for administrasjon av virtuelle maskiner og som et effektivt verktøy for bedrifter som tilbyr støttefunksjoner.
Containere vs. Virtuelle Maskiner
Selv om virtuelle maskiner har eksistert lenge, blir de i økende grad erstattet av containere for mange bruksområder. Du har sett fordeler og ulemper med begge teknologiene. Her er de viktigste forskjellene:
Funksjon | Containere | Virtuelle Maskiner |
Størrelse og portabilitet | Små og portable på grunn av delt operativsystem. Containere tar opp plass målt i megabyte. Containere kan flyttes mellom forskjellige datamaskiner. | Store og mindre portable. Hver VM har sitt eget operativsystem. Virtuelle maskiner tar opp stor plass, målt i gigabyte. VM-er er ikke portable. |
Operativsystem | Har ikke eget operativsystem. | Har egne operativsystemer og utfører dermed ekstra oppgaver. For eksempel: kjører programmer som er inkompatible med verts-OS, flere programmer på forskjellige operativsystemer, og kjører programmer som ikke kan dele operativsystemressurser og funksjonalitet. |
Oppstartshastighet | Containere kjører raskere enn virtuelle maskiner fordi de allerede har et operativsystem i gang. Det tar sekunder å starte. | VM-er er trege, siden de først må starte sine egne operativsystemer. Det tar flere minutter å starte opp. |
Tilgang til ressurser | Containere har tilgang til alle ressursene i vertsmaskinen. | Virtuelle maskiner bruker de spesifikke ressursene som er tildelt dem av hypervisoren. |
Sikkerhet | Mindre sikker. Containere som kjører på et delt operativsystem er sårbare hvis vertsoperativsystemet kompromitteres. | Full isolasjon. Hver VM er isolert fra andre VM-er. |
Distribusjon | Enkel distribusjon på grunn av sin «selvstendige» natur. Det er lett å distribuere, flytte eller oppgradere. | Kompleks distribusjon. Kompleksiteten til VM-er betyr at de krever mer tid for utvikling. Implementering er heller ikke enkelt. |
Kostnad | Prisen på containere er relativt lavere fordi kravene er mindre enn for VM-er. | Prisen på VM-er er relativt høyere – det høye behovet for ressurser, kompleksitet og kostnader er en høyere sum. |
Hvordan Bruke Containere og Virtuelle Maskiner Samtidig
Hvis du lurer på om det er mulig å bruke containere og virtuelle maskiner sammen, er svaret ja. Selv om det er begrensede praktiske tilfeller. Du kan opprette en VM for å emulere spesifikke maskinvarekonfigurasjoner og installere et operativsystem.
Når VM-en har startet operativsystemet og er fullt funksjonell, har du et emulert beregningssystem med spesifikk maskinvare som du kan installere containere på.
Et godt eksempel er å eksperimentere med distribusjonssystemer for chip. Noen populære metoder for databehandlingsenheter på chip, som BeagleBone utviklingskort og Raspberry Pi, kan emuleres som virtuelle maskiner for å eksperimentere med operative (kjørende) containere før testing på fysisk maskinvare.
En annen fordel med å bruke containere og virtuelle maskiner sammen er økt sikkerhet. Du kan for eksempel distribuere containere i virtuelle maskiner. Tenk deg at ti containere er distribuert på én datamaskin. Hvis datamaskinen blir kompromittert, risikerer du å påvirke alle ti containerne. Løsningen er å fordele de ti containerne på ti virtuelle maskiner. Hvis en virtuell maskin blir kompromittert, vil de andre delene av systemapplikasjonen være operative.
Siste Ord
Hvis prosjektet ditt krever spesifikke maskinvarespesifikasjoner, eller du utvikler på en maskinvare og målretter mot en annen, for eksempel Windows vs. MacOS, vil det være best å bruke virtuelle maskiner. I andre tilfeller der kravene kun gjelder programvare, vil det beste alternativet være å bruke containere.
I de fleste tilfeller vil dine behov dekkes av ett av de to alternativene. For å velge det beste alternativet, må du forstå ressursbehovene dine og de tilhørende avveiningene. Riktig verktøy vil derfor avhenge av prosjektet ditt.
Hvis du trenger rask og effektiv distribusjon, er containere det beste valget. Hvis organisasjonen din trenger å virtualisere et komplett operativsystem på maskinvare, er VM-er det beste. Hvis du ønsker å maksimere sikkerheten, vil en kombinasjon av begge være best, selv om dette medfører en ekstra kostnad.
Til slutt er både containere og virtuelle maskiner gode løsninger. Dine spesifikke behov bør være den avgjørende faktoren. Hvis du trenger mer veiledning og en dypere forståelse, foreslår jeg at du undersøker sammenligningen mellom Docker og virtuelle maskiner.