Isolationsmodi

Gilt für: Windows Server 2022, Windows Server 2019, Windows Server 2016

Windows-Container bieten zwei verschiedene Modi der Runtimeisolation: process- und Hyper-V-Isolation. Container, die unter beiden Isolationsmodi ausgeführt werden, werden identisch erstellt, verwaltet und funktionieren auch identisch. Sie erzeugen und nutzen auch die gleichen Containerimages. Der Unterschied zwischen den Isolationsmodi besteht darin, welcher Grad an Isolation zwischen dem Container, dem Hostbetriebssystem und allen anderen Containern, die auf diesem Host ausgeführt werden, hergestellt wird.

Prozessisolation

Dies ist der „herkömmliche“ Isolationsmodus für Container und wird in der Übersicht über Windows-Container beschrieben. Bei der Prozessisolation werden mehrere Containerinstanzen auf einem Host gleichzeitig isoliert ausgeführt, was mithilfe von Technologien zur Isolation von Namespaces, Ressourcensteuerung und anderen Prozessen ermöglicht wird. Bei der Ausführung in diesem Modus teilen sich Container untereinander und mit dem Host denselben Kernel. Dies entspricht in etwa der Funktionsweise von Linux-Containern.

Diagramm, das einen mit Anwendungen gefüllten Container zeigt, die von Betriebssystem und Hardware isoliert sind.

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-Bereich
  • Objekt-Manager-Namespace

Durchbrechen der Isolationsgrenze

Es gibt Fälle, in denen es sinnvoll ist, die Isolationsgrenze zu durchbrechen. Diese Vorgänge müssen vom Benutzer bewusst angefordert und sollten mit Sorgfalt ausgeführt werden, da dies den Sicherheitsstatus des Containers beeinträchtigen kann. Windows-Container unterstützen Folgendes:

Windows-Container unterstützen derzeit Folgendes nicht:

  • Shared Memory
  • Freigeben von Synchronisierungsobjekten (Semaphoren, Mutexe usw.)
  • Freigegebene Prozessnamespaces

Hyper-V-Isolierung

Dieser Isolationsmodus bietet erhöhte Sicherheit und umfassendere Kompatibilität zwischen Host- und Containerversionen. Bei der Hyper-V-Isolation werden mehrere Containerinstanzen gleichzeitig auf einem Host ausgeführt. Jeder Container wird jedoch innerhalb eines hochgradig optimierten virtuellen Computers ausgeführt und erhält effektiv seinen eigenen Kernel. Das Vorhandensein des virtuellen Computers ermöglicht eine Isolation auf Hardwareebene zwischen den einzelnen Containern und dem Containerhost.

Diagramm eines Containers, der innerhalb eines Betriebssystems auf einem virtuellen Computer isoliert wird, der seinerseits unter einem Betriebssystem auf einem physischen Computer ausgeführt wird.

Beispiele für Isolation

Erstellen eines Containers

Die Verwaltung von Containern mit Hyper-V-Isolation mit Docker ist nahezu identisch mit der Verwaltung von prozessisolierten Containern. Verwenden Sie zum Erstellen eines Containers mit Hyper-V-Isolation mithilfe von Docker den --isolation-Parameter, um --isolation=hyperv festzulegen.

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

Verwenden Sie zum Erstellen eines Containers mit Prozessisolation durch Docker den --isolation-Parameter, um --isolation=process festzulegen.

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

Unter Windows Server ausgeführte Windows-Container werden standardmäßig mit Prozessisolation ausgeführt. Unter Windows 10 Pro und Enterprise ausgeführte Windows-Container werden standardmäßig mit Hyper-V-Isolation ausgeführt. Ab Windows 10 Oktober 2018-Update können Benutzer, die einen Windows 10 Pro- oder Enterprise-Host betreiben, 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 die Entwicklung bzw. für Tests gedacht. Auf dem Host muss Windows 10 Build 17763 oder höher ausgeführt werden, und Sie müssen über ein Docker-Modul mit der Version 18.09 oder höher verfügen.

Sie sollten weiterhin Windows Server als Host für Produktionsbereitstellungen verwenden. Wenn Sie dieses Feature unter Windows 10 Pro und Enterprise verwenden, müssen Sie auch sicherstellen, dass die Host- und Containerversionstags übereinstimmen, da andernfalls der Container ggf. nicht gestartet wird oder nicht definiertes Verhalten aufweist.

Erläuterung zur Isolation

In diesem Beispiel werden die Unterschiede bei den Isolationsfunktionen zwischen Prozess- und Hyper-V-Isolation veranschaulicht.

Hier wird ein Container mit Prozessisolation bereitgestellt, der einen Pingprozess mit langer Ausführungsdauer hosten wird.

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

Mithilfe des docker top-Befehls wird der Pingprozess zurückgegeben, wie im Container zu sehen. Der Prozess in diesem Beispiel weist die ID 3964 auf.

docker top 1f8bf89026c8f66921a55e773bac1c60174bb6bab52ef427c6c8dbc8698f9d7a

3964 ping

Auf dem Containerhost kann der get-process-Befehl verwendet werden, um einen beliebigen ausgeführten Pingprozess vom Host zurückzugeben. In diesem Beispiel ist ein solcher Prozess vorhanden, und die Prozess-ID entspricht der ID im Container. Es handelt sich um den gleichen Prozess, der sowohl im Container als auch auf dem Host sichtbar ist.

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

Dieses Beispiel startet auch einen Container mit Hyper-V-Isolation 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 vom 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 ausgegeben.

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

Auf dem Host ist der Prozess vmwp sichtbar, bei dem es sich um den ausgeführten virtuellen Computer handelt, der den ausgeführten Container kapselt und die ausgeführten Prozesse vor dem 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