LXC framfor Docker: når en lettvekts-VM slår en app-container

Docker på en eldre server med noen få tjenester, for eksempel Nextcloud, en medieserver og en backup-agent, fungerer fint en stund. Så kommer de rare feilene: tjenester som faller ut ved oppstart, konflikter mellom tjenester som ikke har noe med hverandre å gjøre, og backup-jobber som slutter å kjøre uten fornuftige feilmeldinger. Årsaken er ofte at Dockers abstraksjon av nettverk og lagring skjuler enkle problemer, som at to tjenester deler samme port på localhost, eller at et nettverksoppsett blir stående igjen når en container stoppes. Vi kjører selv tjenestene våre i LXC.

Hva er egentlig forskjellen?

Docker og LXC løser ulike problemer, og det er derfor mange blander dem.

Docker er bygd for å kjøre én applikasjon per container, gjerne som et uforanderlig bilde. Når du oppdaterer, sletter du containeren og setter inn en ny. Alt ligger i bildet.

LXC er en lettvekts-VM: du får et helt operativsystem i en container, uten overheaden fra virtualisering. Her kjører du flere tjenester sammen, og du oppdaterer som vanlig med apt eller dnf.

Docker er et byggeverktøy. LXC er et kjøresystem.

Når LXC er det klare valget

  • Tjenester med lang levetid. En tjeneste som skal kjøre i måneder eller år uten å byttes ut, trenger ikke uforanderlig deploy. LXC lar deg oppgradere pakker direkte, og konfigurasjonen blir stående.
  • Når du trenger et fullt OS. Trenger du systemd, dbus, cron eller andre systemtjenester, gir LXC deg et vanlig systemmiljø. I Docker må du hacke det til, og det blir ofte bråk.
  • Enkel lagring og backup. Med LXC tar du snapshot av hele containerens filsystem med LVM eller ZFS, eller kopierer /var/lib/lxc/. Med Docker må du huske å eksportere volumes, håndtere rettigheter og ofte skrive egne skript for å få med alt.
  • Lavere overhead. LXC deler kjerne med verten og kjører ingen ekstra daemon. Docker krever at dockerd kjører hele tiden, og hver container er en underprosess av den. I en homelab med mange små tjenester blir det synlig i ressursbruken.

Når Docker er riktig

Docker er ikke dårlig, bare noe annet. Det passer når:

  • Du kjører mange like instanser. En webapp med 20 replikaer kjøres i praksis bare med Docker Swarm eller Kubernetes.
  • Du bygger CI/CD-pipelines. En byggecontainer som kjører mvn package eller npm run build og så kastes, er perfekt Docker-bruk. Ingen grunn til å holde et fullt OS for det.
  • Du trenger isolerte byggemiljøer. Skal du teste en ny versjon av Python, Node eller Rust uten å blande det inn i systemet, er en Docker-container raskere å sette opp enn et nytt virtuelt miljø.
  • Du vil bruke offentlige bilder. nginx:alpine, postgres:16 og redis:latest er enkle, kjente og ofte oppdaterte. Men det er ikke produksjon før du har bygd ditt eget bilde med riktig konfigurasjon.

Vanlige myter om LXC

Noen mener LXC bør unngås fordi det er for komplisert. Det stemmer ikke.

  • Konfigurasjonen er enkel. En container er en mappe med en konfigurasjonsfil (config) og et rotfilsystem. Du redigerer den i en teksteditor og endrer nettverk, lagring og ressurser uten å starte containeren på nytt.
  • Oppgradering er trygt. Ta et snapshot før apt upgrade, og rull tilbake på sekunder hvis noe går galt.
  • Det er ikke hobbyteknologi. LXC brukes i produksjon hos store aktører, blant annet i skyløsninger som trenger mange isolerte miljøer med lav overhead.

En konkret beslutningsguide

Spør deg selv:

  1. Hva kjører du? Én applikasjon, eller flere tjenester som Nextcloud, backup og overvåking sammen?
  2. Hvor ofte oppdaterer du? Ny versjon hver uke, eller pakkeoppdateringer noen ganger i året?
  3. Hvordan sikrer du data? Har du allerede backup av filsystemet, eller vil du bruke volumes?
  4. Hva er målet? Rask deploy av ny kode, eller stabilitet over lang tid?

Er svarene «flere tjenester», «sjeldne oppdateringer», «jeg har LVM-snapshot» og «jeg vil ha stabilitet», velg LXC.

Er svarene «én tjeneste», «daglig deploy», «jeg bruker Docker Compose» og «jeg vil ha rask iterasjon», velg Docker.

Ingen av dem er galt. Spørsmålet er hvilket verktøy som passer oppgaven.

Trenger du hjelp til å velge for din infrastruktur? Ta kontakt, så ser vi på hva du faktisk kjører og hva som gir mening der.