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:
| Begriff | Uitleg |
|---|---|
| Image | Een bevroren momentopname van je applicatie en alles wat het nodig heeft. Vergelijk het met een bakrecept. |
| Container | Een 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:
$ 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
# 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
# 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"]
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.
$ 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:
$ 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
# 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
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.
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.