Der findes to ho­ved­tek­no­lo­gi­er til ap­pli­ka­tions­im­ple­men­te­ring – Docker og virtuelle maskiner (VM’er). Begge giver mulighed for at isolere ap­pli­ka­tio­ner og res­sour­cer, men de adskiller sig i deres tilgang og an­ven­del­se. I denne artikel giver vi dig et overblik over, hvad Docker og virtuelle maskiner har til fælles, hvordan de adskiller sig, hvad fordele og ulemper ved hver af dem er, og hvilke områder de hver især anvendes i.

Hvad er Docker?

Docker er en vir­tu­a­li­se­rings­løs­ning, der gør det muligt at pakke og køre ap­pli­ka­tio­ner og deres af­hæn­gig­he­der i con­tai­ne­re. En Docker-container er et isoleret miljø, der in­de­hol­der alle kom­po­nen­ter­ne i en ap­pli­ka­tion, herunder et ope­ra­tiv­sy­stem, runtime-miljø, bi­bli­o­te­ker og kon­fi­gu­ra­tio­ner. Con­tai­ne­ren kan køres på ethvert system med Docker, uanset forskelle i den un­der­lig­gen­de in­fra­struk­tur. Nogle af fordelene ved Docker er hurtig im­ple­men­te­ring af ap­pli­ka­tio­ner, enkel skalering og lavere res­sour­ce­for­brug end andre vir­tu­a­li­se­rings­tek­no­lo­gi­er som virtuelle maskiner.

Hvad er en virtuel maskine (VM)?

Virtuelle maskiner (VM’er) er en anden måde at vir­tu­a­li­se­re ap­pli­ka­tio­ner på. VM’er er softwa­re­e­mu­le­rin­ger af fysiske com­pu­ter­p­lat­for­me, som gør det muligt at køre flere ope­ra­tiv­sy­ste­mer og ap­pli­ka­tio­ner på en enkelt fysisk vært. De bruges til en række for­skel­li­ge formål, herunder:

  • Ser­ver­kon­so­li­de­ring: Virk­som­he­der kan kon­so­li­de­re flere servere på en enkelt fysisk host for at udnytte hardwaren effektivt og reducere om­kost­nin­ger­ne.
  • Udvikling: Udviklere kan bruge virtuelle maskiner til at simulere for­skel­li­ge ope­ra­tiv­sy­ste­mer og ud­vik­lings­mil­jø­er for at udvikle og teste apps. -Isolering af apps: Virtuelle maskiner gør det muligt at køre ap­pli­ka­tio­ner og deres af­hæn­gig­he­der i isolerede miljøer, hvilket øger sik­ker­he­den og reducerer risikoen for kon­flik­ter mellem apps. -Sikkerhed: Virtuelle maskiner bruges ofte til at simulere for­skel­li­ge an­grebs­sce­na­ri­er og teste sik­ker­heds­kon­cep­ter.

Hvad har Docker og virtuelle maskiner til fælles?

Docker og virtuelle maskiner har fun­da­men­talt for­skel­li­ge tilgange, men de har en række ting til fælles, især inden for områderne po­rta­bi­li­tet, billeder og ver­sions­sty­ring.

Bærbarhed

Både Docker og virtuelle maskiner er ekstremt bærbare og giver dig mulighed for pro­blem­frit at køre ap­pli­ka­tio­ner og deres af­hæn­gig­he­der på for­skel­li­ge systemer og platforme. Docker-con­tai­ne­re kan køres på ethvert system, der har Docker. På samme måde kan virtuelle maskiner im­ple­men­te­res på for­skel­li­ge hy­per­viso­rer og cloud­p­lat­for­me, så længe det på­gæl­den­de miljø un­der­støt­ter den på­gæl­den­de vir­tu­a­li­se­rings­tek­no­lo­gi.

Billeder

En anden lighed mellem Docker og virtuelle maskiner er deres koncept med images. VM- og Docker-images fungerer som ska­be­lo­ner, der beskriver til­stan­den og kon­fi­gu­ra­tio­nen af et program eller ope­ra­tiv­sy­stem. I begge tilfælde kan images ver­sio­ne­res og ad­mi­ni­stre­res for at spore og ved­li­ge­hol­de de for­skel­li­ge versioner af et program eller ope­ra­tiv­sy­stem. Det giver udviklere mulighed for at sikre kon­si­sten­te og re­pro­du­cer­ba­re im­ple­men­te­rin­ger og sy­ste­ma­tisk spore ændringer, der foretages i pro­gram­mer og sy­stem­kon­fi­gu­ra­tio­ner. Brugen af images forenkler også sam­ar­bej­det mellem udvikling, test og pro­duk­tion, da udviklere og drift­steams kan bruge de samme images til at sikre, at apps im­ple­men­te­res kon­si­stent i for­skel­li­ge miljøer.

Ver­sions­sty­ring

Både Docker og virtuelle maskiner un­der­støt­ter ver­sions­sty­ring af billeder, hvilket forenkler ud­vik­lings­pro­ces­sen og sikrer en ensartet im­ple­men­te­ring af apps. Ver­sions­sty­ring giver udviklere mulighed for at spore og fortryde ændringer af billeder, hvilket sikrer sta­bi­li­te­ten og på­li­de­lig­he­den af deres apps.

Hvad er for­skel­len mellem Docker og virtuelle maskiner?

Selvom både Docker og virtuelle maskiner bruges til at køre apps i for­skel­li­ge miljøer, anvender de for­skel­li­ge tilgange til at gøre dette. Nedenfor beskriver vi nogle af de vigtigste forskelle.

Mål

Ho­ved­for­må­let med Docker er at im­ple­men­te­re apps og tjenester i con­tai­ne­re, der giver isolerede, bærbare miljøer. Docker fokuserer på at forbedre apps’ ef­fek­ti­vi­tet og ska­ler­bar­hed og forenkle deres im­ple­men­te­ring.

Derimod tilbyder virtuelle maskiner et komplet vir­tu­a­li­se­rings­mil­jø, hvor flere ope­ra­tiv­sy­ste­mer kan køre på en enkelt vært. Deres ho­ved­for­mål er at give brugerne mulighed for at oprette et isoleret virtuelt miljø, der er uaf­hæn­gigt af den un­der­lig­gen­de hardware.

Ar­ki­tek­tur

Docker-con­tai­ne­re deler res­sour­cer med værts­o­pe­ra­tiv­sy­ste­met og dets kerne. Det betyder, at de har mindre overhead og hurtigere op­start­s­ti­der end virtuelle maskiner.

Virtuelle maskiner emulerer et komplet hardwa­re­mil­jø og har deres egen ope­ra­tiv­sy­ste­min­stans, der er uafhængig af værts­o­pe­ra­tiv­sy­ste­met og andre virtuelle maskiner. Dette giver øget isolation, men kræver flere res­sour­cer og har længere op­start­s­ti­der end con­tai­ne­re.

Sikkerhed

Docker-con­tai­ne­re deler en kerne med værts­o­pe­ra­tiv­sy­ste­met, hvilket kan udgøre en sik­ker­heds­ri­si­ko. Et con­tai­ner­bil­le­de, der in­de­hol­der fejl eller malware, kan påvirke hele værten.

Derimod kører VM’er på deres eget ope­ra­tiv­sy­stem, hvilket betyder, at de er mere isolerede. Dette giver et højere sik­ker­heds­ni­veau, da angreb på en VM generelt kun påvirker den på­gæl­den­de VM.

Res­sour­cer

Docker-con­tai­ne­re deler res­sour­cer med værts­o­pe­ra­tiv­sy­ste­met, hvilket sikrer en mere effektiv ud­nyt­tel­se af hardwaren. Det kan dog være svært at isolere res­sour­ce­kræ­ven­de ar­bejds­be­last­nin­ger.

Hver VM har sine egne res­sour­cer, der er fuld­stæn­digt isoleret fra andre VM’er. Dette muliggør en mere præcis res­sour­ce­hånd­te­ring og isolering af ar­bejds­be­last­nin­ger.

Ydeevne

Docker-con­tai­ne­re tilbyder generelt bedre ydeevne og kortere op­start­s­ti­der end VM’er.

På grund af deres komplette vir­tu­a­li­se­rings­mil­jø­er har VM’er større overhead og længere op­start­s­ti­der. De er dog bedre egnet til res­sour­ce­kræ­ven­de ar­bejds­be­last­nin­ger, der kræver robust isolering.

Bærbarhed

Docker-con­tai­ne­re kan nemt flyttes mellem for­skel­li­ge miljøer, så længe må­lcom­pu­te­ren har Docker.

VM-billeder er mindre bærbare, da de in­de­hol­der et helt ope­ra­tiv­sy­stem i stedet for blot en enkelt app. Flytning af VM’er mellem for­skel­li­ge hy­per­viso­rer kræver normalt kon­ver­te­ring.

Hvad er fordelene ved Docker i forhold til virtuelle maskiner?

På grund af de forskelle, vi netop har nævnt ovenfor, har Docker og virtuelle maskiner hver deres fordele og er velegnede til for­skel­li­ge an­ven­del­ses­si­tu­a­tio­ner.

Fordele ved Docker

  • Let­vægtscon­tai­ne­re: Docker-con­tai­ne­re bruger færre res­sour­cer end VM’er. De muliggør hurtig im­ple­men­te­ring af apps og effektiv res­sour­ceud­nyt­tel­se.
  • Po­rta­bi­li­tet: Docker-con­tai­ne­re er portable og kan køres på for­skel­li­ge systemer og cloud­p­lat­for­me, så længe miljøet un­der­støt­ter Docker. Dette gør det nemmere at im­ple­men­te­re og skalere apps i for­skel­li­ge miljøer.
  • Hurtig im­ple­men­te­ring: Docker muliggør hurtig im­ple­men­te­ring af apps ved hjælp af con­tai­ner­tek­no­lo­gi. Udviklere kan hurtigt oprette, starte og stoppe con­tai­ne­re, hvilket frem­skyn­der udvikling og im­ple­men­te­ring.
  • Enkel or­ke­stre­ring: Docker-værktøjer som Docker Swarm og Ku­ber­ne­tes gør det nemmere at or­ke­stre­re con­tai­ne­re. De gør det muligt at di­stri­bu­e­re con­tai­ne­re mellem flere værter, au­to­ma­ti­se­re skalering og sikre på­li­de­lig­hed.
  • Mi­kro­ser­vi­cear­ki­tek­tur: Docker er velegnet til im­ple­men­te­ring af mi­kro­ser­vi­cear­ki­tek­tu­rer, da det muliggør isolering og im­ple­men­te­ring af in­di­vi­du­el­le tjenester i con­tai­ne­re. Dette forbedrer appers ska­ler­bar­hed, ved­li­ge­hol­del­se og flek­si­bi­li­tet.

Fordele ved virtuelle maskiner

  • Øget isolation: Virtuelle maskiner giver større isolation mellem de enkelte VM’er, da hver VM har sit eget ope­ra­tiv­sy­stem og sine egne res­sour­cer. Det øger sik­ker­he­den og reducerer risikoen for angreb og da­ta­læka­ger.
  • Fuld­stæn­dig vir­tu­a­li­se­ring: VM’er giver dig mulighed for at køre for­skel­li­ge ope­ra­tiv­sy­ste­mer på den samme fysiske vært, hvilket øger kom­pa­ti­bi­li­te­ten mellem for­skel­li­ge ope­ra­tiv­sy­ste­mer og apps.
  • Ældre apps: VM’er kan bruges til at køre ældre apps, der kræver et specifikt ope­ra­tiv­sy­stem­mil­jø. De gør det muligt at køre gamle apps på aktuelle hardwa­re­p­lat­for­me uden at påvirke miljøets sta­bi­li­tet.
  • Præcis res­sour­ce­hånd­te­ring: VM’er tilbyder mere præcis res­sour­ce­hånd­te­ring, da hver VM har sine egne res­sour­cer, der kan ad­mi­ni­stre­res separat. Det giver mulighed for en mere de­tal­je­ret kontrol over res­sour­ce­al­lo­ke­ring og -brug.
  • Sik­ker­heds­kri­ti­ske ap­pli­ka­tio­ner: VM’er er velegnede til at køre sik­ker­heds­kri­ti­ske apps, der kræver en høj grad af isolation og sikkerhed. Ad­skil­lel­sen af ope­ra­tiv­sy­ste­mer og res­sour­cer minimerer sik­ker­heds­ri­si­ci.

Hvad passer bedst til dit projekt? Docker eller virtuelle maskiner?

Valget mellem Docker og virtuelle maskiner afhænger af flere faktorer, herunder app-typen, sik­ker­heds­krav og hvor meget flek­si­bi­li­tet du har brug for. Derfor er det vigtigt at afveje fordelene ved hver af de oven­nævn­te tek­no­lo­gi­er og derefter vælge den, der bedst passer til dit projekts behov.

Docker er særligt velegnet til apps med:

  • korte im­ple­men­te­rings­cy­klus­ser
  • be­græn­se­de res­sour­ce­be­hov til mi­cro­ser­vi­ce-ar­ki­tek­tur
  • hurtig ska­ler­bar­hed
  • fysisk in­fra­struk­tur, der er spredt ud

VM’er er velegnede til:

  • ope­ra­tiv­sy­ste­mer med kun én fysisk in­fra­struk­tur
  • opsætning af ope­ra­tiv­sy­ste­mer med for­skel­li­ge kon­trol­e­le­men­ter
  • ope­ra­tiv­sy­ste­mer med spe­ci­fik­ke af­hæn­gig­he­der
  • specielle krav til hardwa­reres­sour­cer
  • ældre apps, der ikke kan køre på moderne ope­ra­tiv­sy­ste­mer
Gå til ho­ved­me­nu­en