
Wat zijn de belangrijkste verschillen tussen virtualisatie en containerisatie, en waarvoor wordt elke technologie gebruikt?
Virtualisatie (VM's). Een virtuele machine is een abstractie van fysieke hardware, waardoor één server in meerdere verandert. Een hypervisor bevindt zich tussen de host en de VM's en bundelt CPU, geheugen en opslag. Elke VM bevat een volledige kopie van een gastbesturingssysteem, plus de applicatie en alle bibliotheken. De hypervisor (VMM) dwingt isolatie af en de grens ervan wordt hardwarematig ondersteund door CPU-virtualisatie-uitbreidingen (Intel VT-x / AMD-V).
Hypervisors zijn er in twee soorten:
- Type 1 (bare-metal): draait rechtstreeks op de hardware; schone voorbeelden zijn VMware ESXi/vSphere, Microsoft Hyper-V en Xen. KVM is een hybride geval: een Linux-kernelmodule die de kernel in een Type 1-hypervisor verandert terwijl de host nog steeds gewone processen uitvoert.
- Type 2 (gehost): draait als applicatie op een conventioneel besturingssysteem (VirtualBox, VMware Workstation); geschikt voor persoonlijke machines.
Containerisatie. Een container verpakt code en al zijn afhankelijkheden (runtime, bibliotheken, instellingen) en virtualiseert het besturingssysteem in plaats van de hardware. Containers delen de host-besturingssysteemkernel en draaien als geïsoleerde processen in de gebruikersruimte. Op Linux gebruikt dit naamruimten (isolatie) en cgroups (resource accounting en limieten), verder versterkt door mogelijkheden, seccomp, MAC (SELinux/AppArmor), gebruikersnaamruimten en rootless modus. Het delen van de kernel impliceert compatibiliteit met de besturingssysteemfamilie: Linux-containers hebben een Linux-kernel nodig, dus Docker Desktop op Windows/macOS draait stilletjes een lichtgewicht Linux-VM. Docker maakte containers populair, maar het formaat is gestandaardiseerd door OCI; Er bestaan ook andere looptijden: containerd, CRI-O, Podman.
Belangrijkste verschillen:
- Grootte: containerimages zijn doorgaans enkele MB's tot honderden MB's; VM's zijn GB's (illustratieve ordes van grootte, geen vaste getallen).
- Opstarten: containers starten in seconden/milliseconden; VM's moeten een volledig besturingssysteem opstarten.
- Overhead: containers hebben geen afzonderlijk besturingssysteem per app nodig: hogere dichtheid, lagere licentiekosten.
- Isolatie/beveiliging: VM's bieden sterkere, op hardware gebaseerde isolatie; containers bieden zwakkere, op software gebaseerde isolatie (ontsnappingsrisico van containers uit de gedeelde kernel). Een middenweg zijn runtimes in een sandbox (gVisor, Kata Containers, Firecracker) die isolatie op VM-niveau benaderen.
Waar elk voor wordt gebruikt:
- VM's: met verschillende besturingssystemen op één server, resource-intensieve of monolithische workloads en sterke isolatie (multi-tenancy, oudere apps).
- Containers: cloud-native ontwikkeling, microservices, CI/CD, draagbaarheid en snelle horizontale schaling (georkestreerd door Kubernetes).
In de praktijk zijn de twee complementair: containers worden vaak binnen VM's uitgevoerd om flexibele levering te combineren met sterke isolatie.
