Ga naar hoofdinhoud

10 Docker-projectideeën: van beginner tot gevorderd

Leer Docker met deze praktische projectideeën voor elk niveau, van beginner tot gevorderd, gericht op het bouwen en optimaliseren van data science-applicaties.
Bijgewerkt 16 apr 2026  · 9 min lezen

Praktische ervaring is essentieel om Docker onder de knie te krijgen. Docker is een kerntool in moderne softwareontwikkeling en data science waarmee je applicaties in containers kunt bouwen, deployen en beheren.

In dit artikel geef ik voorbeelden van Docker-projecten voor beginners, gevorderden en experts, met de focus op multi-stage builds, het optimaliseren van Docker-images en het toepassen van Docker in data science. Deze projecten zijn ontworpen om je begrip van Docker te verdiepen en je praktische vaardigheden te verbeteren.

Aan de slag met Docker-projecten

Voordat je met de projecten begint, zorg ervoor dat Docker op je machine is geïnstalleerd. Afhankelijk van je besturingssysteem (Windows, macOS, Linux) kun je Docker downloaden via de officiële Docker-website.

Je hebt ook basiskennis nodig van:

  • Dockerfiles (om te definiëren wat er in je containers zit)
  • Docker Compose (voor applicaties met meerdere containers)
  • Basis-CLI-commando’s zoals docker build, docker run, docker-compose up, enz.

Moet je bovenstaande concepten opfrissen? Bekijk dan de cursussen Introduction to Docker of Containerization and Virtualization Concepts.

Laten we beginnen!

Docker-projecten voor beginners

Als je met Docker begint, is het belangrijk om projecten te kiezen die bij je niveau passen en je tegelijk uitdagen om nieuwe concepten te leren. Hier zijn enkele projectideeën om mee te starten:

Project 1: Een eenvoudige webserver opzetten

In dit project maak je een Docker-container die een basiswebserver draait met Nginx. Nginx is een van de populairste open-sourcewebservers voor reverse proxy, load balancing en meer. Aan het einde van dit project heb je geleerd hoe je containers met Docker maakt en draait, en hoe je poorten kunt openzetten zodat de applicatie vanaf je lokale machine toegankelijk is.

Moeilijkheidsgraad: Beginner

Gebruikte technologieën: Docker, Nginx

Stapsgewijze instructies

  • Installeer Docker: Zorg dat Docker op je systeem is geïnstalleerd.
  • Maak de projectmap: Maak een nieuwe map en daarin een bestand index.html dat door Nginx geserveerd zal worden.
  • Schrijf de Dockerfile: Een Dockerfile is een script dat de containeromgeving definieert. Het vertelt Docker welke basisimage te gebruiken, welke bestanden op te nemen en welke poorten te openen:
FROM nginx:alpine
COPY ./index.html /usr/share/nginx/html
EXPOSE 80
  • Bouw de Docker-image: Ga naar je projectmap en bouw de image met:
docker build -t my-nginx-app .
  • Draai de container: Start de container en koppel poort 80 van de container aan poort 8080 op je machine:
docker run -d -p 8080:80 my-nginx-app
  • Open de webserver: Open je browser en ga naar http://localhost:8080 om je gemaakte pagina te bekijken.

Project 2: Een Python-script dockerizen

Dit project omvat het containerizen van een eenvoudig Python-script dat data uit een CSV-bestand verwerkt met de pandas-bibliotheek. Het doel is te leren hoe je afhankelijkheden beheert en Python-scripts in Docker-containers uitvoert, zodat het script draagbaar en in elke omgeving uitvoerbaar is.

Moeilijkheidsgraad: Beginner

Gebruikte technologieën: Docker, Python, pandas

Stapsgewijze instructies

  • Schrijf het Python-script: Maak een script met de naam process_data.py dat een CSV-bestand leest en verwerkt. Hier is een voorbeeldscript:
import pandas as pd
df = pd.read_csv('data.csv')
print(df.describe())
  • Maak een requirements.txt-bestand: Dit bestand bevat de Python-bibliotheken die het script nodig heeft. In dit geval hebben we alleen pandas nodig:
pandas
  • Schrijf de Dockerfile: Dit bestand definieert de omgeving voor het Python-script:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "process_data.py"]
  • Bouw de Docker-image:
docker build -t python-script .
  • Draai de container:
docker run -v $(pwd)/data:/app/data python-script

Project 3: Een eenvoudige multi-containerapplicatie bouwen

Dit project helpt je vertrouwd te raken met Docker Compose door een applicatie met meerdere containers te bouwen. Je maakt een eenvoudige webapplicatie met Flask als frontend en MySQL als back-enddatabase. Met Docker Compose beheer je meerdere containers die samenwerken.

Moeilijkheidsgraad: Beginner

Gebruikte technologieën: Docker, Docker Compose, Flask, MySQL

Stapsgewijze instructies

  • Schrijf de Flask-applicatie: Maak een eenvoudige Flask-app die verbinding maakt met een MySQL-database en een bericht toont. Hier is een voorbeeld:
from flask import Flask
import mysql.connector
 
app = Flask(__name__)
 
def get_db_connection():
 	connection = mysql.connector.connect(
	 host="db",
	 user="root",
	 password="example",
	 database="test_db"
 	)
 	return connection
 
@app.route('/')
def hello_world():
 	connection = get_db_connection()
 	cursor = connection.cursor()
 	cursor.execute("SELECT 'Hello, Docker!'")
 	result = cursor.fetchone()
 	connection.close()
 	return str(result[0])
 
if __name__ == "__main__":
 	app.run(host='0.0.0.0')
  • Maak het bestand docker-compose.yml: Docker Compose definieert en draait Docker-applicaties met meerdere containers. In dit bestand definieer je de Flask-app en de MySQL-databaseservices:
version: '3'
services:
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: test_db
    ports:
      - "3306:3306"
    volumes:
      - db_data:/var/lib/mysql

  web:
    build: .
    ports:
      - "5000:5000"
    depends_on:
      - db
    environment:
      FLASK_ENV: development
    volumes:
      - .:/app

volumes:
  db_data:
  • Schrijf de Dockerfile voor Flask: Hiermee maak je de Docker-image voor de Flask-applicatie:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "app.py"]
  • Bouw en draai de containers: Gebruik Docker Compose om de volledige applicatie op te starten:
docker-compose up --build

Docker-projecten op gemiddeld niveau

De volgende projecten zijn voor wie de basis van Docker goed beheerst. Ze introduceren complexere concepten, zoals multi-stage builds en optimalisatietechnieken.

Project 4: Multi-stage build voor een Node.js-applicatie

Multi-stage builds helpen de grootte van Docker-images te verkleinen door de build- en runtime-omgevingen te scheiden. In dit project dockerize je een Node.js-applicatie met behulp van multi-stage builds.

Moeilijkheidsgraad: Gemiddeld

Gebruikte technologieën: Docker, Node.js, Nginx

Stapsgewijze instructies

  • Maak een eenvoudige Node.js-app: Schrijf een basis-Node.js-server die een eenvoudig bericht teruggeeft. Hier is een voorbeeld:
const express = require('express');
const app = express();
 
app.get('/', (req, res) => res.send('Hello from Node.js'));
 
app.listen(3000, () => console.log('Server running on port 3000'));
  • Schrijf de Dockerfile met multi-stage build: De eerste fase bouwt de app, en de tweede fase draait de app met een lichtere basisimage.
# Stage 1: Build
FROM node:14 as build-stage
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
# Add the following line if there's a build step for the app
# RUN npm run build

# Stage 2: Run
FROM node:14-slim
WORKDIR /app
COPY --from=build-stage /app .
EXPOSE 3000
ENV NODE_ENV=production
CMD ["node", "server.js"]
  • Bouw de image:
docker build -t node-multi-stage .
  • Draai de container:
docker run -p 3000:3000 node-multi-stage

Project 5: Een machinelearningmodel dockerizen met TensorFlow

In dit project containerize je een machinelearningmodel met TensorFlow. Het doel is een draagbare omgeving te maken waarin je TensorFlow-modellen op verschillende systemen kunt draaien zonder je zorgen te maken over de onderliggende setup.

Moeilijkheidsgraad: Gemiddeld

Gebruikte technologieën: Docker, TensorFlow, Python

Stapsgewijze instructies

  • Installeer TensorFlow in een Python-script: Maak een Python-script model.py dat een voorgetraind TensorFlow-model laadt en draait:
import tensorflow as tf
model = tf.keras.applications.MobileNetV2(weights='imagenet')
print("Model loaded successfully")
  • Schrijf de Dockerfile: Definieer de omgeving voor TensorFlow binnen Docker:
FROM tensorflow/tensorflow:latest
WORKDIR /app
COPY . .
CMD ["python", "model.py"]
  • Bouw de image:
docker build -t tensorflow-model .
  • Draai de container:
docker run tensorflow-model

Project 6: Een data science-omgeving maken met Jupyter en Docker

Dit project richt zich op het creëren van een reproduceerbare data science-omgeving met Docker en Jupyter Notebooks. De omgeving bevat populaire Python-bibliotheken zoals pandas, NumPy en scikit-learn.

Moeilijkheidsgraad: Gemiddeld

Gebruikte technologieën: Docker, Jupyter, Python, scikit-learn

Stapsgewijze instructies

  • Maak het bestand docker-compose.yml: Definieer de Jupyter Notebook-service en de benodigde bibliotheken. Hier is een voorbeeld:
version: '3'
services:
  jupyter:
    	image: jupyter/scipy-notebook
    	ports:
    	- "8888:8888"
    	volumes:
    	- ./notebooks:/home/joelwembo/work
  • Start de Jupyter Notebook: Gebruik Docker Compose om de Jupyter Notebook te starten.
docker-compose up
  • Open de Jupyter Notebook: Open je browser en ga naar http://localhost:8888.

Docker-projecten voor gevorderden

Deze projecten voor gevorderden focussen op realistische toepassingen en geavanceerde Docker-concepten, zoals deep learning-pijplijnen en geautomatiseerde datapijplijnen.

Project 7: De grootte van een Docker-image verkleinen voor een Python-applicatie

In dit project optimaliseer je een Docker-image voor een Python-app door minimale basisimages zoals Alpine Linux te gebruiken en multi-stage builds toe te passen om de image zo klein mogelijk te houden.

Moeilijkheidsgraad: Gevorderd

Gebruikte technologieën: Docker, Python, Alpine Linux

Stapsgewijze instructies

  • Schrijf het Python-script: Maak een script dat data analyseert met pandas. Hier is een voorbeeldscript:
import pandas as pd
df = pd.read_csv('data.csv')
print(df.head())
  • Optimaliseer de Dockerfile: Gebruik multi-stage builds en Alpine Linux om een lichtgewicht image te maken.
# Stage 1: Build stage
FROM python:3.9-alpine as build-stage
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY script.py .

# Stage 2: Run stage
FROM python:3.9-alpine
WORKDIR /app
COPY --from=build-stage /app/script.py .
CMD ["python", "script.py"]
  • Bouw de image:
docker build -t optimized-python-app .

Project 8: Een deep learning-pijplijn dockerizen met PyTorch

In dit project containerize je een deep learning-pijplijn met PyTorch. De focus ligt op het optimaliseren van de Dockerfile voor prestaties en grootte, zodat je deep learning-modellen eenvoudig in verschillende omgevingen kunt draaien.

Moeilijkheidsgraad: Gevorderd

Gebruikte technologieën: Docker, PyTorch, Python

Stapsgewijze instructies

  • Installeer PyTorch in een Python-script: Maak een script dat een voorgetraind PyTorch-model laadt en inferentie uitvoert. Hier is een voorbeeld:
import torch
model = torch.hub.load('pytorch/vision', 'resnet18', pretrained=True)
print("Model loaded successfully")
  • Schrijf de Dockerfile: Definieer de omgeving voor PyTorch:
FROM pytorch/pytorch:1.9.0-cuda11.1-cudnn8-runtime
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY model.py .
CMD ["python", "model.py"]
  • Bouw de image:
docker build -t pytorch-model .
  • Draai de container:
docker run pytorch-model 

Project 9: Datapijplijnen automatiseren met Apache Airflow en Docker

In dit project zet je een Apache Airflow-omgeving op en containerize je die om datapijplijnen te automatiseren. Apache Airflow is een populaire tool voor het orkestreren van complexe workflows die veel wordt gebruikt in data engineering.

Moeilijkheidsgraad: Gevorderd

Gebruikte technologieën: Docker, Apache Airflow, Python, PostgreSQL

Stapsgewijze instructies

  • Maak het bestand docker-compose.yml: Definieer de Airflow-services en de PostgreSQL-database:
version: '3'
services:
  postgres:
    image: postgres:latest
    environment:
      POSTGRES_USER: airflow
      POSTGRES_PASSWORD: airflow
      POSTGRES_DB: airflow
    ports:
      - "5432:5432"
    volumes:
      - postgres_data:/var/lib/postgresql/data

  webserver:
    image: apache/airflow:latest
    environment:
      AIRFLOW__CORE__SQL_ALCHEMY_CONN: postgresql+psycopg2://airflow:airflow@postgres/airflow
      AIRFLOW__CORE__EXECUTOR: LocalExecutor
    depends_on:
      - postgres
    ports:
      - "8080:8080"
    volumes:
      - ./dags:/opt/airflow/dags
    command: ["webserver"]

  scheduler:
    image: apache/airflow:latest
    environment:
      AIRFLOW__CORE__SQL_ALCHEMY_CONN: postgresql+psycopg2://airflow:airflow@postgres/airflow
      AIRFLOW__CORE__EXECUTOR: LocalExecutor
    depends_on:
      - postgres
      - webserver
    volumes:
      - ./dags:/opt/airflow/dags
    command: ["scheduler"]

volumes:
  postgres_data:
  • Start de Airflow-omgeving: Gebruik Docker Compose om de Airflow-omgeving op te starten:
docker-compose up

Project 10: Een data science-API deployen met FastAPI en Docker

Bouw en deploy een data science-API met FastAPI. Je containerize de API met Docker en focust op optimalisatie voor productieomgevingen.

Moeilijkheidsgraad: Gevorderd

Gebruikte technologieën: Docker, FastAPI, Python, scikit-learn

Stapsgewijze instructies

  • Schrijf de FastAPI-applicatie: Maak een eenvoudige API die een machinelearningmodel gebruikt voor voorspellingen. Hier is een voorbeeld:
from fastapi import FastAPI
import pickle
 
app = FastAPI()
with open("model.pkl", "rb") as f:
   model = pickle.load(f)
 
@app.post("/predict/")
def predict(data: list):
   return {"prediction": model.predict(data)}
  • Schrijf de Dockerfile: Maak een Dockerfile die de omgeving voor FastAPI definieert:
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8000"]
  • Bouw de image:
docker build -t fastapi-app .
  • Draai de container:
docker run -p 8000:8000 fastapi-app

Tips voor het werken aan Docker-projecten

Houd tijdens deze projecten de volgende tips in gedachten:

  • Begin klein: Start met licht uitdagende projecten en ga dan door naar complexere taken. Zelfvertrouwen opbouwen met eenvoudiger werk is cruciaal.
  • Documenteer je voortgang: Houd een gedetailleerd logboek bij van je projecten om je leerproces te volgen en als naslag voor toekomstige projecten.
  • Sluit je aan bij Docker-communities: Doe mee aan online fora en lokale meetups om ervaringen te delen, vragen te stellen en van anderen te leren.
  • Experimenteer en pas aan: Wees niet bang om de projecten aan te passen, andere aanpakken te proberen en nieuwe Docker-features te verkennen.
  • Blijf leren: Breid je Docker-kennis uit door geavanceerde topics en tools te verkennen zoals Kubernetes, Docker Swarm of microservices-architectuur.

Conclusie

Docker beheersen is meer dan alleen commando’s en configuraties leren. Het gaat erom te begrijpen hoe Docker past binnen moderne applicatieontwikkeling, data science-workflows en infrastructuurbeheer.

De projecten in deze gids geven je ideeën om de basisvaardigheden en praktische ervaring op te bouwen die je uiteindelijk in realistische scenario’s laten uitblinken.

Op dit punt raad ik aan je kennis te versterken met deze cursussen:

FAQs

Wat zijn de best practices voor het schrijven van efficiënte Dockerfiles?

Best practices voor het schrijven van efficiënte Dockerfiles zijn onder meer: het aantal lagen minimaliseren door commando’s te combineren, multi-stage builds gebruiken om de imagegrootte te verkleinen, lichte basisimages kiezen, dependencies cachen en onnodige bestanden buiten de uiteindelijke image houden.

Wat is een multi-stage build in Docker?

Een multi-stage build is een methode om Docker-images te optimaliseren door de build- en runtime-omgevingen te scheiden. Dit resulteert in kleinere, veiligere images.

Hoe kun je de grootte van een Docker-image verkleinen?

Gebruik minimale basisimages, beheer dependencies efficiënt en pas multi-stage builds toe om de imagegrootte te verkleinen en de prestaties te verbeteren.

Hoe los ik veelvoorkomende fouten op bij het bouwen van Docker-images?

Veelvoorkomende fouten bij het bouwen van Docker-images zijn permissieproblemen, onjuiste Dockerfile-syntaxis en mislukte installatie van dependencies. Controleer voor troubleshooting de build-logs van Docker, zorg dat je de juiste basisimage gebruikt en verifieer dat paden en bestandsrechten correct zijn ingesteld. Tools zoals docker build --no-cache kunnen helpen om cachingproblemen te identificeren.

Kan ik Docker met Kubernetes gebruiken voor deze projecten?

Ja, zodra je je comfortabel voelt met Docker, kan Kubernetes de volgende stap zijn. Kubernetes helpt bij het beheren van gecontaineriseerde applicaties op schaal. Je kunt je Docker-projecten op een Kubernetes-cluster deployen om meerdere instanties te beheren, te schalen en deployments te automatiseren.

Wat zijn best practices voor het beheren van Docker-volumes en persistente data?

Bij het werken met Docker-volumes is het belangrijk om named volumes te gebruiken voor datapersistentie bij het herstarten van containers. Maak regelmatig back-ups van je volumes en monitor op prestatieknelpunten door schijf-I/O. Vermijd het opslaan van gevoelige data direct in containers; gebruik in plaats daarvan veilige opslagoplossingen of externe databases.

Wat is het doel van de ENTRYPOINT-directive in een Dockerfile?

De ENTRYPOINT-directive in een Dockerfile specificeert het commando dat altijd wordt uitgevoerd wanneer een container start. Hiermee kan de container als een uitvoerbaar bestand worden behandeld, waarbij argumenten tijdens runtime kunnen worden doorgegeven, wat de flexibiliteit vergroot.

Wat is het verschil tussen CMD en ENTRYPOINT in een Dockerfile?

Zowel CMD als ENTRYPOINT geven commando’s op die worden uitgevoerd wanneer een container start. CMD levert echter standaardargumenten die kunnen worden overschreven, terwijl ENTRYPOINT het commando definieert dat altijd draait. ENTRYPOINT is handig om containers te maken die zich als uitvoerbare bestanden gedragen, terwijl CMD flexibeler is voor het opgeven van standaardcommando’s.


Joel Wembo's photo
Author
Joel Wembo
LinkedIn
Twitter

AWS-gecertificeerde Cloud Solutions Architect, DevOps- en Cloud Engineer met een grondige kennis van high-availability-architecturen en -concepten. Ik heb ervaring met cloud engineering en DevOps en maak vaardig gebruik van open­sourceresources om enterprise-applicaties te realiseren. Ik bouw cloudgebaseerde toepassingen met AWS, AWS CDK, AWS SAM, CloudFormation, Serverless Framework, Terraform en Django.

Onderwerpen

Leer meer over Docker met deze cursussen!

Leerpad

Containerisatie en virtualisatie met Docker en Kubernetes

13 Hr
Ontdek de kracht van Docker en Kubernetes. Met deze interactieve track kun je apps bouwen en implementeren in moderne omgevingen.
Bekijk detailsRight Arrow
Begin met de cursus
Meer zienRight Arrow
Gerelateerd

blog

AI vanaf nul leren in 2026: een complete gids van de experts

Ontdek alles wat je moet weten om in 2026 AI te leren, van tips om te beginnen tot handige resources en inzichten van industrie-experts.
Adel Nehme's photo

Adel Nehme

15 min

Meer zienMeer zien