Docker mit WSL auf Windows einrichten

Insbesondere bei der Einrichtung lokaler Entwicklungsumgebungen in der Linux-basierten Web-Welt eignet sich Docker hervorragend zur Entwicklung. Wer seine apache oder nginx-basierten Container baut oder vorkonfigurierte Varianten nutzt, wird schnell feststellen, dass diese nicht allzu performant laufen. Zumindest bei der einfachen Nutzung von Docker-Desktop unter Windows ohne WSL Integration. Da kann ein Seitenaufruf schon mal mehrere Minuten dauern, zumindest bei entsprechendem applikationsseitigem Workload.

Installation von WSL – Windows-Subsystem für Linux

Abhilfe schafft hier WSL, das Windows-Subsystem für Linux (siehe https://de.wikipedia.org/wiki/Windows-Subsystem_f%C3%BCr_Linux). Dieses steht seit Windows 10 (Version 1903) in der Version WSL 2 zur Verfügung. Im Grunde stellt Windows hiermit eine Kompatibilitätsschicht zur Verfügung, mit deren Hilfe Linux-Executables ausgeführt werden können. So lässt sich eine Linux-Distribution wie Ubuntu mehr oder weniger nativ in Windows ausführen. Mehr Details zu den technischen Hintergründen von WSL kann man im o.g. Wikipedia-Artikel oder direkt bei Microsoft unter folgendem Link erfahren: https://docs.microsoft.com/de-de/windows/wsl/about

Docker und WSL unter Windows

Docker wiederum unterstützt die WSL2-Integration von Windows, sprich die Docker-Container inklusive möglicher Mounts oder Volumes kann innerhalb der Linux-Distribution abgelegt werden, die wiederum nativ als Windows-App laufen wird.

Unser Vorgehen sieht also so aus:

  1. Aktivierung der WSL Komponenten unter Windows
  2. Installation einer alternativen Linux-Distribution unter Windows (optional)
  3. Installation von Docker-Desktop und Aktivierung von WSL2
  4. Ausführen eines Containers mit deutlich gestiegener Geschwindigkeit
  5. Fertig

Das Ganze ist fairly easy. Linux-Kenntnisse sind nicht wirklich erforderlich, der ganze Vorgang dauert im Grunde auch nur ein paar Minuten, allerdings nimmt das Herunterladen und Installieren der Software je nach Internetleitung und Rechnerleistung zusätzlich Zeit in Anspruch.

Achtung: Der Vorgang erfordert den zwischenzeitlichen Neustart des Rechners, man sollte also entsprechend darauf eingestellt sein!

Aktivierung der WSL Komponenten unter Windows

Der einfachste Weg hierfür führt über die Power-Shell, die aber in jedem Fall mit Administrator-Rechten ausgeführt werden muss. Dafür einfach die Windows-Taste drücken, dann „Powershell“ eintippen und mit der rechten Maustaste auf das PowerShell Symbol im Menu klicken und „Als Administrator ausführen“ auswählen.

Anschließend wird in der PowerShell folgender Befehl ausgeführt:

wsl –-install

Nach erfolgreicher Installation sieht das Ganze so aus:

Der Installationsvorgang von WSL meldet ja schon, dass ein Neustart erforderlich ist. Dieser müsste dann jetzt einmal durchgeführt werden. Nach dem Neustart startet Ubuntu in einer Konsole automatisch und setzt den Installationsprozess fort. Nach ggf. ein paar Minuten Wartezeit sollen Benutzername und Passwort vergeben werden. Das Passwort ist wichtig, um später ggf. Software innerhalb der Disitribution nachzuinstallieren. Daher nicht einfach irgendwas vergeben (das habe ich nun schon ein paar Mal im Netz gelesen). Passwort als im Idealfall via Password Manager generieren und speichern 😉

Nach der Installation müssen Benutzername und Passwort festgelegt werden.

Installation einer alternativen Linux-Distribution unter Windows

Stand heute (Juli 2022) steht bei der Installation von WSL via PowerShell nur Ubuntu 20.04 zur Verfügung. Diese Distribution wird auch standardmäßig mitinstalliert. Man hat zwar die Möglichkeit andere Distributionen zu installieren (Kommando „wsl -l -o“ listet die verfügbaren auf), allerdings ist Ubuntu 22.04 LTS aktuell keine davon.

Da ich gerne auf aktuellere Paketquellen zugreifen möchte (unter anderem um bsw. > php-8.X zu installieren), werde ich Ubuntu 22.04 als meine Standard-Distribution nachinstallieren. Dieser Vorgang ist allerdings optional. Wer mit Ubuntu 20.04 zurecht kommt, kann direkt zum nächsten Schritt weiter (Installation von Docker-Desktop und Aktivierung von WSL2)

Installation von Ubuntu 22.04 via Microsoft App Store

Die Installation ist relativ simpel, sie kann direkt via App Store erfolgen. Einfach nach Ubuntu suchen und die passende Version finden, anschließend auswählen und via „Herunterladen“ installieren.

Linux-Distribution initial öffnen

Nachdem die Linux-Distribution heruntergeladen wurde, erscheint im App-Store der Button „Öffnen“ – alternativ ist Ubuntu 22.04 jetzt natürlich auch über das Startmenu wie jede andere App zu öffnen. Wichtig beim ersten Öffnen ist allerdings, dass die Einrichtung stattfindet – in der unter anderem Benutzername und Passwort festgelegt werden. Bei den anderen Optionen können einfach die Standardeinstellungen übernommen werden.

Nach der Installation lässt sich Ubuntu öffnen.

Nach dem Öffnen findet erst einmal die Einrichtung statt, das kann auch schon mal ein paar Minuten dauern. Die Konfiguration und Vergabe von Benutzername und Passwort erfolgen danach geführt. Als Sprache habe ich „Deutsch“ ausgewählt, ansonsten die Standardeinstellungen übernommen.

Neue Linux-Distribution Ubuntu 22.04 als Standard WSL-Distribution konfigurieren

Nach der Installation kann überprüft werden, ob die Installation erfolgreich war. Dazu wird wieder in einer Powershell der Befehl

wsl -l -v

eingegeben. Dieser listet die installierten Linux-Distributionen auf:

Das Sternchen zeigt an, welche Distribution die Standardversion ist. „VERSION“ steht in diesem Fall für die WSL Version – in diesem Fall die Version 2, was genau der entspricht, die wir brauchen. Ich setze jetzt Ubuntu 22.04 als Standard-Distribution mit dem folgenden Befehl:

wsl –-set-default Ubuntu-22.04

Die Ausgabe ist leise, d.h. es erfolgt keine Meldung:

Wir verifizieren im Anschluss mit dem vorherigen Befehl, um zu überprüfen ob der Vorgang erfolgreich war:

wsl -l -v

Nicht mehr benötigte WSL Distribution deinstallieren

Damit ich nur noch auf die Ubuntu Version 22.04 zugreife und nicht versehentlich in der 20.04 lande, deinstalliere ich schlussendlich noch die 20.04er Version mit dem folgenden Kommando:

wsl –-unregister Ubuntu

Danach sieht das Ganze bei mir so aus:

Dieser Schritt ist allerdings nicht zwingend erforderlich, es ist überhaupt kein Problem, dass beide Distributionen parallel installiert sind (oder noch viele weitere).

Installation von Docker-Desktop und Aktivierung von WSL2

Jetzt wird einfach Docker für Windows installiert – dazu einfach auf https://www.docker.com/get-started/ runterladen und installieren. Bei der Installation ist „Use WSL 2 instead of Hyper-V (recommendend)“ schon vorausgewählt und sollte keinesfalls abgewählt werden.

Nach erfolgreicher Installation wird man aufgefordert, sich aus- und wieder einzuloggen. Ausgelogged wird man von Docker nach Betätigung des Buttons automatisch. Sobald man sich wieder einlogged, sollte Docker Desktop automatisch starten. Das Service Agreement muss noch akzeptiert werden.

WSL-Integration in Docker Desktop aktivieren

Nachdem Docker Desktop erfolgreich gestartet wurde, muss die WSL Integration für die Linux-Distribution noch aktiviert werden. Dazu via Zahnrad in die Einstellungen und unter General erst einmal sicherstellen, dass „Use the WSL 2 based engine“ aktiviert ist:

Danach unter „Resources > WSL Integration“ sicherstellen, dass diese für alle erforderlichen Distros aktiviert ist:

Ausführen eines Containers mit deutlich gestiegener Geschwindigkeit

So – fertig. Nun können Docker Container via WSL 2 benutzt werden. Wichtig dabei ist, dass die Installation und vor Allem das Mounten von Dateien oder Containern innerhalb der Linux-Distribution stattfinden sollten.

Das ist so wie so viel praktischer, weil die Handhabung, Installation usw. innerhalb einer nativen Linux-Umgebung (zumindest IMHO) viel einfacher ist und relevante Entwicklungswerkzeuge (wie bsw. composer) viel einfacher installiert und operiert werden können.

Zum Ausführen eines Containers öffne ich also zunächst die Ubuntu App (bsw. via Startmenu) und navigiere in einen geeigneten Ordner. Gestartet wird die Linux-Distribution immer im Home-Verzeichnis des Users, also in meinem Fall /home/simon/.

Ich lege dazu neue Verzeichnisse an und navigiere hinein:

mkdir projects
cd projects
mkdir demo
cd demo

Anschließend starte / installiere ich meine Container wie gewohnt, bsw. so:

docker run –name nginx-demo -p  8080:80 nginx

Docker muss nicht installiert warden, es steht ja durch die WSL Integration innerhalb der Linux-Distribution schon zur Verfügung. Docker lädt den Container automatisch runter und startet ihn:

Et voila – das hat funktioniert. Ich kann nun auf den Container via http mit meinem Windows-Browser zugreifen:

Das Ganze jetzt mit einer deutlich erhöhten Geschwindigkeit. Den Status meiner Docker Container und alles weitere kann ich wie gewohnt weiter über Docker Desktop sehen/machen:

Fertig

Als Nächstes stehen wir natürlich vor der Hürde, dass i.d.R. Verzeichnisse in die Container eingehangen werden müssen und an den Dateien gearbeitet werden muss. Git Operationen und alles andere kann ja einfach via Linux-Kommdandozeile durchgeführt werden. Für eine IDE klappt das so einfach natürlich nicht. Es gibt die unterschiedlichsten Wege das zu bewerkstelligen, der aus meiner Sicht einfachste und komfortabelste wäre eine IDE, die WSL unterstützt. Ich nutze dazu Visual Studio Code, welches eine eigene WSL Extension hat, mit der problemlos auf die Dateien innerhalb der Linux-Distro zugegriffen werden kann. Dazu einfach die WSL Extension in VS Code installieren und fertig 😉


Posted

in

by

Tags:

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *