Docker, Docker-images og Docker Compose
Hva er Docker og containere?
Docker er en plattform for containerisering som lar deg pakke applikasjoner og alle deres avhengigheter i en isolert, lettvekts container. En container fungerer som en “mini-datamaskin” som deler operativsystemkjernen med andre containere, men opererer isolert, noe som gir bedre ressursutnyttelse og raskere oppstart sammenlignet med tradisjonelle virtuelle maskiner.
Dette er viktig i DevSecOps fordi det sikrer at miljøet er konsistent fra utvikling til produksjon, og reduserer sjansen for at “det fungerer på min maskin” oppstår.
Hva er et Docker-image?
Et Docker-image er en statisk, uforanderlig mal som inneholder alt som trengs for å kjøre en applikasjon – fra operativsystem, biblioteker, kode, konfigurasjonsfiler og avhengigheter. Når du starter en container, blir et image gjort om til en kjørende container.
Ved å ha applikasjonen definert i et image, kan du sikre at samme versjon av applikasjonen med alle dens avhengigheter kjøres på tvers av ulike miljøer. Dette er en nøkkelkomponent i DevSecOps, der kontinuerlig testing og sikker deploy er viktig.

Hva er Docker Compose?
Docker Compose er et verktøy som lar deg definere og kjøre multi-container Docker-applikasjoner med én YAML-fil. Med Docker Compose kan du beskrive hvordan flere containere – for eksempel en webapplikasjon, en database og en cache – skal samhandle, hvilke porter de skal eksponere, og hvordan de kobles sammen.
Dette verktøyet forenkler oppsettet av komplekse applikasjoner og er en viktig del av DevSecOps, fordi det gjør det enkelt å:
- Reprodusere komplette miljøer lokalt.
- Kjøre integrasjonstester på tvers av containere.
- Automatisere deploy-prosesser med CI/CD.
# docker-compose.yml
version: '3.8'
services:
web:
image: min-node-app:latest
ports:
- "3000:3000"
environment:
- NODE_ENV=production
db:
image: postgres:13-alpine
environment:
- POSTGRES_USER=devsecops
- POSTGRES_PASSWORD=sikkerPassord
- POSTGRES_DB=devsecops_db
I eksempelet over definerer vi to tjenester: en webapplikasjon og en PostgreSQL-database. Docker Compose sørger for at begge tjenestene startes opp, kobles sammen via et internt nettverk og eksponeres på angitte porter.
Docker i den røde tråden av DevSecOps
Docker er en sentral brikke i DevSecOps, fordi den gjør det mulig å:
- Konsistens: Applikasjoner kjører likt uansett hvor de deployeres.
- Automatisering: Container-baserte løsninger kan enkelt integreres i CI/CD-pipelines.
- Sikkerhet: Ved å skanne Docker-images for sårbarheter, kan du forhindre at uønsket kode distribueres.
Docker kombineres med andre DevSecOps-verktøy – for eksempel IaC med Terraform og Ansible, versjonskontroll med Git og CI/CD-pipelines – for å danne en helhetlig, automatisert og sikker arbeidsflyt.
Installer Docker på Ubuntu
- Kjør
sudo apt-get update
- Installer nødvendige verktøy:
sudo apt-get install -y ca-certificates curl gnupg lsb-release
- Legg til Docker sin GPG-nøkkel:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
- Legg til Docker-repositoriet:
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
- Kjør
sudo apt-get update && sudo apt-get install docker-ce docker-ce-cli containerd.io
- Start og test Docker:
sudo systemctl enable docker sudo systemctl start docker sudo docker run hello-world
Eksempel: Dockerfile for en Node.js-applikasjon
# Dockerfile
FROM node:16-alpine
WORKDIR /app
# Kopier avhengighetsfiler og installer nødvendige pakker
COPY package*.json ./
RUN npm install --production
# Kopier kildekoden til containeren
COPY . .
# Opprett en ikke-root bruker for økt sikkerhet
RUN adduser -D myuser
USER myuser
# Eksponer port 3000
EXPOSE 3000
# Start applikasjonen
CMD ["node", "index.js"]
Denne Dockerfile-en definerer et image basert på en lettvekts Node.js-plattform.
Bildet inneholder alt som trengs for å kjøre applikasjonen, og ved hjelp av
docker build
og docker run
kan du enkelt deployere applikasjonen.
Eksempel: Docker Compose
Docker Compose lar deg definere og kjøre flere containere samtidig med én YAML-fil. Dette er svært nyttig i DevSecOps når du ønsker å sette opp et komplett miljø med flere tjenester som skal samhandle.
version: '3.8'
services:
web:
image: min-node-app:latest
ports:
- "3000:3000"
environment:
- NODE_ENV=production
db:
image: postgres:13-alpine
environment:
- POSTGRES_USER=devsecops
- POSTGRES_PASSWORD=sikkerPassord
- POSTGRES_DB=devsecops_db
I dette eksempelet definerer vi to tjenester: en webapplikasjon og en PostgreSQL-database. Docker Compose sørger for at begge tjenestene starter opp, kobles sammen via et internt nettverk, og eksponeres på angitte porter. Dette gjør det enkelt å teste og utvikle et komplett miljø lokalt.
Docker i den større DevSecOps-sammenhengen
Docker er ikke et isolert verktøy – det er en del av en hel integrert arbeidsflyt. Ved å kombinere Docker med:
- Infrastructure as Code: Definerer og provisjonerer infrastrukturen, slik at containere deployeres på et konsistent miljø.
- Git og CI/CD: Automatiserte pipelines bygger, tester og skanner Docker-images for sårbarheter før de deployeres.
- Kubernetes: Orkestrerer og skalerer Docker-containere, mens sikkerhet (RBAC, Network Policies, Secrets) sikrer miljøet.
Denne helhetlige tilnærmingen sikrer at sikkerhet, pålitelighet og effektivitet er innebygd i hele leveranseprosessen – fra infrastruktur og containerbygging til deploy og overvåkning.