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.

Illustrasjon av Docker-image som konverteres til container
Et Docker-image er en mal som brukes for å starte containere med identisk miljø.

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 å:

# 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 å:

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

  1. Kjør sudo apt-get update
  2. Installer nødvendige verktøy:
    sudo apt-get install -y ca-certificates curl gnupg lsb-release
  3. 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
  4. 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
  5. Kjør sudo apt-get update && sudo apt-get install docker-ce docker-ce-cli containerd.io
  6. 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:

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.

Lenker og kilder