Wat is Docker en waarom gebruiken ontwikkelaars het?
Docker is een platform waarmee je applicaties verpakt in gestandaardiseerde eenheden die 'containers' worden genoemd. Een container bevat de applicatie zelf plus alle afhankelijkheden: libraries, runtime-omgeving en configuratie. Daardoor draait een container overal hetzelfde: op een laptop van een ontwikkelaar, een testserver en een productieomgeving. Docker lost het klassieke probleem op van 'bij mij werkt het wel'.
Docker verpakt een applicatie met alles wat die nodig heeft in een container. Zo draait software overal hetzelfde, ongeacht de omgeving.
Het probleem dat Docker oplost
Stel: een ontwikkelaar bouwt een applicatie op zijn Mac met Node.js versie 20. De productieserver draait Linux met Node.js 18. De database-driver die lokaal werkt, doet het niet op de server. Een collega heeft een andere PHP-versie geinstalleerd. Dit zijn de scenario’s die weken kosten aan debugging en die de uitdrukking “bij mij werkt het wel” hebben voortgebracht.
Docker pakt de applicatie in samen met precies die versie van Node.js, precies die database-driver, precies die configuratie. Overal waar Docker draait, draait de container identiek. Dat elimineert omgevingsverschillen volledig.
Containers versus virtuele machines
Een virtuele machine (VM) simuleert een complete computer: eigen besturingssysteem, eigen kernel, eigen geheugenbeheer. Dat is zwaar. Een VM kost gigabytes en start in minuten.
Een Docker container deelt de kernel van het host-besturingssysteem. Hij pakt alleen de applicatie en haar afhankelijkheden in, niet het hele OS. Een container start in seconden, weegt tientallen megabytes en je kunt er honderden naast elkaar draaien op dezelfde server zonder dat ze elkaar beinvloeden.
Voor het isoleren van applicaties is Docker daardoor veel praktischer dan een VM, terwijl het isolatieniveau voor de meeste doeleinden voldoende is.
Images, containers en Dockerfile
Een Dockerfile is een tekstbestand met instructies voor het bouwen van een image: begin met dit basisimage (bijvoorbeeld Ubuntu of Node.js), installeer deze packages, kopieer deze bestanden, start de applicatie met dit commando.
Een image is het resultaat: een onveranderlijk pakketje dat klaar is om te draaien. Vergelijk het met een installatiebestand.
Een container is een draaiende instantie van een image. Uit één image kun je tien identieke containers starten, elk met hun eigen geheugen en schijfruimte. Handig als je een applicatie wilt schalen door meerdere exemplaren tegelijk te draaien.
Volumes zijn gekoppelde mappen op de host die data persistent bewaren. Stopte de container? De data in een volume blijft staan.
Docker Compose voor meerdere containers
De meeste applicaties bestaan niet uit één dienst. Een webapplicatie heeft typisch: een webserver, de applicatiecode zelf en een database. Drie onderdelen, drie containers.
Docker Compose laat je die drie containers beschrijven in één YAML-bestand. Je specificeert welke image elke container gebruikt, hoe ze met elkaar communiceren en welke poorten open staan naar buiten. Met docker compose up start je de hele stack in één commando, met docker compose down gooit je alles neer.
Dat maakt lokale ontwikkeling reproduceerbaar. Elke nieuwe teamgenoot heeft de hele omgeving draaiend in minuten.
Wanneer is Docker nuttig voor jou?
Docker is geen verplicht onderdeel van elke applicatie. Voor een eenvoudige statische website of een klein intern tooltje is het overbodig.
Docker wordt relevant zodra: meerdere mensen aan dezelfde code werken, de applicatie op meerdere omgevingen (test, staging, productie) moet draaien, of de applicatie bestaat uit meerdere losse diensten. Laat je een webapplicatie bouwen die later door anderen onderhouden wordt? Dan is Docker een professionele standaard die overdracht en onderhoud sterk vereenvoudigt. Wil je weten wat zo’n applicatie kost, dan geeft het artikel over wat een webapplicatie laten bouwen kost een goed vertrekpunt.
Onze tip: begin als developer met Docker Desktop: een grafische interface voor Mac en Windows die Docker installeert en beheert zonder command line. Probeer een bestaand open source project dat een
docker-compose.yml-bestand heeft, voerdocker compose upuit en zie hoe je in enkele minuten een volledige applicatiestack draait zonder iets handmatig te installeren.
Veelgestelde vragen
Wat is het verschil tussen een Docker container en een virtuele machine?
Een virtuele machine (VM) simuleert een volledig computer inclusief eigen besturingssysteem, hardware en alles wat daarbij hoort. Dat maakt een VM zwaar: het kost gigabytes aan schijfruimte en minuten om op te starten. Een Docker container deelt de OS-kernel van de host-machine en pakt alleen de applicatie en haar afhankelijkheden in. Een container start in seconden, weegt tientallen megabytes en je kunt er tientallen naast elkaar draaien op dezelfde server. Voor het isoleren van applicaties is Docker daardoor veel efficienter dan een VM.
Wat is een Docker image versus een container?
Een Docker image is een onveranderlijk blauwdruk-bestand dat beschrijft hoe een container eruit moet zien: welk basisbesturingssysteem, welke software, welke bestanden. Je bouwt een image eenmalig via een Dockerfile. Een container is een draaiende instantie van een image, vergelijkbaar met hoe een programma de uitvoering is van een installatiebestand. Uit één image kun je meerdere identieke containers starten, handig voor het schalen van een applicatie.
Wat is Docker Compose en wanneer heb je het nodig?
Docker Compose is een tool waarmee je meerdere containers tegelijk definieert en beheert via één YAML-bestand. Een typische webapplicatie bestaat uit een webserver, een applicatieserver en een database: drie aparte containers. Met Docker Compose beschrijf je hoe ze samenwerken, welke poorten open staan en hoe ze met elkaar communiceren. Met één commando (docker compose up) start je de hele omgeving. Dit maakt lokale ontwikkeling veel eenvoudiger en zorgt dat iedereen in het team met dezelfde omgeving werkt.
Wanneer heeft een MKB-bedrijf Docker nodig?
Niet elke applicatie heeft Docker nodig. Voor eenvoudige statische websites of eenvoudige webapps op een enkel platform is Docker overbodig. Docker wordt relevant zodra meerdere ontwikkelaars aan dezelfde applicatie werken en omgevingsverschillen problemen geven, zodra een applicatie op meerdere servers of cloudplatforms draait, of zodra de applicatie bestaat uit meerdere losse diensten die samenwerken. Als je een webapplicatie laat bouwen die later door anderen onderhouden moet worden, is Docker een verstandige standaard.