Mobile-Menu

Docker und Hyper-V-Container im Fokus Windows Server 2025 als Container-Host betreiben

Von Thomas Joos 4 min Lesedauer

Anbieter zum Thema

Auf einem physischen oder virtuellen Server mit Windows Server 2025 lassen sich auch Container-Instanzen bereitstellen. Ideal geeignet sind hier Windows-Container. Auch Linux-Container sind möglich, aber in der Regel sind dann Linux-Server die günstigeren und besseren Hosts.

Die Bereitstellung eines Webservers in einem Container unter Windows Server 2025.(Bild:  Joos - Microsoft)
Die Bereitstellung eines Webservers in einem Container unter Windows Server 2025.
(Bild: Joos - Microsoft)

Die Stärke von Windows Server 2025 als Container-Host liegt klar im Betreiben von Windows-Containern, auf denen ebenfalls Windows-Server in verschiedenen Versionen in Betrieb sein können. Container lassen sich auch parallel mit VMs betreiben. Ein Container-Host kann somit auch gleichzeitig als Hyper-V-Host genutzt werden.

Container-Feature in Windows Server 2025 installieren

Damit ein Windows-Server als Container-Host genutzt werden kann, ist die Installation des Features "Container" notwendig. Das geht mit dem Server-Manager, mit dem Windows Admin Center oder mit der PowerShell über den Befehl:

Bildergalerie
Bildergalerie mit 10 Bildern
Install-WindowsFeature Containers

Danach ist auf dem Server noch Docker notwendig. Die Installation lässt sich zum Beispiel mit dem folgendem Microsoft-Skript durchführen:

Invoke-WebRequest -UseBasicParsing "https://raw.githubusercontent.com/microsoft/Windows-Containers/Main/helpful_tools/Install-DockerCE/install-docker-ce.ps1" -o install-docker-ce.ps1.\install-docker-ce.ps1

Sollen Hyper-V-Container zum Einsatz kommen, ist auf dem Container-Host außerdem noch Hyper-V notwendig. Die Installation erfolgt zum Beispiel mit:

Install-WindowsFeature hyper-v

Docker-Container in Windows Server 2025 verwalten

Mit "docker images" lassen sich in der Befehlszeile die vorhandenen Images anzeigen, mit denen Admins Container erstellen können. Um Container-Images für Windows Server 2025 oder Windows Server 2022 herunterzuladen, kommen zum Beispiel folgende Befehle zum Einsatz:

docker image pull mcr.microsoft.com/windows/servercore:ltsc2025docker image pull mcr.microsoft.com/windows/nanoserver:ltsc2025

oder

docker image pull mcr.microsoft.com/windows/servercore:ltsc2022docker image pull mcr.microsoft.com/windows/nanoserver:ltsc2022

Danach lassen sich neue Container auf Basis dieser Images bereitstellen, zum Beispiel mit:

docker run mcr.microsoft.com/windows/servercore:ltsc2025

Mit dem Docker-Client kann im Docker-Hub nach Images gesucht werden. Dazu verwendet man zum Beispiel den Befehl:

docker search Microsoft

Um beispielsweise einen Container bereitzustellen, der das Nano-Image von Windows Server 2022 nutzt und darin eine Befehlszeile mitbringt, lässt sich dieser Befehl verwenden:

docker run -it mcr.microsoft.com/windows/nanoserver:ltsc2022 cmd.exe

Sobald der Container erstellt wurde, können Admins ihn in der Befehlszeile mit der Eingabeaufforderung und der PowerShell verwalten. Um sich eine Liste aller Container auf einem Container-Host anzuzeigen kann der folgende Befehl genutzt werden:

docker ps -a

Um zum Beispiel einen Container bereitzustellen, der einen Webserver auf Basis von IIS und Windows Server 2025 im Netzwerk integriert, reicht dieser Befehl:

docker run -it --name winiis -p 80:80 mcr.microsoft.com/windows/servercore:ltsc2025

Innerhalb des Containers kann die PowerShell zum Einsatz kommen. Hier lässt sich überprüfen, ob IIS im Container zur Verfügung steht. Ist das nicht der Fall, lässt sich die Installation innerhalb des Containers durchführen:

Get-WindowsFeature Web-ServerInstall-WindowsFeature Web-Server

Die Befehle unterscheiden sich daher nicht von der Installation des IIS auf einem herkömmlichen Server mit Windows Server 2022/2025.

Das steckt hinter Hyper-V-Containern

Während sich herkömmliche Container Teile des Host-Betriebssystems teilen und damit durchaus etwas voneinander abhängig und weniger getrennt sind als gewünscht, ist das bei Hyper-V-Containern anders. Herkömmliche Container und Hyper-V-Container unterscheiden sich vor allem in der Art der Isolierung. Herkömmliche Container nutzen den Kernel des Host-Systems gemeinsam und sind voneinander durch Namespace- und Cgroup-Technologien getrennt, was eine effiziente Ressourcennutzung ermöglicht, aber gleichzeitig bedeutet, dass alle Container denselben Kernel verwenden.

Hyper-V-Container hingegen laufen innerhalb einer eigenen, leichtgewichtigen virtuellen Maschine, die über den Hyper-V-Hypervisor bereitgestellt wird. Dadurch erhält jeder Hyper-V-Container eine vollständige Kernel-Isolation, sodass ein kompromittierter Container nicht direkt das Host-System oder andere Container gefährden kann.

Während herkömmliche Container sich ideal für Szenarien eignen, in denen eine hohe Dichte und schnelle Bereitstellung wichtig sind, bieten Hyper-V-Container eine zusätzliche Sicherheitsebene und sind insbesondere in Multi-Tenant-Umgebungen oder bei der Ausführung von nicht vertrauenswürdigen Workloads von Vorteil.

Um in der Befehlszeile, in der PowerShell oder mit Docker zu ermitteln, ob ein Windows-Container oder ein Hyper-V-Container auf einem Windows Server ausgeführt wird, kann der Befehl „docker inspect <Container-ID>“ genutzt werden. In der Ausgabe dieses Befehls findet sich der Parameter "HostConfig": {"Isolation": "<isolation-mode>"}, wobei <isolation-mode> entweder „process“ für herkömmliche Windows-Container oder „hyperv“ für Hyper-V-Container angibt. Alternativ lässt sich die Isolationsstufe beim Start eines Containers direkt mit dem Parameter „--isolation=<mode>“ festlegen, wobei „process“ für Windows-Container und „hyperv“ für Hyper-V-Container zur Verfügung steht.

Um Container nachträglich als Hyper-V-Container zu isolieren, reicht es aus, die Markierung „-isolation=hyperv“ zu setzen:

Jetzt Newsletter abonnieren

Täglich die wichtigsten Infos zu Netzwerktechnik, IP-Kommunikation und UCC

Mit Klick auf „Newsletter abonnieren“ erkläre ich mich mit der Verarbeitung und Nutzung meiner Daten gemäß Einwilligungserklärung (bitte aufklappen für Details) einverstanden und akzeptiere die Nutzungsbedingungen. Weitere Informationen finde ich in unserer Datenschutzerklärung. Die Einwilligungserklärung bezieht sich u. a. auf die Zusendung von redaktionellen Newslettern per E-Mail und auf den Datenabgleich zu Marketingzwecken mit ausgewählten Werbepartnern (z. B. LinkedIn, Google, Meta).

Aufklappen für Details zu Ihrer Einwilligung
docker run -it --isolation=hyperv mcr.microsoft.com/windows/nanoserver:ltsc2025 cmd.exe

Container mit der PowerShell verwalten

Windows Server Container lassen sich über die PowerShell effizient verwalten, auch auf lokal installierten Container-Hosts. Eine neue PowerShell-Sitzung wird direkt über die Befehlszeile gestartet. Sobald ein Container läuft, kann eine Verbindung zu diesem aufgebaut werden, um Konfigurationen und Serverdienste innerhalb des Containers zu steuern. Dafür ist die Container-ID erforderlich, die sich mit „docker ps“ ermitteln lässt.

Die Verbindung zum Container erfolgt über „Enter-PSSession“, wobei die Container-ID und die Option „-RunAsAdministrator“ angegeben werden. Der Container erhält eine eigene IP-Adresse, um mit dem Netzwerk oder dem Internet zu kommunizieren. Der entsprechende Befehl lautet:

Enter-PSSession -ContainerId <ID> -RunAsAdministrator

Alle eingegebenen Befehle werden innerhalb des Containers ausgeführt. Mit „exit“ wird die Sitzung beendet, sodass wieder auf dem Container-Host gearbeitet wird.

Virtuelle Switches auf dem Host spielen bei der Container-Erstellung eine zentrale Rolle, da Container über diese mit dem Netzwerk verbunden sind. Die vorhandenen virtuellen Switches lassen sich mit „Get-VMSwitch“ anzeigen.

Sitzungen innerhalb von Containern können unterbrochen und später wiederhergestellt werden, wobei laufende Cmdlets in der Sitzung weiterhin ausgeführt werden. Dafür stehen die Cmdlets Disconnect-PSSession, Connect-PSSession und Receive-PSSession zur Verfügung. Soll über eine lokale PowerShell-Sitzung ein Programm in einem Container gestartet werden, geschieht dies über „Invoke-Command“. Die Syntax lautet:

Invoke-Command -ContainerId <ID> -RunAsAdministrator -ScriptBlock { <Befehl> }

Ein Beispiel für die Ausführung eines Befehls innerhalb eines Containers:

Invoke-Command -ContainerId b2f55c8c-28d7-4c0c-ab2b-9ee62c9ae6ea -RunAsAdministrator

(ID:50374405)