VM kontra LXC kontra Docker: Vilken gräns passar betrodda, privilegierade och internetexponerade tjänster?

Eva Wong är Teknisk skribent och den boende fixaren på ZimaSpace. En livslång nörd med en passion för hemma-labb och öppen källkod, hon specialiserar sig på att översätta komplexa tekniska koncept till tillgängliga, praktiska guider. Eva tror att självhosting ska vara roligt, inte skrämmande. Genom sina handledningar ger hon gemenskapen verktyg att avmystifiera hårdvaruinstallationer, från att bygga sin första NAS till att bemästra Docker-containrar.

Använd Docker för betrodda, välpaketerade applikationer; använd LXC för resurssnåla Linux-systemmiljöer; använd en VM när tjänsten behöver en oberoende kärna eller en starkare förtroendegräns.

Det här är inte tre utbytbara omslag. Docker paketerar applikationer, LXC fungerar mer som ett kompakt Linux-system och en VM virtualiserar hårdvara för en separat gästkärna. Det rätta valet förändras när en tjänst är internetexponerad, behöver omfattande behörigheter, använder en GPU eller USB-enhet eller måste återställas utan att lita på värdens tillstånd.

Klassificera förtroendet och fastställ kärngränsen

Börja med att märka varje tjänst som betrodd intern, privilegierad infrastruktur eller internetexponerad och potentiellt skadlig. Dokumentera sedan vem som tillhandahåller avbildningen eller paketen, vilka data den kan läsa och om ett intrång kan nå administrations-, backup- eller familjefilnätverk.

En tjänst innebär inte låg risk bara för att den är liten. En offentlig instrumentpanel utan monteringar på värden kan vara säkrare än ett internt automatiseringsverktyg som innehåller nätverksuppgifter, en Docker-socket och skrivåtkomst till varje delad lagringsyta.

Det här första steget kan avsluta jämförelsen. Om arbetsbelastningen inte får dela värdens kärna är Docker och LXC uteslutna, oavsett deras lägre minnesanvändning; om det är en betrodd app med ett enda syfte och begränsade monteringar kan en VM innebära mer administration utan att den praktiska risken förändras tillräckligt.

Docker och LXC isolerar processer samtidigt som de använder värdens kärna; en VM kör en gästkärna bakom en hypervisorgräns. En oberoende jämförelse av delad kärna och VM-isolering förklarar varför säkerhetsskillnaden är arkitektonisk, snarare än ett påstående om att alla containrar är osäkra.

Docker begränsar normalt enheten till en applikation och dess beroenden. LXC ger dig ett mer komplett användarutrymme med init, paket, konton och systemtjänster. Det gör LXC praktiskt för en liten Linux-miljö, men det förvandlar det inte till en VM.

Välj VM när mångfald av kärnor, opålitlig kod eller en ren brandväggs- och patchgräns på gästnivå är viktigt. Låt Docker eller LXC vara fortsatt aktuella när värdens kärna är en acceptabel delad beroendepunkt och driftsmässig enkelhet är mer värdefull än ett separat gästoperativsystem.

Låt behörigheter och hårdvaruåtkomst ändra standardvalet

En betrodd Docker-tjänst är effektiv tills den behöver värdnätverk, omfattande funktioner, skrivbara systemmonteringar eller socketen för containerhantering. Varje undantag försvagar den snäva applikationsgränsen och ökar värdet av att flytta tjänsten till en egen VM eller utforma åtkomstvägen på nytt.

LXC kan vara en praktisk mellanväg för en Linux-tjänst som vill ha en normal pakethanterare, ett stabilt värdnamn och åtkomst till utvalda enheter. Privilegierat LXC, omfattande bind-monteringar och kapslad Docker ökar dock kopplingarna, så resursbesparingen måste vägas mot svårare uppgraderingar och återställning.

För en GPU, HBA, USB-koordinator eller ett särskilt nätverkskort bör du testa återställningsbeteende, behörigheter och beständighet efter omstart. Direkt enhetsåtkomst kan vara enklast på värden, men en VM med passthrough kan ge en tydligare ägargräns när hårdvaran och IOMMU-layouten stöder det.

Se internetexponering som ett nätverks- och identitetsbeslut

Placera offentliga tjänster bakom en kontrollerad reverse proxy- eller VPN-väg, håll administrationsgränssnitt privata och begränsa tjänsternas autentiseringsuppgifter till minsta möjliga datamängder. Körningsisolering kan inte kompensera för en offentlig administrationspanel, återanvända hemligheter eller obegränsad åtkomst till lagring och säkerhetskopior.

En diskussion i communityn om hur administratörer fördelar arbetsbelastningar mellan Docker, LXC och VM:er visar att verkliga driftsmiljöer ofta använder en hybrid: en VM etablerar förtroendegränsen och Docker inuti den tillhandahåller sedan applikationspaketering. Det är en tredje arkitektur, inte ett erkännande av att ett alternativ misslyckades.

För en offentlig tjänst med stora konsekvenser bör du föredra en dedikerad VM eller värd även när Docker skulle köra den billigare. För en app med begränsade konsekvenser, oföränderlig driftsättning, begränsade monteringar och starka nätverkskontroller kan Docker fortfarande vara det enklare svaret.

-15% OFF
Single board computer zimaboard2

Jämför den enhet du ska patcha, säkerhetskopiera och återställa

Docker är enklast att bygga om när Compose-filer, hemligheter, versioner och beständiga volymer hålls separerade på ett tydligt sätt. LXC kan återställas som en systemenhet, men manuella paketändringar inuti den skapar konfigurationsdrift om de inte dokumenteras eller automatiseras.

En VM använder vanligtvis mer minne och lagring, men gör gästen till en separat enhet för säkerhetskopiering och återställning. Den fördelen är verklig först efter ett återställningstest; en ögonblicksbild på samma värd är inte en oberoende återställningskopia.

Beslutsfaktor Docker LXC VM
Primär enhet Applikation och volymer Linux-användarutrymme och filer Gästoperativsystem och virtuella diskar
Kärna Delad med värden Delad med värden Oberoende gästkärna
Bäst lämpad för Paketerad betrodd app Resurssnål Linux-systemtjänst Starkare förtroende- eller OS-gräns
Behörighetsvarning Socket, funktioner, omfattande monteringar Privilegierat läge, kapsling, bind-monteringar Passthrough och spretande gäster
Bevis på återställning Återskapa och återställ volymer Återskapa eller återställ containerstatus Återställ gästen och validera enheter

Välj gränsen per tjänst, inte per server

Välj Docker för betrodda applikationsstackar med begränsade monteringar och repeterbara definitioner. Välj LXC för effektiva Linux-systemtjänster som drar nytta av ett mer komplett användarutrymme och inte kräver en oberoende kärna. Välj en VM för opålitliga eller internetexponerade arbetsbelastningar med stora konsekvenser, alternativa operativsystem eller hårdvaruägande som gynnas av gästrixisolering.

Beslutet om operativsystem för hemservern är nästa lager, eftersom valet av värd avgör vilka kontroller för säkerhetskopiering, nätverk, containrar och VM:er som är praktiska. En blandad server kan använda alla tre gränserna utan att behandla någon av dem som standard för allt.

Sluta optimera för täthet när en tjänst behöver privilegierad åtkomst till värden, exponerar känslig administration eller inte kan återställas oberoende. Den rätta gränsen är det minst komplexa alternativet som fortfarande innehåller det fel du faktiskt bryr dig om.

Produktjämförelser

Mer att läsa

Get More Builds Like This

Stay in the Loop

Get updates from Zima - new products, exclusive deals, and real builds from the community.

Stay in the Loop preferences

We respect your inbox. Unsubscribe anytime.