Ga naar hoofdinhoud

Docker image

Stel je voor: je hebt een website gebouwd die perfect werkt op jouw laptop. Je stuurt de code naar een collega — en bij hen werkt het niet. Verkeerde Node.js versie, ontbrekende systeempakketten, een andere configuratie. Dit is een klassiek probleem in softwareontwikkeling, soms samengevat als: "works on my machine".

Docker lost dit probleem op. Met Docker verpak je je applicatie, alle afhankelijkheden én de configuratie in één draagbare eenheid: een image. Overal waar Docker draait, werkt jouw applicatie op exact dezelfde manier — op je laptop, op de server, in de cloud.

Kernconcepten

Voordat je begint, is het belangrijk om twee begrippen te begrijpen:

BegriffUitleg
ImageEen bevroren momentopname van je applicatie en alles wat het nodig heeft. Vergelijk het met een bakrecept.
ContainerEen draaiende instantie van een image. Het recept is gebakken tot een taart — en je kunt er meerdere tegelijk bakken.

Een image maak je eenmalig. Een container maak je aan elke keer dat je de applicatie wilt draaien. Je kunt tientallen containers starten vanuit dezelfde image.

Docker installeren

Download en installeer Docker Desktop via docker.com. Docker Desktop bevat alles wat je nodig hebt: de Docker engine, een CLI en een grafische interface.

Controleer na de installatie of Docker correct werkt:

Terminal
$ docker --version
Docker version 26.1.3, build b72abbb

Een Dockerfile schrijven

Een Dockerfile is een tekstbestand met stap-voor-stap instructies voor het bouwen van een image. Maak een bestand aan met de naam Dockerfile (geen extensie) in de root van je project.

Voorbeeld: een eenvoudige HTML-site met Nginx

Dockerfile
# Stap 1: gebruik een officiële Nginx image als basis
FROM nginx:alpine

# Stap 2: kopieer alle bestanden uit de huidige map naar de webroot van Nginx
COPY . /usr/share/nginx/html

# Stap 3: stel in dat de container luistert op poort 80
EXPOSE 80

Dit is een minimale Dockerfile voor een statische website. Nginx is een lichtgewicht webserver die je HTML-bestanden serveert.

Voorbeeld: een Node.js applicatie

Dockerfile
# Gebruik Node.js 22 als basis
FROM node:22-alpine

# Stel de werkmap in de container in
WORKDIR /app

# Kopieer eerst de package-bestanden (voor efficiënte caching)
COPY package*.json ./

# Installeer afhankelijkheden
RUN npm install

# Kopieer de rest van de broncode
COPY . .

# De applicatie luistert op poort 3000
EXPOSE 3000

# Startcommando
CMD ["node", "server.js"]
Volgorde is belangrijk

Docker bouwt een image in lagen. Elke instructie (FROM, COPY, RUN) is een laag. Als een laag niet veranderd is, gebruikt Docker een gecachte versie — wat het bouwen veel sneller maakt. Zet instructies die zelden veranderen (zoals npm install) daarom vóór instructies die vaak veranderen (zoals het kopiëren van je broncode).

Een image bouwen

Met het commando docker build maak je een image van je Dockerfile. De . aan het einde geeft aan dat Docker in de huidige map moet zoeken.

Terminal
$ docker build -t mijn-website .

De vlag -t mijn-website geeft de image een naam (tag). Kies een duidelijke, lowercase naam.

Een container starten

Start een container vanuit je zojuist gebouwde image:

Terminal
$ docker run -p 8080:80 mijn-website

De vlag -p 8080:80 koppelt poort 8080 op jouw computer aan poort 80 in de container. Open je browser en ga naar http://localhost:8080 — je website draait nu in Docker.

Handige commando's

Terminal
# Alle draaiende containers bekijken
$ docker ps

# Een container stoppen
$ docker stop <container-id>

# Alle lokale images bekijken
$ docker images

# Een image verwijderen
$ docker rmi mijn-website

# Container in de achtergrond draaien (detached mode)
$ docker run -d -p 8080:80 mijn-website
Lazydocker — Docker zonder commando's te typen

Vind je de terminal commando's lastig te onthouden? Lazydocker is een visuele interface die direct in je terminal draait. Je ziet in één overzicht al je containers, images en logs — en je bedient alles met een paar toetsaanslagen, zonder commando's te typen.

Installeer Lazydocker eenvoudig via Homebrew:

Terminal
$ brew install jesseduffield/lazydocker/lazydocker

Dit gebruikt de tap van de ontwikkelaar zelf — die wordt vaker bijgewerkt dan de standaard Homebrew-formule. Heb je Homebrew nog niet? Lees dan eerst hoe je Homebrew installeert.

.dockerignore

Maak een bestand .dockerignore aan naast je Dockerfile. Hierin vermeld je bestanden en mappen die Docker niet hoeft te kopiëren, zoals node_modules/ of .git/. Dit maakt je image kleiner en het bouwen sneller.

.dockerignore
node_modules
.git
.env

Docker is een van de meest gebruikte tools in moderne webontwikkeling. Zodra je het eenmaal begrijpt, wil je nooit meer zonder.

Kop koffie nodig?

Probeer De Koffiejongens met 50% korting op je bestelling. Geteeld door boeren die met de natuur werken en eerlijk betaald krijgen.