Wat is Docker?
Docker gebruik ik om applicaties en hun afhankelijkheden op een consistente manier te verpakken en uit te voeren. Zeker binnen microservice-architecturen vind ik dat belangrijk. Een service moet lokaal, in CI/CD en uiteindelijk in productie zoveel mogelijk hetzelfde gedrag vertonen.
Voor mij is Docker daarom geen doel op zich. Het is vooral een eenvoudige manier om software voorspelbaar te maken.
Wat vind ik belangrijk bij Docker?
Een Docker-container moet wat mij betreft vooral klein, duidelijk en reproduceerbaar blijven.
Ik probeer daarom bewust te letten op:
Kleine en gerichte images
Duidelijke configuratie via environment variables
Een goede scheiding tussen applicatie en infrastructuur
Reproduceerbare lokale ontwikkelomgevingen
Zo min mogelijk onnodige afhankelijkheden in een container
Docker moet complexiteit wegnemen, niet verplaatsen naar een Dockerfile.
Hoe gebruik ik Docker?
Binnen backend development gebruik ik Docker vrijwel standaard voor het lokaal draaien en testen van services en infrastructuur.
Bij microservices betekent dit bijvoorbeeld dat ik een omgeving kan opzetten met een Java- of Kotlin-service, Kafka, Redis of een database zonder dat iedere developer zijn machine volledig anders hoeft in te richten.
Daarnaast gebruik ik containers binnen CI/CD om builds en tests reproduceerbaar te houden voordat software richting een cloudomgeving gaat.
Waar heb ik Docker gebruikt?
Recent heb ik Docker onder andere gebruikt bij Sogeti bij het ontwerpen van microservices met Java 17, Quarkus, MongoDB en Kafka. Daar gebruikte ik containers om verschillende prototypes voor Immediate en Eventual Consistency reproduceerbaar op te zetten en onderdeel te maken van de ontwikkelstraat.
Ook binnen mijn eigen SaaS-platform heb ik een volledige microservice-omgeving met meerdere services containerized opgezet. Hierdoor konden de verschillende onderdelen onafhankelijk ontwikkeld en uitgevoerd worden, terwijl de totale omgeving eenvoudig lokaal gestart kon worden.
Mijn ervaring met Docker
Docker zit voor mij inmiddels diep verweven in backend- en platform engineering.
Ik kijk daarbij verder dan alleen een applicatie in een container stoppen. Het gaat mij vooral om de vraag hoe je ervoor zorgt dat developers eenvoudig kunnen ontwikkelen, pipelines betrouwbaar kunnen bouwen en services uiteindelijk voorspelbaar kunnen draaien.
Daar zit voor mij de echte waarde van containerization.
Veelgestelde vragen die ik krijg over Docker
Gebruik je Docker voor iedere microservice?
Vrijwel altijd. Vooral lokaal en binnen CI/CD zorgt het ervoor dat services geïsoleerd en reproduceerbaar uitgevoerd kunnen worden.
Docker Compose of Kubernetes?
Voor lokale ontwikkeling kies ik vaak bewust voor Docker Compose vanwege de eenvoud. Kubernetes wordt interessant wanneer orchestration, schaalbaarheid en beheer daadwerkelijk nodig zijn.
Wat vind je belangrijk aan een goede Dockerfile?
Dat hij simpel blijft. Kleine images, duidelijke build-stappen en geen dependencies meenemen die tijdens runtime niet nodig zijn.
Gebruik je Docker alleen voor applicaties?
Nee. Juist dependencies zoals Kafka, Redis, MongoDB en andere infrastructuurcomponenten zijn lokaal erg praktisch om via containers beschikbaar te maken.
Wanneer voegt Docker weinig toe?
Wanneer containerization meer operationele complexiteit introduceert dan het probleem rechtvaardigt. Ook hier geldt voor mij: technologie gebruiken omdat het waarde toevoegt, niet omdat het de standaard is.