Freigeben über


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.

Ein Diagramm, das einen Container zeigt, der voll von Anwendungen ist, die vom Betriebssystem und der 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-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:

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.

Ein Diagramm eines Containers, der innerhalb eines Betriebssystems auf einer virtuellen Maschine isoliert wird, die auf einem Betriebssystem innerhalb eines physischen Computers läuft.

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=hypervfestzulegen.

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=processfestzulegen.

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