Virtuele machine versus container: virtualisatielaag, kernel, opstarttijd, isolatie en wanneer welke
Met allebei kan één computer meerdere applicaties van elkaar geïsoleerd draaien, maar ze virtualiseren een andere laag. Een virtuele machine steunt op een hypervisor die virtuele hardware maakt, zoals CPU's, geheugen, schijven en netwerkapparaten, en elke virtuele machine draait daarop een volledig besturingssysteem, inclusief kernel. Een container deelt de kernel van het besturingssysteem van de host en gebruikt kernelfuncties zoals namespaces en cgroups om te scheiden wat processen kunnen zien en welke resources ze mogen gebruiken. Containers starten geen besturingssysteem op, dus ze zijn lichter en starten sneller, terwijl virtuele machines winnen op sterkte van de isolatie en op het aantal besturingssystemen dat ze kunnen draaien. In de cloud worden de twee meestal gecombineerd, met containers die binnen virtuele machines draaien.
| Kenmerk | Virtuele machine | Container |
|---|---|---|
| Virtualisatielaag | Hardware: de hypervisor maakt virtuele CPU's, geheugen, schijven en netwerkapparaten en deelt ze uit | Besturingssysteem: op de kernel van de host wordt gescheiden wat processen kunnen zien (proces-ID's, netwerk, bestandssysteem enz.) en welke resources ze mogen gebruiken |
| OS-kernel | Elke virtuele machine draait een eigen besturingssysteem (gast-OS), met een eigen kernel | Alle containers delen de kernel van de host; containerimages bevatten geen kernel |
| Besturingssystemen die kunnen draaien | Ook een ander soort OS dan de host (bijvoorbeeld Windows op een Linux-host) | Alleen wat op de kernel van de host draait; Linux-containers hebben een Linux-kernel nodig |
| Imagegrootte | Bevat een volledig OS, dus doorgaans in gigabytes uitgedrukt | Alleen de applicatie en de bibliotheken die ze nodig heeft, dus doorgaans veel kleiner dan een virtuele machine |
| Opstarttijd | Start door een OS op te starten, dus duurt vaak tientallen seconden tot enkele minuten | Start alleen processen, dus snel: doorgaans draait hij binnen enkele seconden |
| Sterkte van de isolatie | Sterk: scheiding op hardwareniveau, dus problemen in één gastkernel bereiken zelden andere virtuele machines | Zwakker dan een virtuele machine: de kernel wordt gedeeld, dus een misbruikte kwetsbaarheid in de kernel kan de host en andere containers treffen |
| Efficiënt gebruik van resources | Elk gast-OS gebruikt eigen geheugen en CPU, dus er passen er minder op één machine | Geen gedupliceerde besturingssystemen, dus er passen er meer in dezelfde resources |
| Typische toepassingen | Verschillende soorten OS naast elkaar draaien, serverconsolidatie, virtuele machines bij IaaS, omgevingen die sterke isolatie vereisen | Microservices, testen en uitleveren in CI/CD, grootschalig beheer met Kubernetes, ontwikkel- en productieomgeving gelijk houden |
De getalswaarden zijn typische ordegroottes en variëren per procesgeneratie en product.