WSL2 perfect voor software development met Docker

Tot een jaar geleden had ik vier jaar lang geen Windows computer aangeraakt. Ik werkte uitsluitend op mijn Macbook pro en desktop met Ubuntu. Mijn nieuwe werkgever gaf mij een Windows 10 laptop. Snelle machine, maar het besturingssysteem was weer even wennen. Gelukkig is Windows 10 is inmiddels voorzien van Windows Subsystem for Linux 2. Hiermee kan ik mijn vertrouwde Ubuntu toch gebruiken. Hoera!

Waarom wil je WSL2?

Docker containers met een op Linux gebaseerde image draaien met Docker desktop efficiënter met een geïntegreerde Linux installatie. Het is mogelijk om vanuit de Linux terminal hetzelfde Shell script te gebruiken dat je op een Mac of Linux computer zou draaien. Voor het remote beheer van servers vind je googlend doorgaans Linux commando’s in plaats van de Powershell equivalenten. Verder geeft het gebruikers voor wie Linux onbekend terrein is, de mogelijkheid om het te leren kennen op een makkelijk te installeren manier.


WSL2 installeren

Microsoft heeft begin november 2021 de installatieprocedure versimpeld. Zo te lezen wordt direct WSL2 geïnstalleerd en is het niet meer nodig om handmatig te switchen naar versie 2. Met het installatie commando wordt direct ook als default de Ubuntu distro voor je geïnstalleerd. Er is geen reden meer om het niet gewoon te proberen.


Na de installatie van WSL2 moet je Linux gebruiksklaar maken. Na het starten van de distro via het start menu maak je de gebruiker en het wachtwoord aan. Deze gebruiker mag anders heten dat je Windows gebruiker.


WSL2 in je Docker workflow

Windows Terminal

Voor optimaal gebruik van WSL2 installeer je Windows Terminal. Dit is een open source terminal die je kunt downloaden in de Store. Met dit programma kun je diverse command lines (shells) naast elkaar openen in meerdere tabs. Wat ik erg handig vind is dat je in hetzelfde scherm meerdere shells naast elkaar kunt zetten. Windows Terminal geeft je uitgebreide mogelijkheden om het uiterlijk van de shells aan te passen. Achtergronden, kleuren, vorm van de cursor; je kunt helemaal los.


Bestandssystemen

Met de installatie van de Linux distro in WSL, heb je feitelijk twee besturingssystemen naast elkaar op je computer. Beiden hebben een eigen bestandssysteem. Vanuit Linux kun je bij de bestanden in het Windows bestandssysteem en visa versa.


Door in de padbalk van Windows Explorer \\wsl$ te typen krijg je toegang via een netwerkconnectie tot de Linux distributie. Op die manier kun je eenvoudig de bestanden van een project kopiëren vanaf de Windows locatie. Vanuit Linux kom je bij de bestanden op de Windows C-schijf met het pad: /mnt/c/

Helaas is er wel een grote maar. Het geeft niet de snelste performance als je vanuit Linux bestanden bewerkt, die in het Windows bestandssysteem staan en andersom. Microsoft raadt aan om bestanden die je in Linux programma gebruikt, op te slaan in Linux. En bestanden die je Windows programma’s bewerkt, op te slaan in het Windows bestandssysteem. 


Docker Desktop

Veel Docker containers draaien op Linux. Het is efficiënter om Linux containers te draaien op een Linux pc in plaats van Windows. Aangezien je met WSL nu Linux beschikbaar hebt naast Windows, heeft Docker Desktop het mogelijk gemaakt om gebruik te maken van WSL.


De documentatie zegt hierover: “Windows Subsystem for Linux (WSL) 2 allows Linux containers to run natively without emulation. With Docker Desktop running on WSL 2, users can leverage Linux workspaces and avoid having to maintain both Linux and Windows build scripts. In addition, WSL 2 provides improvements to file system sharing and boot time.”


Je activeert het gebruik van WSL2 in Docker Desktop bij de Settings. Onder General vink je de optie “Use the WSL 2 based engine” aan. Vervolgens kun je bij subitem WSL Integration onder Resources kiezen welke Linux distro gebruikt moet worden.


De eerste keer na het instellen van het gebruiken van WSL2 voor Docker werken de Docker commando’s in je Linux distro nog niet. Je moet eenmalig WSL herstarten. Met wsl.exe --shutdown zet je het uit. Daarna start je de distro weer door een terminal te heropenen met Windows Terminal.


Gebruik Docker efficiënt met WSL2

In mijn werk wordt veel gebruik gemaakt van Docker containers. Het runnen van Linux containers in Docker Desktop vanaf het Windows bestandssysteem geeft steeds de waarschuwing dat het niet efficiënt is. Dat is toch zonde. Hoe run je deze containers wel optimaal? Simpel: zet de projectbestanden voor de container in het Linux bestandssysteem.


Als je vanuit Linux de Docker containers opstart, zie je de containers in Docker Desktop voor Windows verschijnen. Het starten van de containers gaat gewoon soepel, en, Docker waarschuwt niet meer over het niet efficiënt werken.