Delen via


Isolatiemodi

Van toepassing op: Windows Server 2025, Windows Server 2022, Windows Server 2019, Windows Server 2016

Windows-containers bieden twee verschillende runtime-isolatiemodi: process en Hyper-V isolatie. Containers die worden uitgevoerd onder beide isolatiemodi, worden op dezelfde manier gemaakt, beheerd en functioneren. Ze produceren en verbruiken dezelfde containerafbeeldingen ook. Het verschil tussen de isolatiemodi is in welke mate van isolatie er wordt gemaakt tussen de container, het hostbesturingssysteem en alle andere containers die op die host worden uitgevoerd.

Procesisolatie

Dit is de 'traditionele' isolatiemodus voor containers en wordt beschreven in het overzicht van Windows-containers. Met procesisolatie worden meerdere containerinstanties gelijktijdig uitgevoerd op een bepaalde host met isolatie via naamruimte, resourcebeheer en andere procesisolatietechnologieën. Wanneer containers in deze modus worden uitgevoerd, delen containers dezelfde kernel met de host en elkaar. Dit is ongeveer hetzelfde als hoe Linux-containers worden uitgevoerd.

een diagram met een container vol toepassingen die worden geïsoleerd van het besturingssysteem en de hardware.

Wat wordt geïsoleerd

Windows-containers virtualiseren de toegang tot verschillende naamruimten van het besturingssysteem. Een naamruimte biedt toegang tot informatie, objecten of resources via een naam. Het bestandssysteem is bijvoorbeeld waarschijnlijk de bekendste naamruimte. Er zijn talloze naamruimten in Windows die per container worden geïsoleerd:

  • bestandssysteem
  • register
  • netwerkpoorten
  • ruimte voor proces- en thread-id
  • Objectbeheer-naamruimte

De isolatiegrens doorboren

Er zijn gevallen waarin het nuttig is om de isolatiegrens te doorboren. Deze bewerkingen moeten bewust door de gebruiker worden aangevraagd en moeten zorgvuldig worden overwogen, omdat het de beveiligingspostuur van de container kan in gevaar kunnen komen. Windows-containers ondersteunen het volgende:

Windows-containers bieden momenteel geen ondersteuning voor:

  • gedeeld geheugen
  • synchronisatieobjecten delen (semaphores, mutexes, enzovoort)
  • gedeelde procesnaamruimten

isolatie van Hyper-V

Deze isolatiemodus biedt verbeterde beveiliging en bredere compatibiliteit tussen host- en containerversies. Met Hyper-V isolatie worden meerdere containerinstanties gelijktijdig uitgevoerd op een host; Elke container wordt echter uitgevoerd in een maximaal geoptimaliseerde virtuele machine en krijgt effectief een eigen kernel. De aanwezigheid van de virtuele machine biedt isolatie op hardwareniveau tussen elke container en de containerhost.

Een diagram van een container die wordt geïsoleerd binnen een besturingssysteem op een virtuele machine, die wordt uitgevoerd op een besturingssysteem binnen een fysieke machine.

Voorbeelden van isolatie

Container maken

Het beheren van Hyper-V-geïsoleerde containers met Docker is bijna identiek aan het beheren van proces-geïsoleerde containers. Als u een container met Hyper-V isolatie wilt maken met behulp van Docker, gebruikt u de parameter --isolation om --isolation=hypervin te stellen.

docker run -it --isolation=hyperv mcr.microsoft.com/windows/servercore:ltsc2019 cmd

Als u een container met procesisolatie wilt maken via Docker, gebruikt u de parameter --isolation om --isolation=processin te stellen.

docker run -it --isolation=process mcr.microsoft.com/windows/servercore:ltsc2019 cmd

Windows-containers die worden uitgevoerd op Windows Server, worden standaard uitgevoerd met procesisolatie. Windows-containers die worden uitgevoerd op Windows 10 Pro en Enterprise, worden standaard uitgevoerd met Hyper-V isolatie. Vanaf de Update van Windows 10 oktober 2018 kunnen gebruikers met een Windows 10 Pro- of Enterprise-host een Windows-container uitvoeren met procesisolatie. Gebruikers moeten procesisolatie rechtstreeks aanvragen met behulp van de vlag --isolation=process.

Waarschuwing

Het proces wordt uitgevoerd met procesisolatie op Windows 10 Pro en Enterprise en is bedoeld voor ontwikkeling en testen. Op uw host moet Windows 10 build 17763+ worden uitgevoerd en u moet een Docker-versie hebben met Engine 18.09 of hoger.

U moet Windows Server blijven gebruiken als host voor productie-implementaties. Door deze functie te gebruiken in Windows 10 Pro en Enterprise, moet u er ook voor zorgen dat uw tags voor host- en containerversies overeenkomen, anders kan de container niet worden gestart of niet-gedefinieerd gedrag vertonen.

Uitleg over isolatie

In dit voorbeeld ziet u de verschillen in isolatiemogelijkheden tussen proces- en Hyper-V isolatie.

Hier wordt een proces-geïsoleerde container geïmplementeerd en wordt een langlopend pingproces gehost.

docker run -d mcr.microsoft.com/windows/servercore:ltsc2019 ping localhost -t

Met behulp van de opdracht docker top wordt het pingproces geretourneerd, zoals te zien is in de container. Het proces in dit voorbeeld heeft een id van 3964.

docker top 1f8bf89026c8f66921a55e773bac1c60174bb6bab52ef427c6c8dbc8698f9d7a

3964 ping

Op de containerhost kan de get-process opdracht worden gebruikt om actieve pingprocessen van de host te retourneren. In dit voorbeeld is er een en komt de proces-id overeen met die uit de container. Het is hetzelfde proces dat zichtbaar is vanuit zowel de container als de host.

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

Ter vergelijking, in dit voorbeeld wordt ook een Hyper-V geïsoleerde container gestart met een pingproces.

docker run -d --isolation=hyperv mcr.microsoft.com/windows/servercore:ltsc2019 ping localhost -t

Op dezelfde manier kan docker top worden gebruikt om de actieve processen uit de container te retourneren.

docker top 5d5611e38b31a41879d37a94468a1e11dc1086dcd009e2640d36023aa1663e62

1732 ping

Bij het zoeken naar het proces op de containerhost wordt echter geen pingproces gevonden en wordt er een fout gegenereerd.

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

Ten slotte is het vmwp proces zichtbaar op de host. Dit is de actieve virtuele machine die de actieve container inkapselt en de actieve processen beveiligt tegen het hostbesturingssysteem.

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