Con­tai­ne­ri­se­ring med Docker er i dag stan­dar­den – men det er ikke altid den bedste løsning i alle si­tu­a­tio­ner. Værktøjer som Podman eller BuildKit udgør solide al­ter­na­ti­ver, der byder på fordele inden for områder som sikkerhed, CI/CD og ydeevne. I denne artikel ser vi nærmere på de bedste pro­fes­sio­nel­le al­ter­na­ti­ver til Docker, sam­men­lig­ner deres vigtigste funk­tio­ner og hjælper dig med at finde ud af, hvilken løsning der passer bedst til netop dit behov.

Oversigt over Docker-al­ter­na­ti­ver

Funktion Docker Podman BuildKit Kaniko LXC/LXD runC
Vir­tu­a­li­se­ring OS-niveau OS-niveau – (Build-værktøj) – (Build-værktøj) OS-niveau OS-niveau
App-con­tai­ne­re ~
Con­tai­ne­re til hele systemet
Docker-kom­pa­ti­bel ~ ~
Rootless muligt ~ ~
Velegnet til CI/CD ~
Ku­ber­ne­tes-klar ~ ~
Con­tai­ner­for­mat Docker-container Docker-container Do­ck­er­fi­le Lagdelt filsystem LXC OCI
Licens Apache 2.0 Apache 2.0 Apache 2.0 Apache 2.0 LGPLv2.1+ / Apache 2.0 Apache 2.0
Platforme Linux, Windows, macOS, AWS, Azure Linux, Windows Linux, Windows Linux, Ku­ber­ne­tes Linux Linux
Tip

Vil du vide mere om Docker? Se vores separate Docker-vej­led­ning.

Hvorfor overveje al­ter­na­ti­ver til Docker?

Selvom Docker er et effektivt værktøj, er det ikke altid den bedste løsning. Ændringer i Dockers li­censvil­kår, såsom kom­merci­a­li­se­rin­gen af Docker Desktop, har haft ind­fly­del­se på mange virk­som­he­der. Samtidig kan Dockers af­hæn­gig­hed af root-adgang og brugen af en central daemon øge det po­ten­ti­el­le an­grebs­a­re­al, hvilket giver anledning til sik­ker­heds­mæs­si­ge be­kym­rin­ger.

Desuden har Ku­ber­ne­tes, det førende værktøj til con­tai­ner­or­ke­stre­ring, valgt at gå væk fra Docker som standard-runtime. I stedet bruger det nu runtimes som con­tai­nerd eller CRI-O. I mange an­ven­del­ses­si­tu­a­tio­ner – især i sik­ker­heds­føl­som­me miljøer eller au­to­ma­ti­se­re­de CI/CD-processer – kan spe­ci­a­li­se­re­de værktøjer udgøre bedre løsninger.

Podman – Docker uden en daemon

Podman er i øje­blik­ket det mest kendte og direkte al­ter­na­tiv til Docker. Det, der gør det særligt in­ter­es­sant, er, at Podman fungerer uden en central daemon, hvilket giver dig mulighed for at starte con­tai­ner­pro­ces­ser direkte og, hvis nød­ven­digt, uden at kræve root-adgang. Dette øger sik­ker­he­den be­ty­de­ligt, især i pro­duk­tions­mil­jø­er.

Billede: Podman Homepage
Podman Website Scre­ens­hot

En anden fordel er den høje kom­pa­ti­bi­li­tet: Hvis du allerede er fortrolig med Docker, vil du ikke have nogen problemer med Podman, da kom­man­do­struk­tu­ren er næsten identisk. Det in­te­gre­res desuden pro­blem­frit med systemd og Ku­ber­ne­tes.

Der er dog en ulempe: De grafiske bru­ger­græn­se­fla­der (GUI’er) eller GUI-værktøjer til Podman er ikke lige så avan­ce­re­de som dem til Docker Desktop. Desuden kan det ved mere komplekse projekter med flere con­tai­ne­re være nød­ven­digt at foretage nogle ændringer, hvis man skifter fra Docker Compose.

Kon­klu­sion: Podman er ideel for udviklere og ad­mi­ni­stra­to­rer, der søger et sikkert, kom­man­do­linje­ba­se­ret og Docker-kom­pa­ti­belt al­ter­na­tiv – især i Linux-pro­duk­tions­mil­jø­er.

BuildKit – Den moderne Docker-builder

BuildKit er udviklet af Docker-teamet som er­stat­ning for den klassiske kommando »docker build«. Det udmærker sig ved sin overlegne hastighed, in­tel­li­gen­te caching og evnen til at ad­mi­ni­stre­re build-hem­me­lig­he­der, hvilket er en stor fordel i komplekse CI/CD-pipelines.

Der un­der­støt­tes også pa­ral­lel­le kom­pi­le­rin­ger, hvilket gør BuildKit særligt effektivt. Det kan aktiveres i Docker eller bruges som selv­stæn­digt program. Når det kom­bi­ne­res med Docker eller Podman, øger det ydeevnen ved kom­pi­le­ring af billeder markant. Ulempen er dog, at BuildKit ikke erstatter Docker fuld­stæn­digt. Det fokuserer ude­luk­ken­de på kom­pi­le­rings­pro­ces­sen. Hvis man ønsker at ad­mi­ni­stre­re eller im­ple­men­te­re con­tai­ne­re, er man nødt til at bruge et ekstra værktøj.

Kon­klu­sion: BuildKit er ideelt til DevOps-teams og udviklere, der lægger vægt på hurtige og sikre builds – især i au­to­ma­ti­se­re­de miljøer.

Kaniko – Opbygning af con­tai­ne­re uden Docker

Kaniko er et værktøj fra Google, der er specielt udviklet til at kompilere con­tai­ne­re i Ku­ber­ne­tes-miljøer – uden brug af Docker eller root-adgang. Det kører ude­luk­ken­de inden for en pod og kan kompilere billeder direkte i skyen, f.eks. i GitHub Actions eller Google Cloud Build.

Dette gør Kaniko ideel til au­to­ma­ti­se­re­de CI/CD-processer, hvor der ikke skal in­stal­le­res noget ekstra kør­sels­mil­jø. En vigtig fordel med hensyn til sikkerhed er, at Kaniko kører uden root-adgang, hvilket betyder, at det kan bruges sikkert i delte klyn­ge­mil­jø­er. Kaniko er dog ikke et uni­ver­selt værktøj. Det er ikke egnet til lokal udvikling eller in­ter­ak­tivt arbejde i kom­man­do­linj­en – al­min­de­li­ge funk­tio­ner som shell-adgang eller fleksibel con­tai­ner­hånd­te­ring mangler.

Kon­klu­sion: Kaniko er det perfekte valg for teams, der arbejder i cloud-native miljøer, og som ønsker at au­to­ma­ti­se­re con­tai­ner­ba­se­re­de build-processer på en sikker måde – især i Ku­ber­ne­tes-miljøer.

LXC / LXD – Con­tai­ne­ri­se­ring på sy­stem­ni­veau

LXC (Linux Con­tai­ners) er en lavniveau-teknologi til vir­tu­a­li­se­ring af ope­ra­tiv­sy­ste­mer under Linux, som har ek­si­ste­ret i over ti år. Den giver mulighed for at køre og ad­mi­ni­stre­re komplette Linux-systemer i con­tai­ne­re – ofte benævnt sy­stemcon­tai­ne­re.

Billede: LXC Homepage
LXC Homepage Scre­ens­hot

LXD, der blev udviklet af Canonical i 2015, udgør et bru­ger­ven­ligt ad­mi­ni­stra­tions­lag oven på LXC. Det in­de­hol­der funk­tio­ner som sin egen kom­man­do­linje­græn­se­fla­de, et REST-API, bil­led­hånd­te­ring og snapshots, hvilket gør det særligt an­ven­de­ligt i pro­fes­sio­nel­le in­fra­struk­tu­rer.

LXC og LXD – Hvorfor de er blevet forenet igen

I 2023 overdrog Canonical LXD til LXC-fæl­les­ska­bet, og siden da er de to projekter blevet udviklet i fæl­les­skab under Linux Con­tai­ners Project. Formålet med denne sam­men­læg­ning er at sikre en mere gen­nem­sig­tig, fæl­les­skabs­dre­vet ved­li­ge­hol­del­se og en tættere in­te­gra­tion af de to kom­po­nen­ter. Mens LXC fortsat udgør det tekniske fundament, fungerer LXD fortsat som et bru­ger­ven­ligt frontend.

Den funk­tio­nel­le opdeling forbliver uændret:

  • LXC fungerer som den un­der­lig­gen­de teknologi
  • LXD forbliver det bru­ger­ven­li­ge ad­mi­ni­stra­tions­fron­tend

Teknisk klas­si­fi­ce­ring

Sam­men­lig­net med Docker ligger LXC og LXD langt tættere på tra­di­tio­nel­le virtuelle maskiner. De tilbyder komplette sy­stem­mil­jø­er med init-systemer, bru­ge­rad­mi­ni­stra­tion, pak­ke­hånd­te­ring og meget mere – langt ud over de typiske ap­pli­ka­tions­con­tai­ne­re, som Docker eller Podman tilbyder. Da de ikke bruger en hy­per­visor, formår de dog stadig at være lette og ydeevne.

Be­græns­nin­ger

Ulempen er, at LXC/LXD ikke er optimeret til mi­kro­tje­ne­ster, cloud-native im­ple­men­te­rin­ger eller moderne CI/CD-processer. Ad­mi­ni­stra­tio­nen kan være mere kompleks, og in­te­gra­tio­nen i con­tai­ne­røko­sy­ste­mer som Ku­ber­ne­tes er minimal.

Kon­klu­sion: LXC og LXD er frem­ra­gen­de til ad­mi­ni­stra­to­rer, hosting­ud­by­de­re eller teams, der ønsker at isolere komplette Linux-systemer – og fungerer dermed som et let­vægtsal­ter­na­tiv til virtuelle maskiner. Sam­men­læg­nin­gen under Linux Con­tai­ners Project lover en mere stabil fremtid, hvor begge tek­no­lo­gi­er ved­li­ge­hol­des af bru­ger­fæl­les­ska­bet.

runC – Container-runtime til avan­ce­re­de brugere

runC er re­fe­ren­ceim­ple­men­te­rin­gen af OCI-spe­ci­fi­ka­tio­nen (Open Container Ini­ti­a­ti­ve) og bruges i kulissen af mange værktøjer – såsom Docker, Podman eller con­tai­nerd. Enhver, der ønsker at ad­mi­ni­stre­re con­tai­ne­re på det laveste niveau, vil sand­syn­lig­vis være nødt til at bruge runC.

Den største fordel er dens lette opbygning, da runC kun in­de­hol­der det absolut nød­ven­di­ge til at starte con­tai­ne­re, hvilket gør den meget fleksibel. Den er ideel til skræd­der­sy­e­de con­tai­n­er­løs­nin­ger eller sik­ker­heds­o­ri­en­te­re­de miljøer.

runC er dog rettet mod avan­ce­re­de brugere. Det mangler en praktisk kom­man­do­linje­græn­se­fla­de til con­tai­ne­rad­mi­ni­stra­tion eller -opbygning og bruges typisk som en del af bru­ger­de­fi­ne­re­de værk­tøjskæ­der eller til dyb sy­ste­min­te­gra­tion.

Kon­klu­sion: runC er perfekt til spe­ci­a­li­se­re­de an­ven­del­ser, forskning, sikkerhed eller container-miljøer på lavt niveau – det er ikke beregnet til al­min­de­lig udvikling.

Ku­ber­ne­tes – Ikke et al­ter­na­tiv til Docker, men et lag ovenpå

En udbredt mis­for­stå­el­se er, at Ku­ber­ne­tes ikke erstatter Docker. I stedet er det afhængigt af container-runtimes for at kunne køre con­tai­ne­re. Mens Docker engang var standard-runtime, har Ku­ber­ne­tes siden version 1.20 overgået til stan­dar­di­se­re­de runtimes som con­tai­nerd eller CRI-O.

Billede: Kubernetes Homepage
Ku­ber­ne­tes Homepage Scre­ens­hot

Disse værktøjer håndterer con­tai­ne­rad­mi­ni­stra­tion, men har ikke deres egne build- eller CLI-funk­tio­ner som Docker. Derfor er Ku­ber­ne­tes i sig selv ikke et al­ter­na­tiv til Docker, men et or­ke­stre­rings­værk­tøj – et kontrolag oven på con­tai­ner­ne.

I praksis betyder det, at alle, der arbejder med Ku­ber­ne­tes, bør være klar over, at Docker ikke længere udgør det tekniske grundlag – selvom der stadig findes mange billeder i Docker-format.

Hvilket al­ter­na­tiv til Docker passer bedst til dig?

Det rigtige al­ter­na­tiv til Docker afhænger i høj grad af dine spe­ci­fik­ke behov:

  • For optimal sikkerhed er Podman det bedste valg.
  • Til højty­den­de builds skiller BuildKit sig ud, mens Kaniko fo­re­træk­kes i cloud-miljøer.
  • Til isolering af hele systemer er LXC/LXD det bedre valg.
  • For fuld kontrol på runtime-niveau er runC en strøm­li­net løsning til pro­fes­sio­nel­le.

I sidste ende er det værd at se ud over Docker – verdenen af con­tai­ne­re er mere mang­fol­dig end no­gen­sin­de før.

Gå til ho­ved­me­nu­en