
Docker unter WSL 2: Der Game-Changer für Webentwickler

Dieser Artikel ist Teil unserer Serie zur modernen WSL 2 Webentwicklung.
Die Arbeit mit Docker unter WSL 2 war lange Zeit ein Traum, der nun Realität ist. Früher war Docker auf Windows ein Kompromiss: schwere VirtualBox-VMs, träges Hyper-V, hoher Ressourcenverbrauch und ständige Netzwerkprobleme.
Mit der Einführung von Docker unter WSL 2 hat sich das grundlegend geändert. Die Container laufen heute auf einem echten Linux-Kernel, tief integriert in Windows – ohne Emulation, ohne Übersetzungsschichten. In diesem siebten Teil der Serie zeige ich dir im Detail, wie du Docker unter WSL 2 sauber, performant und alltagstauglich einsetzt. Wir gehen alle Szenarien durch: Vom einfachen Webserver über PHP-Stacks bis hin zur Laravel-Installation.
Warum WSL 2 der technische Game-Changer ist
Um zu verstehen, warum dein Setup plötzlich so schnell ist, lohnt ein Blick unter die Haube. Der entscheidende Unterschied liegt im Kernel.
In der alten Welt (WSL 1) mussten Systemaufrufe (Syscalls) mühsam von Linux nach Windows übersetzt werden. Das war bei Dateioperationen extrem langsam und führte oft zu Fehlern bei komplexen Tools.
In der neuen Welt (WSL 2) läuft eine echte Linux-Utility-VM mit eigenem Kernel. Das bringt dir drei massive Vorteile:
Native Docker-Performance: Container starten in Sekundenbruchteilen.
Volle Kompatibilität: Du kannst exakt dieselben Linux-Images nutzen wie in der Produktion.
Hybrider Workflow: Docker-Befehle funktionieren gleichzeitig in der Windows PowerShell und im WSL 2 Terminal (Ubuntu).
Docker ist kein Fremdkörper mehr, sondern Teil des Systems.
Setup: Docker Desktop mit WSL 2 Backend
Bevor wir Code schreiben, müssen wir das Fundament legen.
1. Voraussetzungen prüfen
Du benötigst Windows 10 (ab Build 18362) oder Windows 11. Öffne deine PowerShell und prüfe, ob WSL 2 als Standard gesetzt ist:
wsl --set-default-version 22. Docker Desktop korrekt konfigurieren
Lade Docker Desktop für Windows herunter und installiere es. Achte während der Installation (oder nachträglich in den Einstellungen) auf diesen entscheidenden Haken:
Use the WSL 2 based engine
Damit verhindern wir, dass Docker die alte, schwere Hyper-V VM nutzt.
3. Die Brücke zu Ubuntu schlagen (Wichtig!)
Das ist der Schritt, den viele vergessen: Docker läuft zwar, aber dein Ubuntu-Terminal weiß noch nichts davon.
Öffne Docker Desktop → Settings (Zahnrad).
Gehe zu Resources → WSL Integration.
Aktiviere den Schalter bei deiner Distribution (z. B. Ubuntu-24.04).
Klicke auf Apply & Restart.
Prüfe nun in deinem WSL-Terminal, ob die Verbindung steht:
docker --version
docker psErscheint hier keine Fehlermeldung, bist du bereit.
Praxis-Teil 1: Die Basics (Nginx & Apache)
Jetzt gehen wir in die Praxis. Welchen Webserver du wählst, ist Geschmackssache – Docker kann beides.
Option A: Der Nginx-Test (Hello World)
Perfekt für statische Seiten oder als Reverse Proxy.
docker run -d -p 8080:80 --name mein-webserver nginxÖffne jetzt deinen Windows-Browser: http://localhost:8080 Du siehst die "Welcome to nginx"-Seite.
Warum das genial ist: WSL 2 leitet den Port automatisch an Windows weiter. Du musst keine IP-Adresse der VM suchen. Es fühlt sich an wie localhost.
Option B: Der Apache Quickstart
Viele PHP-Entwickler bevorzugen Apache wegen der .htaccess Unterstützung.
docker run -d -p 8081:80 --name mein-apache apache(Hinweis: Wir nutzen hier Port 8081, falls 8080 noch vom Nginx belegt ist). Unter http://localhost:8081 begrüßt dich nun: It works!
Praxis-Teil 2: Echten Code einbinden (PHP & Mounts)
Ein leerer Server nützt uns nichts. Wir wollen unseren Code live bearbeiten. Dazu nutzen wir "Bind Mounts".
Apache mit eigenem Projekt verbinden
Vorbereitung: Erstelle einen Ordner in deinem WSL-Home (nicht auf /mnt/c!):
mkdir -p ~/projects/apache-test
cd ~/projects/apache-test
echo "<div>Mein Code lebt!</div>" > index.htmlDer Start-Befehl:
docker run -d \
-p 8082:80 \
-v $(pwd):/usr/local/apache2/htdocs \
--name apache-dev \
httpd:2.4Erklärung:
-v $(pwd):/usr/local/apache2/htdocs: Wir spiegeln das aktuelle Verzeichnis (pwd) direkt in das Dokumenten-Verzeichnis des Containers.Änderst du nun die
index.htmlin VS Code, ist die Änderung sofort im Browser sichtbar.
Apache mit PHP (Der realistische Stack)
Apache allein kann kein PHP parsen. Dafür nutzen wir ein Image, das PHP bereits integriert hat.
Vorbereitung:
echo "<?php phpinfo();" > index.phpDer Container-Start:
docker run -d \
-p 8083:80 \
-v $(pwd):/var/www/html \
--name apache-php \
php:8.3-apacheRufe http://localhost:8083 auf. Du siehst die volle PHP-Info-Tabelle. Das ist ein vollwertiger LAMP-Stack (ohne MySQL), hochgefahren in 2 Sekunden.
Praxis-Teil 3: Laravel in Docker installieren (Advanced)
Kommen wir zur Königsdisziplin. Du willst Laravel nutzen, hast aber keine Lust, PHP und Composer lokal zu installieren? Kein Problem. Wir nutzen Docker, um Laravel zu installieren und auszuführen.
Wir nutzen dazu Laravel Sail, eine leichte Docker-Umgebung, die standardmäßig mit Laravel kommt.
Schritt 1: Das Projekt erstellen
Wir nutzen einen temporären Container, der uns curl und php zur Verfügung stellt, um den Installer zu laden.
Führe diesen Befehl in deinem ~/projects Ordner aus:
curl -s "https://laravel.build/mein-laravel-app" | bashWas passiert hier?
Der Befehl lädt ein Docker-Script von Laravel.
Er startet einen Container, der PHP und Composer enthält.
Er installiert ein komplettes Laravel-Projekt in den Ordner
mein-laravel-app.Das alles passiert, ohne dass du PHP lokal installiert haben musst.
Schritt 2: Den Stack starten
Wechsle in das neue Verzeichnis und starte die Umgebung:
cd mein-laravel-app
./vendor/bin/sail up -d(Hinweis: "Sail" ist ein Wrapper um docker-compose. Es startet PHP, MySQL, Redis und Mailpit automatisch).
Schritt 3: Entwickeln
Öffne http://localhost in deinem Browser. Du siehst die Laravel-Startseite.
Um Befehle auszuführen (z. B. Migrationen), nutzt du einfach Sail:
./vendor/bin/sail artisan migrateSo hast du eine komplette Enterprise-Entwicklungsumgebung aufgesetzt, ohne dein Windows-System mit Installationen zuzumüllen. Das ist die Power von Docker unter WSL 2.
Aufräumen: Sauberkeit muss sein
Container sind keine Haustiere, sondern Nutzvieh. Wenn du fertig bist, lösche sie.
Einzeln stoppen und löschen:
docker stop apache-dev
docker rm apache-devOder alle Test-Container aus diesem Tutorial auf einmal entfernen:
docker rm -f mein-webserver mein-apache apache-dev apache-php(Um Laravel Sail zu stoppen, gehe in den Ordner und tippe ./vendor/bin/sail down).
Typische Fehler unter WSL 2 (Troubleshooting)
Auch mit Docker unter WSL 2 gibt es Stolpersteine. Hier sind die Klassiker:
1. Port 80 ist blockiert Du startest einen Container auf Port 80, aber er bricht ab? Ursache: Unter Windows läuft oft der IIS (Internet Information Services) oder Skype, die diesen Port blockieren. Lösung: Nutze immer alternative Ports wie 8080, 8081 etc. (-p 8080:80).
2. Extrem langsame Performance Der Container läuft, aber das Laden der Seite dauert 2-3 Sekunden? Ursache: Dein Projekt liegt unter /mnt/c/Users/.... Docker muss jede Datei über das langsame 9P-Protokoll von Windows holen. Lösung: Verschiebe dein Projekt nach ~/projects/mein-projekt. (Siehe Teil 6 der Serie).
3. Docker Befehl nicht gefunden Ursache: Du hast ein neues Terminal-Fenster geöffnet, bevor du die WSL-Integration in Docker Desktop aktiviert hast. Lösung: Integration aktivieren (siehe oben) und Terminal neu starten.
Können deine Container keine Pakete laden? In Firmennetzwerken blockieren oft Proxies oder VPNs. Hier findest du den Fix für WSL 2 im Unternehmensnetzwerk.
Der vmmem-Faktor: Speicher im Griff behalten
Docker unter WSL 2 liebt RAM. Im Taskmanager wirst du den Prozess vmmem sehen. Er reserviert Speicher für die Linux-VM und den Cache.
Wenn dein System träge wird, begrenze den RAM in deiner .wslconfig Datei (unter C:\Users\DeinName\.wslconfig):
[wsl2]
memory=8GB(Mehr dazu im kommenden Teil 8).
Zusätzlich solltest du regelmäßig aufräumen:
docker system pruneFazit: Die Analogie zur Einordnung
Stell dir Docker unter WSL 2 wie eine professionelle Großküche (Linux) vor, die direkt an deinen Gastraum (Windows) angebaut wurde. Die Küche arbeitet effizient, laut und mit scharfen Messern. Du sitzt aber bequem im Gastraum, nutzt deine gewohnten Werkzeuge und bekommst das Ergebnis über die Durchreiche (Localhost) serviert.
Du musst den Maschinenraum nicht betreten, um die Power zu nutzen.
Teil der Serie
WSL 2 für Webentwicklung unter Windows
Moderne WSL 2 Webentwicklung unter Windows Pillar
WSL 2 installieren unter Windows 11: Der ultimative Guide für Webentwickler (2026)
WSL 2 Entwicklungsumgebung einrichten: Warum "Standard" nicht gut genug ist
WSL 2 Terminal konfigurieren: Dein Cockpit für moderne Webentwicklung
PHP & Node.js unter WSL 2 – Das Triebwerk für professionelle Workflows 2026
WSL 2 Webserver einrichten: Apache, Nginx & Datenbanken unter Windows
VS Code WSL 2 einrichten: Der Goldstandard für Webentwicklung
Docker unter WSL 2: Der Game-Changer für Webentwickler
WSL 2 Performance-Tuning & Troubleshooting – Wenn der RAM-Hunger kickt
Git unter WSL 2: Performance-Tuning & Best Practices
WSL 2 im Unternehmensnetzwerk: So bändigst du Proxys, VPNs & SSL
WSL 2 vmmem bändigen: Der Performance-Guide für professionelle Entwickler
WSL 2 Speicherplatz freigeben: So zähmst du die VHDX-Datei
WSL 2 Cache-Beschleunigung mit dem Windows 11 „Dev Drive“ (ReFS)
Der digitale Rettungsanker – Professionelle WSL 2 Backup Strategien & Disaster Recovery
Sudo für Windows – Die neue Brücke zwischen den Welten
Framework-Tuning: Next.js 15, Laravel, Symfony & Rust in WSL 2
WSL 2 auf Steroiden: 15 Profi-Tipps, die Entwickler vor dem Wahnsinn retten
WSL 1 vs WSL 2: Der Vergleich – Welches Linux brauchst du?
WSL Explorer Dateizugriff: Der sichere Guide für Linux-Dateien in Windows
Linux GUI Apps auf Windows: Der ultimative WSLg Guide
WSL Befehle Cheatsheet: Dein ultimativer Spickzettel
Häufig gestellte Fragen (FAQ)
Ausblick: Teil 8 – Troubleshooting & Performance Tuning
Jetzt läuft deine Umgebung mit Nginx, PHP oder Laravel. Aber was passiert, wenn der RAM-Hunger doch einmal zu groß wird oder die virtuelle Festplatte deine SSD füllt? Im nächsten und letzten Teil der Serie gehen wir ans Eingemachte: WSL 2 Performance-Tuning. Wir zeigen dir, wie du vmmem bändigst und Speicherplatz zurückgewinnst.
Bleib dran – dein Laptop wird es dir danken.

Dietrich Bojko
Senior Webentwickler
Webinteger arbeitet seit vielen Jahren produktiv mit Linux-basierten Entwicklungsumgebungen unter Windows.
Der Fokus liegt auf performanten Setups mit WSL 2, Docker, PHP, Node.js und modernen Build-Tools in realen Projekten – nicht auf theoretischen Beispielkonfigurationen.
Die Artikel dieser Serie entstehen direkt aus dem täglichen Einsatz in Kunden- und Eigenprojekten und dokumentieren bewusst auch typische Fehler, Engpässe und bewährte Workarounds.


