VM jämfört med LXC och Docker: Vilken isoleringsgräns passar betrodda, privilegierade och internetexponerade tjänster?

Eva Wong är teknisk skribent och händig hemmabyggare på ZimaSpace. Som tekniknörd sedan barnsben med ett brinnande intresse för hemlabb och programvara med öppen källkodspecialiserar hon sig på att göra komplexa tekniska koncept begripliga genom praktiska, praktiska guider. Eva tycker att självhosting ska vara roligt, inte avskräckande. Genom sina handledningar hjälper hon communityn att göra hårdvaruinstallationer mindre mystiska, från att bygga sin första NAS till att bemästra Docker-containrar.

Använd Docker för betrodda, välpaketerade applikationer, LXC för lätta Linuxsystemmiljöer och en virtuell maskin när tjänsten behöver en oberoende kärna eller en starkare förtroendegräns.

Det här är inte tre utbytbara lösningar. Docker paketerar applikationer, LXC fungerar mer som ett kompakt Linuxsystem och en virtuell maskin virtualiserar hårdvaran för en separat gästkärna. Rätt val förändras när en tjänst är internetexponerad, kräver omfattande privilegier, använder en GPU- eller USB-enhet eller måste kunna återställas utan att förlita sig på värdens tillstånd.

Klassificera förtroende 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. Notera sedan vem som tillhandahåller dess avbildning eller paket, vilka data den kan läsa och om ett intrång kan nå nätverk för administration, säkerhetskopiering eller familjefiler.

En tjänst är inte lågrisk bara för att den är liten. En offentlig kontrollpanel utan monteringar från värden kan vara säkrare än ett internt automatiseringsverktyg med nätverksuppgifter, åtkomst till ett Docker-uttag och skrivbehörighet till alla delade resurser.

Den här första kontrollen kan avgöra 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 däremot gäller en betrodd app med ett enda syfte och begränsade monteringar kan en virtuell maskin innebära mer administration utan att minska den praktiska risken nämnvärt.

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

Docker begränsar vanligtvis enheten till en applikation och dess beroenden. LXC ger dig en mer komplett användarmiljö med init, paket, konton och systemtjänster. Det gör LXC praktiskt för en liten Linuxmiljö, men det förvandlar det inte till en virtuell maskin.

Välj VM när skillnader mellan kärnor, opålitlig kod eller en tydlig gräns för gästbrandvägg och säkerhetsuppdateringar är viktigt. Fortsätt överväga Docker eller LXC när värdens kärna är en acceptabel delad beroendefaktor och driftsmässig enkelhet är viktigare än ett separat gästoperativsystem.

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

En betrodd Docker-tjänst är effektiv ända tills den behöver värdnätverk, omfattande behörigheter, skrivbara systemmonteringar eller åtkomst till containerns hanteringssocket. Varje undantag försvagar den snäva programgränsen och ökar värdet av att flytta tjänsten till en egen VM eller göra om åtkomstvägen.

LXC kan vara en praktisk mellanväg för en Linux-tjänst som behöver en vanlig pakethanterare, ett stabilt värdnamn och åtkomst till utvalda enheter. Privilegierad LXC, omfattande bind-monteringar och nästlad Docker ökar dock kopplingen, så resursbesparingen måste vägas mot svårare uppgraderingar och återställning.

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

Se exponering mot internet som ett beslut om nätverk och identitet

Placera offentliga tjänster bakom en enda kontrollerad väg via omvänd proxy eller VPN, håll hanteringsgränssnitt privata och begränsa tjänstens autentiseringsuppgifter till minsta möjliga datamängder. Isolering vid körning kan inte kompensera för en offentlig adminpanel, återanvända hemligheter eller obegränsad åtkomst till lagring och säkerhetskopior.

En diskussion i communityn om hur operatörer fördelar arbetsbelastningar mellan Docker, LXC och virtuella maskiner visar att verkliga driftsättningar ofta använder en hybridlösning: en VM skapar förtroendegränsen, och Docker inuti den sköter paketeringen av appar. Det är en tredje arkitektur, inte ett medgivande om att något av alternativen misslyckats.

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 låga konsekvenser, oföränderlig driftsättning, begränsade monteringar och starka nätverkskontroller kan Docker fortfarande vara det enklare alternativet.

Single board computer zimaboard2

Jämför enheten som du ska uppdatera, säkerhetskopiera och återställa

Docker är enklast att återskapa när Compose-filer, hemligheter, versioner och beständiga volymer hålls tydligt åtskilda. LXC kan återställas som en systemenhet, men manuella paketändringar i den leder till konfigurationsdrift om de inte dokumenteras eller automatiseras.

En virtuell maskin använder vanligtvis mer minne och lagringsutrymme, men gör gästen till en separat enhet för säkerhetskopiering och återställning till tidigare läge. 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 Virtuell maskin
Primär enhet Applikation och volymer Linux-användarmiljö och filer Gästoperativsystem och virtuella diskar
Kärna Delad med värden Delad med värden Oberoende gästkärna
Passar bäst Paketerad, betrodd app Lätt Linux-systemtjänst Starkare gräns för förtroende eller operativsystem
Varning om privilegier Socket, funktioner, omfattande monteringar Privilegierat läge, nästling, bindmonteringar Vidarebefordran av enheter och överflöd av gäster
Bevisad återställning Återskapa och återställ volymerna Återskapa eller återställ containertillståndet Återställ gästen och verifiera enheterna

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

Välj Docker för betrodda applikationsstackar med begränsade monteringar och repeterbara konfigurationer. Välj LXC för effektiva Linux-systemtjänster som har nytta av en mer komplett användarmiljö och inte kräver en oberoende kärna. Välj en virtuell maskin för opålitliga eller internetvända arbetsbelastningar med stora konsekvenser, alternativa operativsystem eller hårdvaruåtkomst som har nytta av gästisolering.

Beslutet om operativsystem för hemmaservern är nästa lager, eftersom valet av värd avgör vilka lösningar för säkerhetskopiering, nätverk, containrar och virtuella maskiner som är praktiska. En blandad server kan använda alla tre gränser utan att behandla någon av dem som standardval för alla situationer.

Sluta optimera för täthet när en tjänst behöver privilegierad åtkomst till värden, exponeras för känslig administration eller inte kan återställas oberoende. Rätt gräns är det minst komplexa alternativet som ändå begränsar 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.