# Windows Server Containers: Docker & Cloud-Native für Windows
TL;DR / Management Summary Während Docker oft mit Linux assoziiert wird, bietet Windows Server eine native Container-Runtime. Wir unterscheiden zwischen Windows Server Containers (gemeinsamer Kernel, schnell) und Hyper-V Isolation (eigener Kernel pro Container, maximale Sicherheit). Für Senior Admins ist dies der Weg, um Legacy .NET Apps zu modernisieren, ohne für jede Instanz eine eigene VM auf Proxmox betreiben zu müssen.
# 1. Einführung & Architektur
Die Revolution der Abstraktion.
Ein Windows-Container ist keine VM. Er teilt sich die Systemressourcen und den Kernel des Hosts, isoliert aber das Dateisystem, die Registry und das Netzwerk.
# Die Isolations-Modi
- Process Isolation: Der Container läuft direkt auf dem Host-Kernel.
- Vorteil: Extrem schnell, minimaler RAM-Verbrauch.
- Voraussetzung: Host und Container-Image müssen die identische Windows-Version haben.
- Hyper-V Isolation: Der Container läuft in einer winzigen, optimierten VM.
- Vorteil: Höhere Sicherheit, Versions-Mix möglich (z.B. Win 2019 Image auf Win 2022 Host).
# Architektur-Übersicht (Mermaid)
graph TD
subgraph "Windows Server Host"
KERN[Kernel]
RES[Hardware Resources]
end
subgraph "Process Isolation"
C1[Container A: IIS]
C2[Container B: .NET]
end
subgraph "Hyper-V Isolation"
HYP[Mini Hypervisor]
C3[Container C: Secure App]
end
C1 & C2 --> KERN
C3 --> HYP
HYP --> KERN
# 2. Einrichtung in der Praxis
Die Runtime vorbereiten.
# Schritt 1: Feature installieren
Install-WindowsFeature -Name Containers
# Optional: Hyper-V für Hyper-V Isolation
Install-WindowsFeature -Name Hyper-V
Restart-Computer
# Schritt 2: Docker / Mirantis Container Runtime
Auf Windows Server nutzen wir meist die Mirantis Container Runtime (früher Docker EE) oder das Open-Source Tool containerd.
# Installation via Provider
Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
Install-Package -Name docker -ProviderName DockerMsftProvider
Start-Service docker
# 3. Deep Dive: Windows Container Images
Nano Server vs. Server Core.
Wählen Sie das richtige Basis-Image für Ihre App:
- Nano Server: Die kleinste Version (< 500 MB). Nur für moderne Apps (.NET Core, Go, Node.js). Keine GUI, kein .NET Full Framework.
- Server Core: Größer (> 2 GB). Unterstützt fast alle Standard-Windows-Komponenten und das .NET Full Framework.
# 4. Day-2 Operations: Networking
IPs für die Container.
Windows Container nutzen standardmäßig den NAT-Modus.
- Aktion: Erstellen Sie ein transparentes Netzwerk, damit Container eine IP aus Ihrem echten Firmen-VLAN bekommen können.
docker network create -d "transparent" --subnet 10.0.0.0/24 --gateway 10.0.0.1 MyNetwork
# 5. Troubleshooting & “War Stories”
Wenn der Container hakt.
# Top 3 Fehlerbilder
-
Symptom: “The container image is not compatible with this host”.
- Ursache: Version-Mismatch im Process-Isolation Modus (z.B. 20H2 Image auf 22H2 Host).
- Lösung:
--isolation=hypervbeim Start nutzen.
-
Symptom: Container startet, aber der Webserver ist nicht erreichbar.
- Lösung: Port-Forwarding prüfen (
docker ps) und Windows Firewall-Regeln am Host für den Container-Traffic öffnen.
- Lösung: Port-Forwarding prüfen (
-
Symptom: Langsames Pulling von Images.
- Lösung: Lokale Container Registry (z.B. Harbor oder Azure Container Registry) nutzen.
# “War Story”: Das “Timezone” Desaster
Ein Kunde migrierte eine Buchhaltungs-App in einen Windows-Container. Die App berechnete alle Steuern falsch.
Analyse: Der Container-Kernel läuft standardmäßig in UTC. Die App erwartete aber “Berlin Time” (CET).
Die Entdeckung: Man kann die Zeitzone eines Windows-Containers nicht einfach mit tzutil im laufenden Betrieb ändern (wie bei VMs).
Lösung: Wir mussten ein PowerShell-Skript in das Dockerfile einbauen, das die Registry-Keys für die Zeitzone beim Build-Prozess festschreibt.
Lehre: Container sind keine “kleinen VMs”, sie sind Prozesse. Prüfen Sie Umgebungs-Annahmen (Zeit, Sprache, Pfade) doppelt!
# 6. Monitoring & Reporting
Container-Health.
# WMI / PerfMon
Nutzen Sie den Counter Hyper-V Container \ % Processor Time auf dem Host, um zu sehen, welcher Container die CPU stresst.
# 7. Fazit & Empfehlung
Windows Containers sind das ideale Werkzeug für die Cloud-Transformation.
- Empfehlung: Migrieren Sie Web-Frontends (IIS) konsequent in Container. Es vereinfacht das Patching und die Skalierung (z.B. via Kubernetes/AKS).
- Strategie: Nutzen Sie Nano Server für alles, was neu entwickelt wird. Jedes eingesparte MB reduziert die Angriffsfläche.
# Anhang: Cheatsheet
| Aufgabe | Befehl |
|---|---|
| Image suchen | docker search microsoft |
| Container starten | docker run -d -p 80:80 --name web iis |
| In Container springen | docker exec -it web powershell |
| Logs ansehen | docker logs web |
| Images bereinigen | docker image prune -a |