arrow_backTerug naar veldaantekeningen
DEVOPS Gepubliceerd 9 Aug 2026

Wat is Docker en waarom zouden developers het leren?

Een praktische uitleg van Docker voor developers: containers vs VMs, kerncommando's, Dockerfiles, en hoe je het in echte projecten gaat gebruiken.

Docker duikt steeds vaker op in vacatures en setup-handleidingen, en als je nog nooit met containers hebt gewerkt kan het voelen als een muur die je moet overklimmen voordat je echte code mag schrijven. Het is niet ingewikkeld als je eenmaal voorbij de vakjargon bent.

Wat een container eigenlijk is

Een container verpakt je applicatie met alles wat nodig is om het uit te voeren: de code, runtime, systeembibliotheken en configuratiebestanden. Het is geen virtuele machine. Een VM virtualiseert een volledig besturingssysteem, kernel inbegrepen, dus het starten ervan kan een minuut duren en enkele gigabytes RAM gebruiken. Een container deelt de kernel van de hostmachine en isoleert alleen het proces, dus het start in minder dan een seconde en gebruikt doorgaans tientallen megabytes in plaats van gigabytes.

Die verschillen zijn waarom Docker lokale ontwikkeling en CI-pijplijnen zo snel overgenomen heeft. Je kunt een Postgres-database, een Redis-cache en je appserver op één laptop draaien zonder ze direct op je OS te installeren.

De kernonderdelen die je moet kennen

Er zijn vier termen die het meeste van wat je dagelijks doet dekken:

  • Image: een read-only sjabloon gebouwd uit een Dockerfile. Zie het als een snapshot van een bestandssysteem plus metadata over hoe het uit te voeren.
  • Container: een draaiende instantie van een image. Je kunt containers starten, stoppen en verwijderen zonder de image waarvan ze afkomstig zijn aan te raken.
  • Dockerfile: een tekstbestand met instructies voor het bouwen van een image, regel voor regel.
  • Registry: waar images opgeslagen zijn en vandaan gehaald worden, meestal Docker Hub.

Een minimale Dockerfile voor een Node.js-app ziet er zo uit:

FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]

Bouw het met docker build -t my-app . en voer het uit met docker run -p 3000:3000 my-app. De -p vlag mappt een poort op je machine naar een poort in de container, zo bereik je de app vanuit je browser.

Commando's die je voortdurend gebruikt

Een handvol commando's dekt het meeste dagelijkse werk:

  • docker ps — stop actieve containers op
  • docker ps -a — stop alle containers op, inclusief gestopte
  • docker images — stop images op je machine op
  • docker logs <container> — controleer output van een actieve of gecrasht container
  • docker exec -it <container> sh — open een shell in een draaiende container
  • docker rm / docker rmi — ruim containers en images op die je niet meer nodig hebt

Dat laatste paar is belangrijker dan mensen verwachten. Docker laat je zonder enige moeite schijfruimte verdwijnen in oude images en gestopte containers. docker system prune uitvoeren claims regelmatig een verbazingwekkende hoeveelheid ruimte terug.

Waarom docker-compose de workflow verandert

De meeste echte projecten hebben meer dan één container nodig: een appserver, een database, misschien een cache. Voor elk docker run commando uitschrijven wordt snel saai. docker-compose.yml laat je de hele stack in één bestand definiëren:

services:
  web:
    build: .
    ports:
      - "3000:3000"
    depends_on:
      - db
  db:
    image: postgres:16
    environment:
      POSTGRES_PASSWORD: devpassword
    volumes:
      - db_data:/var/lib/postgresql/data

volumes:
  db_data:

Voer docker compose up uit en beide services starten samen, netwerked zodat web db kan bereiken op servicenaam. Dit is de setup die je in bijna elke open-source repo's README ziet, en het begrijpen betekent dat je een project kunt klonen en het in minuten draaiend hebt in plaats van handmatig Postgres, Redis en wat de app nog meer nodig heeft te installeren.

Waar mensen vroeg vastlopen

Volumes verwarren bijna iedereen in eerste instantie. Zonder een volume verdwijnt alles wat in een container geschreven is als de container verwijderd is, wat een probleem is voor databases. De volumes sectie in het compose-bestand hierboven mappt een benoemde volume naar een pad in de container zodat gegevens restarts overleven.

Een ander veelgemaakte fout is node_modules of .git in de image kopiëren omdat er geen .dockerignore bestand is. Voeg er een toe zoals een .gitignore:

node_modules
.git
.env

Dat houdt builds sneller en images kleiner, wat belangrijk is als je images naar een registry pusht of naar Kubernetes deployment.

Waar je na de basis heen gaat

Zodra het bouwen en draaien van containers normaal voelt, zijn de volgende nuttige vaardigheden multi-stage builds voor kleinere productieimages, Docker-netwerkmodi begrijpen en een docker inspect output lezen als iets niet goed verbonden is. Niets ervan is moeilijk, het is alleen onbekend de eerste keer.

Voor meer over het containeriseren van echte applicaties en ze verbinden met cloud deployment-pijplijnen, check de DevOps en Cloud-segmenten op Korra Studio.

Geschreven met AI-ondersteuning, herzien en gepubliceerd door Michal Pilch (CISSP), Korra Studio.

Klaar om verder te gaan?

Dit is één aantekening uit de kennisbasis van Korra Studio — het platform koppelt elk onderwerp aan 1-op-1 mentoring.

Gratis beginnenarrow_forward