Docker is een platform om software te verpakken in containers: gestandaardiseerde eenheden die een applicatie bevatten samen met alles wat nodig is om te draaien, zoals libraries, runtime en configuratie. Een container draait op dezelfde manier op de laptop van een ontwikkelaar, een testserver en in productie. Daarmee is het klassieke probleem "op mijn computer werkt het wel" opgelost. Docker verscheen in 2013 en maakte containers mainstream; het imageformaat is inmiddels een open standaard (OCI) die ook andere tools zoals Podman en Kubernetes gebruiken.
Hoe werkt Docker?
- Dockerfile: een tekstbestand met instructies om een image te bouwen, zoals het basisimage, te kopiëren bestanden, te installeren afhankelijkheden en het startcommando.
- Image: het gebouwde, alleen-lezen pakket van de applicatie. Images bestaan uit lagen, zodat ongewijzigde delen worden gecachet en hergebruikt.
- Container: een draaiende instantie van een image, afgeschermd van andere containers, met een eigen bestandssysteem, netwerk en processen.
- Registry: een plek om images op te slaan en te delen, zoals Docker Hub, GitHub Container Registry of een eigen registry.
- Docker Compose: een bestand dat meerdere samenhangende containers beschrijft, zoals een app, een database en een cache, en ze met één commando start.
Containers of virtuele machines?
Een virtuele machine bootst een complete computer na, inclusief een eigen besturingssysteem. Containers delen de kernel van het besturingssysteem van de host en schermen alleen de applicatie af. Daardoor zijn containers veel lichter: ze starten in seconden in plaats van minuten, gebruiken minder geheugen, en er passen er veel meer op één server. Virtuele machines bieden een sterkere afscherming; daarom draaien containers in de cloud meestal bovenop virtuele machines.
Waarom Docker gebruiken?
- Gelijke omgevingen: ontwikkeling, test en productie draaien hetzelfde image.
- Snel aan de slag: een nieuwe ontwikkelaar start de hele omgeving met één commando.
- Betrouwbaar uitrollen: het image dat de tests heeft doorstaan, gaat precies zo naar productie, en terugdraaien betekent het vorige image starten.
- Overdraagbaar: containers draaien op elke server of cloud die containers ondersteunt, wat afhankelijkheid van één leverancier beperkt.
- Basis voor schalen: containers zijn de bouwsteen voor Kubernetes, microservices en geautomatiseerde CI/CD-pijplijnen.
Aandachtspunten
Houd images klein en actueel: een minimaal basisimage en multi-stage builds verkleinen zowel de omvang als het aanvalsoppervlak, en images moeten regelmatig opnieuw worden gebouwd voor beveiligingsupdates. Zet geen geheimen in images, maar geef ze mee bij het starten. Gegevens die een herstart moeten overleven, horen in volumes of een beheerde database, niet in de container. Zie onze Docker diensten en wat is DevOps.
Veelgestelde vragen over Docker
Is Docker gratis?
Docker Engine en de command-line tools zijn open source en gratis. Docker Desktop, de applicatie voor Windows en Mac, is gratis voor particulieren, onderwijs en kleine bedrijven, maar vraagt voor grotere bedrijven een betaald abonnement.
Wat is het verschil tussen Docker en Kubernetes?
Docker bouwt en draait containers. Kubernetes orkestreert veel containers over een cluster van servers: het bepaalt waar ze draaien, herstart ze als ze falen en schaalt ze mee met de vraag. Ze vullen elkaar aan.
Werkt Docker op Windows?
Ja. Docker Desktop draait Linux-containers op Windows via WSL 2, en Windows Server kan ook native Windows-containers draaien.
Is een container veilig?
Containers zijn afgeschermd, maar minder strikt dan virtuele machines. Draai containers zonder rootrechten, gebruik betrouwbare en bijgewerkte basisimages, scan images op kwetsbaarheden en geef elke container alleen de toegang die hij nodig heeft.