DataPartner365

Jouw partner voor datagedreven groei en inzichten

Docker Basics

Laatst bijgewerkt: 9 september 2025
Leestijd: 13 minuten
Docker, containerization, containers, Dockerfile, microservices, DevOps

Een complete beginnersgids over Docker: leer containerization voor consistente ontwikkelomgevingen, snellere deployments en het elimineren van "works on my machine" problemen.

Definitie

Docker is een open-source platform voor het ontwikkelen, verzenden en uitvoeren van applicaties in containers. Containers laten je applicatie en alle dependencies verpakken in een standaard eenheid voor software development, wat zorgt voor consistentie across verschillende omgevingen.

Waarom Docker?

Docker lost kritieke problemen op in moderne software ontwikkeling:

Belangrijkste Inzicht

Docker is niet alleen een technologie - het is een paradigmaverschuiving in hoe we software ontwikkelen en deployen. Het stelt ontwikkelaars in staat om te focussen op code, niet op omgevingsconfiguratie. "Build once, run anywhere" is niet langer een slogan maar realiteit met Docker.

Docker vs. Virtuele Machines

Virtuele Machines

App 1
Bins/Libs
Guest OS
Hypervisor
Host OS
Infrastructure

Zwaar, traag, volledige OS virtualisatie

Docker Containers

App 1
Bins/Libs
Docker Engine
Host OS
Infrastructure

Licht, snel, OS-level virtualisatie

Aspect Virtuele Machines Docker Containers
Grootte GB's (volledig OS) MB's (alleen app + dependencies)
Starttijd Minuten Seconden
Performance Zwaar, overhead Native, bijna 0 overhead
Isolatie Hardware-level OS-level
Portabiliteit Beperkt Hoog ("run anywhere")

Docker Architecture

Host Machine

Container A
Node.js App
Container B
PostgreSQL DB
Container C
Redis Cache

Meerdere geïsoleerde containers draaien op één host

Kerncomponenten

Docker Workflow

1

Dockerfile Schrijven

Definieer je applicatie en dependencies in een Dockerfile

2

Image Bouwen

Build een Docker image van je Dockerfile: docker build -t mijn-app .

3

Container Runen

Start een container van je image: docker run -d -p 8080:80 mijn-app

4

Deployen

Push naar registry en pull/run op productie server

Dockerfile Voorbeelden

Basis Dockerfile voor Python App

# Dockerfile
# Gebruik officiële Python runtime als parent image
FROM python:3.9-slim

# Stel werkdirectory in
WORKDIR /app

# Kopieer requirements.txt
COPY requirements.txt .

# Installeer dependencies
RUN pip install --no-cache-dir -r requirements.txt

# Kopieer applicatie code
COPY . .

# Maak poort 8000 beschikbaar
EXPOSE 8000

# Definieer environment variabelen
ENV PYTHONUNBUFFERED=1

# Run de applicatie
CMD ["python", "app.py"]

Multi-stage Dockerfile voor Go App

# Multi-stage Dockerfile voor kleinere images
# Build stage
FROM golang:1.19-alpine AS builder
WORKDIR /app
COPY . .
RUN go mod download
RUN go build -o main .

# Runtime stage
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
# Kopieer alleen het binary van builder stage
COPY --from=builder /app/main .
EXPOSE 8080
CMD ["./main"]

Docker Compose voor Multi-container Apps

# docker-compose.yml
version: '3.8'
services:
  webapp:
    build: .
    ports:
      - "8000:8000"
    environment:
      - DATABASE_URL=postgres://user:pass@db:5432/mydb
    depends_on:
      - db
    volumes:
      - ./app:/app
      - static_volume:/app/static

  db:
    image: postgres:14
    environment:
      - POSTGRES_DB=mydb
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=pass
    volumes:
      - postgres_data:/var/lib/postgresql/data

  redis:
    image: redis:7-alpine
    ports:
      - "6379:6379"

volumes:
  postgres_data:
  static_volume:

Essentiële Docker Commando's

Commando Beschrijving Voorbeeld
docker build Bouw image van Dockerfile docker build -t mijn-app .
docker run Start container van image docker run -d -p 8080:80 mijn-app
docker ps Toon draaiende containers docker ps -a (alle containers)
docker images Toon beschikbare images docker images
docker logs Toon container logs docker logs container-id
docker exec Voer commando uit in container docker exec -it container-id bash
docker-compose up Start multi-container app docker-compose up -d
docker push/pull Deel images via registry docker push mijn-repo/mijn-app:tag

Docker voor Data Engineering

Data Pipeline Containers

Docker is ideaal voor data engineering workloads:

Data Science Dockerfile

# Dockerfile voor Data Science
FROM jupyter/datascience-notebook:latest

# Installeer extra Python packages
RUN pip install --no-cache-dir \
    pandas-profiling \
    scikit-learn \
    xgboost \
    mlflow \
    great-expectations

# Installeer system dependencies
USER root
RUN apt-get update && apt-get install -y \
    curl \
    git \
    vim

# Stel werkdirectory in
WORKDIR /home/jovyan/work

# Kopieer Jupyter config
COPY jupyter_notebook_config.py /etc/jupyter/

# Start Jupyter Lab
CMD ["start-notebook.sh", "--NotebookApp.token=''"]

Docker Leerpad

1

Week 1: Fundamentals

Installeer Docker, begrijp images vs containers, oefen basis commando's, run je eerste container.

2

Week 2: Dockerfile Mastery

Leer Dockerfile syntax, schrijf je eigen Dockerfiles, begrijp layers en caching, gebruik multi-stage builds.

3

Week 3: Docker Compose

Beheer multi-container apps, configureer netwerken en volumes, implementeer development workflows.

4

Week 4: Advanced Topics

Dive into Docker networking, security best practices, CI/CD integration, production deployment patterns.

Docker Ecosystem

Docker Hub

Registry met miljoenen public images voor snelle ontwikkeling

Docker Compose

Tool voor het definiëren en runnen van multi-container Docker applicaties

Docker Security

Built-in security features: namespaces, cgroups, seccomp, AppArmor

Docker Swarm

Native clustering en orchestration voor Docker containers

Real-world Case Study: E-commerce Data Platform

Uitdaging: Een e-commerce bedrijf had inconsistente data science omgevingen, moeilijke dependency management en trage onboarding van nieuwe data scientists.

Oplossing: Docker implementatie met:

  • Gestandaardiseerde data science images met alle benodigde tools
  • Docker Compose voor complete data pipelines (Jupyter + Postgres + Redis)
  • Versioned Docker images voor reproduceerbare analyses
  • CI/CD pipeline voor automatisch bouwen van images

Resultaat: 80% reductie in onboarding tijd, 100% consistente omgevingen, en reproduceerbare data analyses.

Veelgemaakte Docker Fouten

Beginners Valkuilen

  • Images als VM's behandelen: Containers zijn ephemeral, geen persistent servers
  • Root in containers runnen: Gebruik niet-root users voor security
  • Geen .dockerignore: Onnodige bestanden in context verhogen build tijd
  • Grote images: Gebruik multi-stage builds en alpine base images
  • Data in containers opslaan: Gebruik volumes voor persistente data
  • Geen resource limits: Containers kunnen alle resources gebruiken

Docker Best Practices

Development Best Practices

Production Best Practices

Docker en Kubernetes

Van Docker naar Kubernetes

Docker en Kubernetes vullen elkaar perfect aan:

Kubernetes Deployment met Docker Images

apiVersion: apps/v1
kind: Deployment
metadata:
  name: data-api
spec:
  replicas: 3
  selector:
    matchLabels:
      app: data-api
  template:
    metadata:
      labels:
        app: data-api
    spec:
      containers:
      - name: data-api
        image: myregistry.azurecr.io/data-api:v1.2.3
        ports:
        - containerPort: 8000
        env:
        - name: DATABASE_URL
          valueFrom:
            secretKeyRef:
              name: db-secret
              key: url