Wat is het verschil tussen Docker en een virtuele machine (VM)?

0
215

Docker-containers bieden een vergelijkbare service als virtuele machines en bieden een geïsoleerde omgeving voor applicaties om in te draaien, maar het zijn in wezen twee verschillende technologieën. We zullen de verschillen bespreken en wat Docker zo nuttig maakt.

Wat maakt Docker zo nuttig?

Het belangrijkste doel van een virtuele machine is om een ​​grote server in kleinere stukken te verdelen. Het belangrijkste is dat het de processen isoleert die op elke VM worden uitgevoerd. Uw hostingprovider kan bijvoorbeeld een machine met 32 ​​kernen hebben en deze opsplitsen in acht 4 kern-VM's die hij aan verschillende klanten verkoopt. Dit verlaagt de kosten voor iedereen, en ze zijn geweldig als je veel processen uitvoert of volledige SSH-toegang tot de onderliggende hardware nodig hebt.

Als u echter slechts één app gebruikt, gebruikt u mogelijk meer bronnen dan nodig is. Om die ene app uit te voeren, moet de hypervisor een volledig gastbesturingssysteem opstarten, wat betekent dat een 32-kernmachine acht exemplaren van Ubuntu draait. Bovendien heb je voor elke instantie een virtuele machine-overhead.

Docker biedt een betere oplossing. Docker-containers bieden isolatie zonder de overhead van virtuele machines. Elke container draait in zijn eigen omgeving, afgescheiden met Linux namespaces, maar het belangrijkste is dat de code in de containers direct op de machine draait. Er is geen emulatie of virtualisatie bij betrokken.

Er is nog steeds een beetje overhead vanwege netwerken en interfaces met het hostsysteem, maar applicaties in Docker werken over het algemeen in de buurt van bare-metal snelheden, en zeker veel sneller dan je gemiddelde VPS. U hoeft geen 8 exemplaren van Ubuntu te draaien, slechts één, waardoor het goedkoop is om meerdere Docker-containers op één host te draaien. Services zoals AWS's Elastic Container Service en GCP's Cloud Run bieden manieren om individuele containers uit te voeren zonder een onderliggende server in te richten.

Advertentie

Containers verpakken alle afhankelijkheden die uw app moet uitvoeren, inclusief bibliotheken en binaire bestanden die het besturingssysteem gebruikt. U kunt een CentOS-container op een Ubuntu-server uitvoeren; ze gebruiken allebei de Linux-kernel en het enige verschil zijn de meegeleverde binaire bestanden en bibliotheken voor het besturingssysteem.

Het belangrijkste verschil met Docker-containers is dat je over het algemeen geen SSH-toegang tot de container hebt. Je hebt het echter niet echt nodig. De configuratie wordt allemaal afgehandeld door het containerbestand zelf, en als je updates wilt maken, moet je een nieuwe versie van de container pushen.

Omdat deze configuratie allemaal in code gebeurt, kun je versiebeheer zoals Git gebruiken voor je serversoftware. Omdat uw container een enkele afbeelding is, kunt u eenvoudig verschillende builds van uw container volgen. Met Docker zal uw ontwikkelomgeving precies hetzelfde zijn als uw productieomgeving, en ook hetzelfde als de ontwikkelomgeving van alle anderen, waardoor het probleem van 'het is kapot op mijn machine' wordt verlicht! 8221;

Als u nog een server aan uw cluster wilt toevoegen, hoeft u zich geen zorgen te maken over het opnieuw configureren van die server en het opnieuw installeren van alle benodigde afhankelijkheden. Als je eenmaal een container hebt gebouwd, kun je gemakkelijk honderd exemplaren van die container laten draaien, zonder dat er veel configuratie aan te pas komt. Dit maakt ook zeer eenvoudig automatisch schalen mogelijk, wat u veel geld kan besparen.

Nadelen van Docker

Natuurlijk vervangt Docker niet snel virtuele machines. Het zijn twee verschillende technologieën en virtuele machines hebben nog steeds veel voordelen.

Netwerken is over het algemeen meer betrokken. Op een virtuele machine hebt u meestal speciale netwerkhardware die rechtstreeks aan u wordt blootgesteld. U kunt eenvoudig firewalls configureren, applicaties instellen om op bepaalde poorten te luisteren en gecompliceerde workloads uitvoeren, zoals load balancing met HAProxy. Op Docker is dit, omdat alle containers op dezelfde host draaien, vaak wat ingewikkelder. Meestal bieden containerspecifieke services zoals AWS's Elastic Container Service en GCP's Cloud Run dit netwerk echter als onderdeel van hun service.

Advertentie

Prestaties op niet-native besturingssystemen is nog steeds vergelijkbaar met virtuele machines. U kunt geen Linux-container op een Windows-hostmachine uitvoeren, dus Docker voor Windows gebruikt in feite een Windows-subsysteem voor Linux-VM om actieve containers af te handelen. Docker biedt in dit geval in wezen een abstractielaag bovenop de virtuele machine.

Persistente gegevens zijn ook een beetje ingewikkeld. Dockercontainers zijn ontworpen om stateloos te zijn. Dit kan worden opgelost met volume-mounts, die een map op de host aan de container koppelen, en services zoals ECS stellen je in staat gedeelde volumes te koppelen. Het is echter niet beter dan het opslaan van gegevens op een gewone server, en u zou niet echt willen proberen een productiedatabase in Docker uit te voeren.