Containerisering med Docker – praktisk guide
Fra første Dockerfile til optimaliserte multi-stage builds – komplett guide for norske utviklere.

Docker-containere pakker applikasjoner og alle avhengigheter i bærbare, reproduserbare enheter som kjører likt i alle miljøer.
Praktisk Docker-guide for norske utviklere og bedrifter – Dockerfile-beste praksis, multi-stage builds, sikkerhet og Docker Compose for lokalt utviklingsmiljø.
Hva er containerisering og hvorfor Docker?
Containerisering løser et klassisk problem i programvareutvikling: 'det funker på min maskin'. En Docker-container pakker en applikasjon sammen med alle dens avhengigheter — biblioteker, runtimes, konfigurasjonfiler — i en isolert, bærbar enhet. Containeren kjører likt uavhengig av underliggende operativsystem, enten det er en Mac-utviklers laptop, en Linux CI-server eller en AWS EC2-instans i produksjon.
Docker ble lansert i 2013 og revolusjonerte måten programvare deployes på. I 2025 er Docker-kunnskap en grunnleggende forventning for norske backend-utviklere og DevOps-ingeniører. Selv frontend-utviklere bruker Docker Compose for å starte lokale backend-miljøer, og det er vanskelig å se for seg en profesjonell CI/CD-pipeline uten Docker-containere i sentrum.
Skrive en god Dockerfile
En Dockerfile er instruksjonssettet for å bygge et Docker-image. Gode Dockerfiles følger disse prinsippene:
- Bruk offisielle, minimale base images: Foretrekk alpine-varianter (node:20-alpine, python:3.12-slim) fremfor fulle distroer. Gir vesentlig mindre image-størrelse og angrepsflate.
- Utnytt lag-caching: Plasser instruksjoner som endres sjelden (COPY package.json, RUN npm install) tidlig i filen. Endre kodelagene (COPY . .) legges til slutt, slik at pakkeinstallasjon caches mellom bygg.
- Multi-stage builds: Bruk separate build-stages til å kompilere applikasjonen og kopiere kun artefakter til produksjons-image. Eliminerer build-verktøy fra produksjonsimaget.
- Spesifiser brukere: Kjør prosesser som ikke-root-bruker med USER-instruksjonen. Kritisk for sikkerhet.
- Bruk .dockerignore: Ekskluder node_modules, .git, IDE-filer og secrets fra build context for raskere bygg.
- Pin base image-versjoner: Bruk eksakte tags (node:20.11.1-alpine3.19) ikke 'latest' for reproduserbare bygg.
Multi-stage builds i praksis
Multi-stage builds er en av de viktigste optimaliseringsteknikker for Docker. Eksempel for en Node.js/TypeScript-applikasjon:
Docker Compose for lokalt utviklingsmiljø
Docker Compose er et verktøy for å definere og kjøre multi-container Docker-applikasjoner via en enkel YAML-fil (docker-compose.yml). Det er det klart mest brukte verktøyet for å sette opp lokale utviklingsmiljøer der man trenger database, cache, message broker og applikasjon til å spille sammen.
En typisk norsk startup-stack i Docker Compose kan inneholde en PostgreSQL-database, Redis for caching og sesjonslagring, en bakgrunds-worker for async-jobber og selve applikasjonsserveren. Med en enkelt kommando (docker compose up -d) startes hele stacken. Med volumes montert for kildekode reflekteres kodeendringer umiddelbart uten å rebuilde imaget. Denne arbeidsflyten har erstattet behovet for lokale systeminstallasjoner av databaser og tjenester for de aller fleste norske utviklerteam.
Container-sikkerhet: ikke-root, image-scanning og Secrets
Container-sikkerhet er et eget fagfelt, men disse fem praksisene er et minimum for norske produksjonsmiljøer: (1) Kjør aldri containere som root — bruk USER-instruksjonen i Dockerfile. (2) Scan images for sårbarheter med Trivy, Snyk eller Grype som en del av CI/CD-pipelinen. (3) Aldri legg secrets (passord, API-nøkler) i Dockerfile eller i image-lagene — bruk runtime-secrets via Kubernetes Secrets eller Docker Swarm Secrets. (4) Bruk read-only filsystem der mulig (--read-only flagget). (5) Begrens capabilities og kjør med no-new-privileges.
Docker Content Trust (DCT) og image-signering med Cosign (fra Sigstore-prosjektet) er fremvoksende standarder for å verifisere at images ikke er manipulert mellom bygg og deploy. For kritiske produksjonsmiljøer er dette anbefalt praksis og er i ferd med å bli krav i mange norske enterprise-sikkerhetspolicyer.
"Vi oppdaget en uoppdatert base-image i produksjon med en kritisk OpenSSL-sårbarhet — bare fordi vi automatiserte image-scanning i CI/CD. Uten det ville vi aldri funnet den i tide."
Podman og alternativer til Docker
Docker er ikke det eneste container-runtimen i 2025. Podman, utviklet av Red Hat, er et daemonless alternativ som kjører containere uten et sentralt Docker-daemon-prosess. Podman er OCI-kompatibelt (Open Container Initiative), slik at Dockerfiles og images fungerer uten modifikasjon. En stor fordel er at Podman kjører rootless som standard, noe som er bedre for sikkerhet.
For produksjon i Kubernetes er containerd eller CRI-O de vanlige container runtimene — Docker er ikke lenger den anbefalte runtimen i nyere Kubernetes-versjoner. For utvikleropplevelse er Docker Desktop fortsatt det vanligste valget blant norske utviklere på Mac og Windows, men Rancher Desktop (med Podman eller containerd) er et gratis alternativ som er blitt populært etter at Docker Desktop innførte betalt lisens for bedrifter over en viss størrelse.
Ofte stilte spørsmål
Hva handler «Containerisering med Docker – praktisk guide» om?
Praktisk Docker-guide for norske utviklere og bedrifter – Dockerfile-beste praksis, multi-stage builds, sikkerhet og Docker Compose for lokalt utviklingsmiljø.
Hva er containerisering og hvorfor Docker?
Containerisering løser et klassisk problem i programvareutvikling: 'det funker på min maskin'. En Docker-container pakker en applikasjon sammen med alle dens avhengigheter — biblioteker, runtimes, konfigurasjonfiler — i en isolert, bærbar enhet. Containeren kjører likt uavhengig av underliggende operativsystem, enten det er en Mac-utviklers laptop, en Linux CI-server eller en AWS EC2-instans i produksjon.
Hva bør du vite om skrive en god Dockerfile?
En Dockerfile er instruksjonssettet for å bygge et Docker-image. Gode Dockerfiles følger disse prinsippene:
Hva bør du vite om multi-stage builds i praksis?
Multi-stage builds er en av de viktigste optimaliseringsteknikker for Docker. Eksempel for en Node.js/TypeScript-applikasjon:
Hva bør du vite om docker Compose for lokalt utviklingsmiljø?
Docker Compose er et verktøy for å definere og kjøre multi-container Docker-applikasjoner via en enkel YAML-fil (docker-compose.yml). Det er det klart mest brukte verktøyet for å sette opp lokale utviklingsmiljøer der man trenger database, cache, message broker og applikasjon til å spille sammen.
Hva bør du vite om container-sikkerhet: ikke-root, image-scanning og Secrets?
Container-sikkerhet er et eget fagfelt, men disse fem praksisene er et minimum for norske produksjonsmiljøer: (1) Kjør aldri containere som root — bruk USER-instruksjonen i Dockerfile. (2) Scan images for sårbarheter med Trivy, Snyk eller Grype som en del av CI/CD-pipelinen. (3) Aldri legg secrets (passord, API-nøkler) i Dockerfile eller i image-lagene — bruk runtime-secrets via Kubernetes Secrets eller Docker Swarm Secrets. (4) Bruk read-only filsystem der mulig (--read-only flagget). (5) Begrens capabilities og kjør med no-new-privileges.
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.





