Teknologi & innovasjonPublisert: 28. desember 2024Sist oppdatert: 18. juni 20269 min lesing

Docker forklart enkelt — containere for nybegynnere

Docker har revolusjonert programvareutvikling. Vi forklarer containere fra grunnen av — uten jargong, med praktiske eksempler.

Norsk Næring
Norsk NæringRedaksjon
Docker-containere pakker applikasjoner med alt de trenger for å kjøre — som en skipskontainer…

Docker-containere pakker applikasjoner med alt de trenger for å kjøre — som en skipskontainer for programvare.

Hva er Docker? Vi forklarer containere for nybegynnere uten jargong: forskjellen fra VM, grunnleggende kommandoer, Docker Compose og en intro til Kubernetes.

Annonse

Problemet som Docker løser

Du har sikkert hørt "men det fungerte på min maskin!". Det klassiske scenariet: en utvikler lager en applikasjon som fungerer perfekt lokalt, men krasjer i produksjon fordi serveren har en annen versjon av Python, andre systembibilioteker eller et annet operativsystem.

Docker løser dette ved å pakke applikasjonen sammen med alt den trenger — runtime, biblioteker, konfigurasjonsfiler — i en isolert enhet kalt en container. Containeren kjører identisk på din laptop, i skyen og på kollegaens maskin. "Works on my machine" blir irrelevant.

Containere vs. virtuelle maskiner — hva er forskjellen?

En virtuell maskin (VM) emulerer en hel fysisk datamaskin, inkludert eget operativsystem (Guest OS). Å starte en VM tar gjerne 30–60 sekunder og bruker gigabytes med minne. Docker-containere deler i stedet vertens OS-kjerne (kernel) og starter på millisekunder. En typisk container bruker 50–100 MB minne mot en VMs 1–4 GB.

Analogien er god: VMer er som separate leiligheter i en bygård (hvert med eget kjøkken og bad), mens containere er som kontorplasser i et åpent kontorlandskap — hver med sin egne arbeidsplass, men delt infrastruktur.

Container oppstartstid< 1 sekund
VM oppstartstid30–60 sekunder
Container størrelse (typisk)50–500 MB
VM størrelse (typisk)5–50 GB
IsolasjonContainer: prosess-nivå / VM: OS-nivå
YtelsesoverheadContainer: ~1–3 % / VM: ~5–15 %

Grunnleggende begreper: Image, Container, Dockerfile

Et Docker Image er en uforanderlig mal — en "oppskrift" for å lage en container. Et Image er lagbasert: hvert lag representerer en endring (installer pakke, kopier fil, sett miljøvariabel). Images lagres i Docker Hub (offentlig) eller private registries.

En Docker Container er en kjørende instans av et Image. Du kan starte mange containere fra samme Image. En Dockerfile er tekstfilen som beskriver hvordan et Image skal bygges, steg for steg. Docker Compose er et verktøy for å definere og kjøre fler-container-applikasjoner via en YAML-fil.

Annonse

Grunnleggende Docker-kommandoer

De viktigste kommandoene for å komme i gang: "docker pull nginx" laster ned nginx-imaget fra Docker Hub. "docker run -d -p 8080:80 nginx" starter en nginx-container i bakgrunnen og kobler port 8080 på din maskin til port 80 i containeren. "docker ps" viser kjørende containere. "docker stop CONTAINER_ID" stopper en container.

"docker build -t min-app:1.0 ." bygger et image fra Dockerfile i gjeldende mappe. "docker exec -it CONTAINER_ID bash" åpner en terminal inne i en kjørende container — svært nyttig for feilsøking. "docker logs CONTAINER_ID" viser logger fra en container.

  • docker pull IMAGE — last ned image fra Docker Hub
  • docker run -d -p HOST:CONTAINER IMAGE — start container i bakgrunnen
  • docker ps — vis kjørende containere (docker ps -a for alle)
  • docker stop / docker rm — stopp og slett container
  • docker build -t NAVN:TAG . — bygg image fra Dockerfile
  • docker exec -it ID bash — åpne terminal i kjørende container

Docker Compose — fler-container-applikasjoner

De fleste applikasjoner trenger flere tjenester: en webserver, en database og kanskje en cache. Docker Compose lar deg definere dette i én docker-compose.yml-fil. Med "docker compose up" starter alle tjenester i riktig rekkefølge med riktige nettverkskoblinger.

Et typisk eksempel: en WordPress-installasjon med WordPress-container og MySQL-container. docker-compose.yml definerer begge services, hvilke volumes (vedvarende lagring) de bruker, og at WordPress kan nå MySQL via hostname "db". Ingen komplisert nettverkskonfigurasjon — Compose håndterer det automatisk.

""Docker er den største endringen i programvareutvikling siden git. Det ble standard raskere enn noe annet verktøy i min karriere.""

— Kelsey Hightower, Google Cloud Developer Advocate

Kubernetes — neste steg etter Docker

Kubernetes (k8s) er et orkestreringssystem for containere i produksjon. Der Docker håndterer enkeltstående containere, håndterer Kubernetes tusenvis av containere fordelt på mange servere. Kubernetes sørger for automatisk skalering (starter flere containere ved høy trafikk), selvhelbredelse (restarter krasj-containere) og nulldriftstid-deployments.

For norske bedrifter er administrerte Kubernetes-tjenester som Azure Kubernetes Service (AKS), Google Kubernetes Engine (GKE) og Amazon EKS mest praktiske. Norske sky-aktører som Telenor og Evry tilbyr også Kubernetes-plattformer med lokal datasovrenitet.

Slik kommer du i gang

Installer Docker Desktop (docker.com/products/docker-desktop) — gratis for personlig bruk og småbedrifter. Start med å kjøre ferdiglagde images: "docker run hello-world" verifiserer installasjonen. Prøv deretter "docker run -p 8080:80 nginx" og åpne localhost:8080 i nettleseren.

Lær Docker via play-with-docker.com (nettleser-basert laboratorium, ingen installasjon nødvendig) og den offisielle Docker-opplæringen på docs.docker.com. Anbefalt læringssti: Docker basics (1 dag) → Dockerfile skriving (2 dager) → Docker Compose (1 dag) → Kubernetes grunnleggende (1 uke).

Vil du styrke utviklergrunnlaget? Se hvilke programmeringsspråk du bør lære, kom i gang med gratis kodekurs for nybegynnere, og velg en god Linux-distribusjon for nybegynnere til å kjøre Docker på.

Annonse

Ofte stilte spørsmål

Hva er Docker?

Docker er et verktøy som pakker en applikasjon sammen med alt den trenger — runtime, biblioteker og konfigurasjon — i en isolert enhet kalt en container. Containeren kjører identisk på din laptop, i skyen og på andres maskiner. Dermed forsvinner det klassiske problemet «men det fungerte på min maskin».

Hva er forskjellen på en container og en virtuell maskin?

En virtuell maskin emulerer en hel datamaskin med eget operativsystem og bruker gigabytes med minne og 30–60 sekunder på å starte. En Docker-container deler vertens OS-kjerne, starter på under ett sekund og bruker typisk 50–100 MB minne. Containere er altså langt lettere og raskere enn VM-er.

Hva er forskjellen på et image og en container?

Et Docker-image er en uforanderlig mal — en oppskrift for å lage en container, bygget i lag og lagret i for eksempel Docker Hub. En container er en kjørende instans av et image. Du kan starte mange containere fra samme image samtidig, akkurat som du kan lage flere kaker fra én oppskrift.

Trenger jeg Docker for å lære Kubernetes?

Ja, det er en naturlig læringssti. Docker håndterer enkeltstående containere, mens Kubernetes orkestrerer tusenvis av containere på tvers av mange servere med automatisk skalering og selvhelbredelse. Lær Docker-grunnlaget først, deretter Docker Compose, før du går videre til Kubernetes. Administrerte tjenester som AKS, GKE og EKS gjør oppstarten enklere.

Er Docker gratis?

Docker Desktop er gratis for personlig bruk, utdanning og små bedrifter. Docker Hub tilbyr over 14 millioner offentlige images du kan laste ned uten kostnad. Større kommersielle organisasjoner trenger en betalt lisens for Docker Desktop, men selve Docker Engine og containerteknologien er åpen og gratis.

Norsk Næring
Skrevet avNorsk NæringRedaksjon

Norsk Næring er en del av redaksjonen i Norsk Næring og dekker teknologi & innovasjon. Redaksjonen kvalitetssikrer alt innhold mot oppdaterte og pålitelige kilder.

Redaksjonell merknad: Dette innholdet er utarbeidet av Norsk Næring med hjelp av kunstig intelligens og kvalitetssikret av redaksjonen. Informasjonen er ment som generell veiledning og erstatter ikke profesjonell rådgivning. Feil eller unøyaktigheter? Kontakt oss på help@norsknæring.no.