Vad är skillnaden mellan Docker och en virtuell maskin (VM)?

0
207

Dockerbehållare tillhandahåller liknande tjänster som virtuella datorer och ger en isolerad miljö för applikationer att köra i, men de är i grunden två olika tekniker. Vi kommer att diskutera skillnaderna och vad som gör Docker så användbar.

Vad gör Docker så användbar?

Huvudsyftet med en virtuell maskin är att dela upp en stor server i mindre bitar. Den viktiga delen är att den isolerar processer som körs på varje virtuell dator. Till exempel kan din värdleverantör ha en 32 -kärnmaskin och dela den i åtta fyra kärnmaskiner som den säljer till olika kunder. Detta minskar kostnaderna för alla, och de är bra om du kör många processer eller behöver full SSH -åtkomst till den underliggande maskinvaran.

Men om du bara kör en app använder du kanske fler resurser än nödvändigt. För att kunna köra den enda appen måste hypervisor snurra upp ett helt gästoperativsystem, vilket innebär att 32 kärnmaskiner kör åtta kopior av Ubuntu. Utöver det har du virtuella maskiners omkostnader för varje instans.

Docker presenterar en bättre lösning. Dockerbehållare erbjuder isolering utan omkostnader för virtuella maskiner. Varje behållare körs i sin egen miljö, uppdelad med Linux -namnutrymmen, men den viktiga delen är att koden i behållarna körs direkt på maskinen. Det finns ingen emulering eller virtualisering involverad.

Det finns fortfarande lite omkostnader på grund av nätverk och gränssnitt med värdsystemet, men applikationer i Docker körs i allmänhet nära metallhastigheter och säkert mycket snabbare än din genomsnittliga VPS. Du behöver inte köra 8 kopior av Ubuntu, bara en, vilket gör det billigt att köra flera Docker -behållare på en värd. Tjänster som AWS ’ s Elastic Container Service och GCP: s Cloud Run tillhandahåller sätt att köra enskilda behållare utan att tillhandahålla en underliggande server.

Annons

Behållare paketerar alla beroenden som din app behöver köra, inklusive bibliotek och binärer som operativsystemet använder. Du kan köra en CentOS -behållare på en Ubuntu -server; de använder båda Linux -kärnan, och den enda skillnaden är de inkluderade binärfilerna och biblioteken för operativsystemet.

Den största skillnaden med Docker -behållare är att du i allmänhet inte kommer att ha SSH -åtkomst till behållaren. Du behöver dock inte exakt det. Konfigurationen hanteras helt av själva containerfilen, och om du vill göra uppdateringar behöver du trycka på en ny version av behållaren.

Eftersom denna konfiguration allt sker i kod, kan du använda versionskontroll som Git för din serverprogramvara. Eftersom din behållare är en enda bild gör det det enkelt att spåra olika versioner av din behållare. Med Docker kommer din utvecklingsmiljö att vara exakt densamma som din produktionsmiljö, och också samma som alla andras utvecklingsmiljö, vilket lindrar problemet med att den är trasig på min maskin! &# 8221;

Om du vill lägga till en annan server i ditt kluster behöver du inte oroa dig för att konfigurera om servern och installera om alla beroenden du behöver. När du väl har byggt en behållare kan du enkelt snurra upp hundra instanser av den behållaren, utan att det krävs mycket konfiguration. Detta möjliggör också mycket enkel automatisk skalning, vilket kan spara mycket pengar.

Nackdelar med Docker

Naturligtvis kommer Docker inte att ersätta virtuella datorer när som helst snart. De är två olika tekniker, och virtuella maskiner har fortfarande många fördelar.

Nätverk är i allmänhet mer involverat. På en virtuell maskin har du vanligtvis dedikerad nätverkshårdvara exponerad direkt för dig. Du kan enkelt konfigurera brandväggar, ställa in program för att lyssna på vissa portar och köra komplicerade arbetsbelastningar som lastbalansering med HAProxy. På Docker, eftersom alla behållare körs på samma värd, är detta ofta lite mer komplicerat. Vanligtvis kommer dock behållarspecifika tjänster som AWS Elastic Container Service och GCP Cloud Run att tillhandahålla detta nätverk som en del av deras tjänst.

Annonsering

Prestanda på icke-native operativsystem är fortfarande i nivå med virtuella maskiner. Du kan inte köra en Linux -behållare på en Windows -värdmaskin, så Docker för Windows använder faktiskt ett Windows -delsystem för Linux VM för att hantera körande behållare. Docker ger i huvudsak ett lager av abstraktion ovanpå den virtuella maskinen i det här fallet.

Ihållande data är också lite komplicerade. Dockerbehållare är utformade för att vara statslösa. Detta kan åtgärdas med volymfästen, som monterar en katalog på värden till behållaren, och tjänster som ECS låter dig montera delade volymer. Det går dock inte att lagra data på en vanlig server, och du skulle verkligen inte vilja försöka köra en produktionsdatabas i Docker.