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.
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:
- gedeelde bestanden of volumes van de host koppelen aan de container
- een benoemde pijp van de host toewijzen aan de container
- een poort van de host toewijzen aan de container
- het aanpassen en delen van de netwerknaamruimte
- geef zichtbaarheid van hostapparaten door aan de container
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.
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=hyperv
in 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=process
in 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