Isolationsmodi
Gilt für: Windows Server 2025, Windows Server 2022, Windows Server 2019, Windows Server 2016
Windows-Container bieten zwei verschiedene Modi der Laufzeitisolation: process
und Hyper-V
Isolation. Container, die unter beiden Isolationsmodi ausgeführt werden, werden erstellt, verwaltet und funktionieren identisch. Sie produzieren und verbrauchen auch dieselben Container-Abbilder. Der Unterschied zwischen den Isolationsmodi besteht darin, in welchem Grad die Isolation zwischen dem Container, dem Hostbetriebssystem und allen anderen Containern erstellt wird, die auf diesem Host ausgeführt werden.
Prozessisolation
Dies ist der "herkömmliche" Isolationsmodus für Container und wird in der Übersicht über Windows-Containerbeschrieben. Bei der Prozessisolation werden mehrere Containerinstanzen gleichzeitig auf einem bestimmten Host mit Isolation ausgeführt, die über Namespace, Ressourcensteuerung und andere Prozessisolationstechnologien bereitgestellt wird. Wenn Container in diesem Modus ausgeführt werden, verwenden sie denselben Kernel wie der Host und auch untereinander. Dies entspricht ungefähr der Ausführung von Linux-Containern.
Was wird isoliert?
Windows-Container virtualisieren den Zugriff auf verschiedene Betriebssystemnamespaces. Ein Namespace ermöglicht den Zugriff auf Informationen, Objekte oder Ressourcen über einen Namen. Beispielsweise ist das Dateisystem wahrscheinlich der bekannteste Namespace. Es gibt zahlreiche Namespaces unter Windows, die pro Container isoliert werden:
- Dateisystem
- Registrierung
- Netzwerkports
- Prozess- und Thread-ID-Speicherplatz
- Objekt-Manager-Namespace
Durchbrechen der Isolationsbarriere
Es gibt Fälle, in denen es nützlich ist, die Isolationsgrenze zu durchdringen. Diese Vorgänge müssen vom Benutzer absichtlich angefordert werden und sollten sorgfältig berücksichtigt werden, da sie den Sicherheitsstatus des Containers gefährden kann. Windows-Container unterstützen Folgendes:
- Zuordnen freigegebener Dateien oder Volumes vom Host zum Container
- Zuordnen einer Named Pipe vom Host zum Container
- Zuordnen eines Ports vom Host zum Container
- Anpassen und Freigeben des Netzwerknamespace
- Freigeben der Sichtbarkeit des Hostgeräts im Container
Windows-Container unterstützen derzeit nicht:
- Geteilter Speicher
- Freigeben von Synchronisierungsobjekten (Semaphoren, Mutexe usw.)
- Freigegebene Prozessnamespaces
Hyper-V-Isolation
Dieser Isolationsmodus bietet verbesserte Sicherheit und umfassendere Kompatibilität zwischen Host- und Containerversionen. Bei Hyper-V Isolation werden mehrere Containerinstanzen gleichzeitig auf einem Host ausgeführt; Jeder Container wird jedoch innerhalb eines hochoptimierten virtuellen Computers ausgeführt und erhält effektiv seinen eigenen Kernel. Das Vorhandensein des virtuellen Computers bietet eine Hardwareebenenisolation zwischen jedem Container und dem Containerhost.
Isolationsbeispiele
Container erstellen
Die Verwaltung von Hyper-V-isolierten Containern mit Docker ist nahezu identisch mit der Verwaltung von prozessisolten Containern. Um einen Container mit Hyper-V Isolation mithilfe von Docker zu erstellen, verwenden Sie den parameter --isolation
, um --isolation=hyperv
festzulegen.
docker run -it --isolation=hyperv mcr.microsoft.com/windows/servercore:ltsc2019 cmd
Um einen Container mit Prozessisolation über Docker zu erstellen, verwenden Sie den parameter --isolation
, um --isolation=process
festzulegen.
docker run -it --isolation=process mcr.microsoft.com/windows/servercore:ltsc2019 cmd
Windows-Container, die auf Windows Server ausgeführt werden, werden standardmäßig mit Prozessisolation ausgeführt. Windows-Container, die unter Windows 10 Pro und Enterprise ausgeführt werden, werden standardmäßig mit Hyper-V Isolation ausgeführt. Ab dem Windows 10 Oktober 2018-Update können Benutzer, die einen Windows 10 Pro- oder Enterprise-Host ausführen, einen Windows-Container mit Prozessisolation ausführen. Benutzer müssen die Prozessisolation direkt mithilfe des --isolation=process
-Flags anfordern.
Warnung
Die Ausführung mit Prozessisolation unter Windows 10 Pro und Enterprise ist für Entwicklung/Tests vorgesehen. Ihr Host muss Windows 10 Build 17763+ ausführen und Sie müssen über eine Docker-Version mit Engine 18.09 oder höher verfügen.
Sie sollten Windows Server weiterhin als Host für Produktionsbereitstellungen verwenden. Wenn Sie dieses Feature unter Windows 10 Pro und Enterprise verwenden, müssen Sie auch sicherstellen, dass die Tags ihrer Host- und Containerversion übereinstimmen, andernfalls kann der Container nicht gestartet werden oder nicht definiertes Verhalten aufweisen.
Erläuterung zur Isolation
In diesem Beispiel werden die Unterschiede der Isolationsfähigkeiten zwischen Prozess- und Hyper-V-Isolation veranschaulicht.
Hier wird ein prozessisolierter Container bereitgestellt, der einen lang andauernden Pingprozess hosten wird.
docker run -d mcr.microsoft.com/windows/servercore:ltsc2019 ping localhost -t
Mithilfe des Befehls docker top
wird der Ping-Prozess so zurückgegeben, wie er im Container angezeigt wird. Der Prozess in diesem Beispiel weist eine ID von 3964 auf.
docker top 1f8bf89026c8f66921a55e773bac1c60174bb6bab52ef427c6c8dbc8698f9d7a
3964 ping
Auf dem Containerhost kann der befehl get-process
verwendet werden, um alle ausgeführten Pingprozesse vom Host zurückzugeben. In diesem Beispiel gibt es eine, und die Prozess-ID entspricht dem aus dem Container. Es ist derselbe Prozess, der sowohl vom Container als auch vom Host angezeigt wird.
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
Im Gegensatz dazu startet dieses Beispiel auch einen Hyper-V isolierten Container mit einem Pingprozess.
docker run -d --isolation=hyperv mcr.microsoft.com/windows/servercore:ltsc2019 ping localhost -t
Ebenso kann docker top
verwendet werden, um die ausgeführten Prozesse aus dem Container zurückzugeben.
docker top 5d5611e38b31a41879d37a94468a1e11dc1086dcd009e2640d36023aa1663e62
1732 ping
Beim Suchen nach dem Prozess auf dem Containerhost wird jedoch kein Pingprozess gefunden, und es wird ein Fehler ausgelöst.
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
Schließlich ist auf dem Host der vmwp
Prozess sichtbar, bei dem es sich um den ausgeführten virtuellen Computer handelt, der den ausgeführten Container kapselt und die ausgeführten Prozesse vom Hostbetriebssystem schützt.
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