Isoleringslägen
Gäller för: Windows Server 2025, Windows Server 2022, Windows Server 2019, Windows Server 2016
Windows-containers erbjuder två distinkta lägen för körisolering: process
- och Hyper-V
-isolering. Containrar som körs under båda isoleringslägena skapas, hanteras och fungerar på samma sätt. De producerar och använder också samma containeravbildningar. Skillnaden mellan isoleringslägena är vilken grad av isolering som skapas mellan containern, värdoperativsystemet och alla andra containrar som körs på värddatorn.
Processisolering
Detta är det "traditionella" isoleringsläget för containrar och beskrivs i översikten över Windows-containrar. Med processisolering körs flera containerinstanser samtidigt på en viss värd med isolering som tillhandahålls via namnrymd, resurskontroll och andra processisoleringstekniker. När de körs i det här läget delar containrar samma kernel med värden och varandra. Detta är ungefär samma som hur Linux-containrar körs.
Vad blir isolerat
Windows-containrar virtualiserar åtkomsten till olika operativsystemnamnområden. Ett namnområde ger åtkomst till information, objekt eller resurser via ett namn. Till exempel är filsystemet förmodligen det mest kända namnområdet. Det finns många namnområden i Windows som isoleras per container:
- filsystem
- register
- nätverksportar
- process- och tråd-ID-utrymme
- Namnområde för Object Manager
Genomborra isoleringsgränsen
Det finns fall då det är användbart att genomborra isoleringsgränsen. Dessa åtgärder måste avsiktligt begäras av användaren och bör utföras noggrant eftersom det kan äventyra containerns säkerhetsstatus. Windows-containrar stöder följande:
- Kartlägga delade filer eller volymer från värd till container
- koppla en namngiven rörledning från värden till containern
- mappa en port från värden till containern
- anpassa och dela nätverksnamnsutrymme
- Möjliggör värdenhetens insyn i containern
Windows-containrar stöder för närvarande inte:
- delat minne
- dela synkroniseringsobjekt (semaphores, mutexes osv.)
- namnområden för delad process
Hyper-V isolering
Det här isoleringsläget ger förbättrad säkerhet och bredare kompatibilitet mellan värd- och containerversioner. Med Hyper-V isolering körs flera containerinstanser samtidigt på en värd. Varje container körs dock inuti en mycket optimerad virtuell dator och får effektivt sin egen kernel. Närvaron av den virtuella maskinen säkerställer maskinvarunivåisolering mellan varje container och värdmaskinen.
Isoleringsexempel
Skapa container
Att hantera Hyper-V-isolerade containrar med Docker är nästan identiskt med hanteringen av processisolerade containrar. Om du vill skapa en container med Hyper-V isolering med Docker använder du parametern --isolation
för att ange --isolation=hyperv
.
docker run -it --isolation=hyperv mcr.microsoft.com/windows/servercore:ltsc2019 cmd
Om du vill skapa en container med processisolering via Docker använder du parametern --isolation
för att ange --isolation=process
.
docker run -it --isolation=process mcr.microsoft.com/windows/servercore:ltsc2019 cmd
Windows-containrar som körs på Windows Server körs som standard med processisolering. Windows-containrar som körs på Windows 10 Pro och Enterprise körs som standard med Hyper-V isolering. Från och med uppdateringen av Windows 10 oktober 2018 kan användare som kör en Windows 10 Pro- eller Enterprise-värd köra en Windows-container med processisolering. Användarna måste begära processisolering direkt med hjälp av flaggan --isolation=process
.
Varning
Att köra med processisolering i Windows 10 Pro och Enterprise är avsett för utveckling/testning. Din värd måste köra Windows 10 version 17763+ och du måste ha en Docker-version med version 18.09 av Engine eller senare.
Du bör fortsätta att använda Windows Server som värd för produktionsdistributioner. Genom att använda den här funktionen i Windows 10 Pro och Enterprise måste du också se till att taggarna för värd- och containerversion matchar, annars kan containern misslyckas med att starta eller uppvisa odefinierat beteende.
Förklaring av isolering
Det här exemplet visar skillnaderna i isoleringsmöjligheter mellan process och Hyper-V isolering.
Här distribueras en processisolerad container som är värd för en tidskrävande pingprocess.
docker run -d mcr.microsoft.com/windows/servercore:ltsc2019 ping localhost -t
Med hjälp av kommandot docker top
returneras pingprocessen enligt vad som visas i containern. Processen i det här exemplet har ett ID på 3964.
docker top 1f8bf89026c8f66921a55e773bac1c60174bb6bab52ef427c6c8dbc8698f9d7a
3964 ping
På containervärden kan kommandot get-process
användas för att visa alla pingprocesser som körs från containervärden. I det här exemplet finns det en, och process-ID:t matchar det från containern. Det är samma process som visas från både containern och värden.
get-process -Name ping
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id SI ProcessName
------- ------ ----- ----- ----- ------ -- -- -----------
67 5 820 3836 ...71 0.03 3964 3 PING
Det här exemplet startar däremot även en Hyper-V isolerad container med en pingprocess.
docker run -d --isolation=hyperv mcr.microsoft.com/windows/servercore:ltsc2019 ping localhost -t
På samma sätt kan docker top
användas för att returnera processer som körs från containern.
docker top 5d5611e38b31a41879d37a94468a1e11dc1086dcd009e2640d36023aa1663e62
1732 ping
När du söker efter processen på containervärden hittas dock ingen pingprocess och ett fel utlöses.
get-process -Name ping
get-process : Cannot find a process with the name "ping". Verify the process name and call the cmdlet again.
At line:1 char:1
+ get-process -Name ping
+ ~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (ping:String) [Get-Process], ProcessCommandException
+ FullyQualifiedErrorId : NoProcessFoundForGivenName,Microsoft.PowerShell.Commands.GetProcessCommand
Slutligen, på värden, är processen vmwp
synlig, vilket är den körande virtuella maskinen som inkapslar den körande containern och skyddar de körande processerna från värdoperativsystemet.
get-process -Name vmwp
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id SI ProcessName
------- ------ ----- ----- ----- ------ -- -- -----------
1737 15 39452 19620 ...61 5.55 2376 0 vmwp