Werk je het liefst onder Linux, maar wil je Windows niet helemaal opgeven? Er zijn genoeg opties om met Windows te werken naast of binnen Linux. Zo kun je een virtuele machine opzetten, maar dat is een flinke klus. In dit artikel bekijken we een alternatief waarbij je Windows in een Docker-container installeert. De installatie gaat volledig automatisch en je kunt met alle denkbare Windows-toepassingen werken. Volgens hetzelfde principe kun je ook macOS installeren!
In dit artikel laten we zien hoe je Windows kunt gebruiken binnen een Linux-omgeving:
- Installeer Docker en Docker Compose
- Creëer een Widows-configuratiebestand voor Docker Compose
- Start de container en zorg voor een goede beveiliging
- Op eenzelfde manier kun je ook macOS of andere losse toepassingen binnen Linux installeren
Andersom kan ook: WSLg: de kracht van Linux in je vertrouwde Windows-omgeving
Code downloaden
In dit artikel worden voorbeelden van diverse commando’s gegeven. Omdat het overtikken van dergelijke opdrachten erg foutgevoelig is, kun je ze beter downloaden en daarna bekijken of kopiëren. Zie het bestand codewindock.txt.
Voor Linux is enorm veel software beschikbaar. Mis je toch net dat ene Windows-programma, dan is dat gelukkig geen probleem. Er zijn genoeg mogelijkheden om die software te blijven gebruiken.
Als eerste kun je een dualboot overwegen, waarmee je Windows en Linux fysiek op één systeem draait. Voor veel mensen is dit echter te complex. Bovendien moet je al bij het opstarten kiezen welk systeem je gaat gebruiken, terwijl dat niet echt nodig is, tenzij je echt maximale prestaties nastreeft. Computers zijn snel genoeg om van alles simultaan naast elkaar te draaien.
Een bekende optie is een compatibiliteitslaag, zoals het opensource Wine of de commerciële variant CrossOver (zie kader ‘Windows-programma’s met Wine en CrossOver’). Een andere optie is virtualisatie, met bijvoorbeeld VirtualBox of QEMU. Je maakt dan een virtuele machine waarin je vervolgens Windows installeert. Dat is wel vrij omslachtig en vraagt best wat voorbereiding.
In dit artikel behandelen we een andere en veel eenvoudigere optie, die gebruikmaakt van Docker. Na het starten van de container geeft elke willekeurige browser toegang tot Windows. Voor betere prestaties kun je daarnaast een RDP-client gebruiken. Bovendien kun je behalve Windows 11 Pro ook andere Windows-versies kiezen, waaronder Windows Server. Tot slot laten we ook nog zien hoe je op vergelijkbare wijze met macOS via Docker kunt werken. Dan ben je echt van alle markten thuis.
Windows-programma’s met Wine en CrossOver
De toepassingen Wine en CrossOver zijn populair voor het draaien van Windows-programma’s en games onder Linux of macOS. Ze bieden een soort compatibiliteitslaag die zorgt dat je Windows-programma direct gebruikt kunnen worden. Er wordt dus geen virtualisatie of emulatie gebruikt. CrossOver is van dit tweetal een stuk gebruiksvriendelijker, omdat het is geoptimaliseerd voor veel populaire applicaties. Bij Wine zijn meer handmatige aanpassingen nodig. Dat is prima, maar vooral als je technisch onderlegd bent en bereid om wat te experimenteren.
Wine zorgt dat je Windows-programma’s onder Linux kunt draaien.
1 Wat gaan we doen?
Er bestaat een gratis en opensource-project waarmee je Windows kunt draaien binnen Docker. Je vindt de projectpagina op GitHub. We laten zien hoe je hiermee binnen zo’n tien minuten Windows kunt installeren en gebruiken. We geven ook wat praktische gebruikstips, bijvoorbeeld voor bestandsdeling en beveiliging.
Standaard wordt Windows 11 Pro geïnstalleerd, maar je kunt ook een andere versie kiezen, zoals Windows 10 Pro of 8.1 Pro. Ook zou je Windows Server 2025 of een oudere versie kunnen kiezen, mocht je daar eens mee willen experimenteren.
In paragraaf 12 t/m 14 gaan we ook met macOS aan de slag. Dit besturingssysteem kun je op vergelijkbare wijze binnen Docker draaien. Dit project heeft zijn eigen GitHub-pagina.
Dankzij dit project kun je Windows eenvoudig uitvoeren binnen Docker.
2 Wat heb je nodig?
Voor het uitvoeren van Windows of macOS binnen een Docker-container heb je Linux nodig met ondersteuning voor Kernel-based Virtual Machine (KVM). De meeste moderne distributies ondersteunen dit, waaronder Ubuntu, Debian, CentOS en Arch Linux. We laten zien hoe je vooraf kunt testen of KVM en virtualisatie op jouw systeem werken. Verder heb je Docker en Docker Compose nodig. Je kunt alles gewoon binnen je huidige Linux-desktopomgeving installeren en gebruiken.
Wij gebruiken Ubuntu Desktop 24.10. Heb je al een Linux-server in je netwerk draaien? Dan kun je daarop eventueel Docker en de containers voor Windows en/of macOS installeren. Dat maakt je nog wat flexibeler. Voor toegang tot Windows heb je een browser nodig of – voor betere prestaties – een client voor het Remote Desktop Protocol (RDP).
Hoewel een groter scherm comfortabeler werkt, kun je zelfs vanaf een smartphone of tablet met je Windows-installatie verbinden! Merk op dat we hier x86-systemen gebruiken. Er bestaat ook een variant voor ARM64-systemen, zoals de Raspberry Pi 5.
Zelfs de Raspberry Pi 5 kun je gebruiken voor het werken met Windows.
3 Installatie Docker met Docker Compose
Voor de installatie van Docker en Docker Compose kun je de handleiding raadplegen van Docker zelf, bijvoorbeeld voor Ubuntu dat we hier als uitgangspunt nemen. Er is ook een snellere installatiemethode. Hiervoor open je eerst een terminalvenster. Vervolgens haal je een speciaal shellscript voor de installatie op:
curl -fsSL https://get.docker.com -o get-docker.sh
Start dit script nu als root-gebruiker of met sudo:
sudo sh get-docker.sh
Hierna zijn Docker en Docker Compose geïnstalleerd. Maar we raden aan om jezelf na de installatie nog toe te voegen aan de groep genaamd docker. Zorg eerst dat de groep bestaat:
sudo groupadd docker
Daarna voeg je jezelf toe aan die groep:
sudo usermod -aG docker $USER
Hierna moet je uitloggen en opnieuw inloggen, of in sommige gevallen Ubuntu herstarten. Vervolgens kun je de onderstaande opdracht geven, als het goed is zonder foutmeldingen. De opdracht laat in een lijst zien welke containers actief zijn. Dat zijn er nu nog geen.
docker ps
Je kunt ook testen of Docker werkt door een testimage op te halen en te starten:
docker run hello-world
Docker Compose maakt standaard deel uit van de installatie van Docker. De aanwezigheid kun je eenvoudig controleren:
docker compose version
Installeer Docker met Docker Compose en test of alles werkt.
4 Controle vooraf
Het systeem waarop je de speciale Docker-containers gaat gebruiken moet KVM en hardware-virtualisatie ondersteunen, zoals Intel VT-x of AMD-V. Dat komt omdat binnen de Docker-container een virtuele machine met Windows wordt opgebouwd, die gebruikmaakt van Qemu én van hardware-virtualisatie via KVM. Dat zal in de regel geen probleem zijn, maar soms moet je deze virtualisatie-opties nog aanzetten in het BIOS. Hoe je dat precies doet verschilt per BIOS. Je kunt voordat je aan de slag gaat relatief eenvoudig controleren of je systeem geschikt is door de onderstaande opdrachten te geven. De tool meldt of KVM beschikbaar is en of jouw systeem kan worden gebruikt voor hardwareversnelling.
sudo apt install cpu-checker
sudo kvm-ok
Via deze tool controleer je eenvoudig de mogelijkheid voor virtualisatie.
Windows
5 Configuratiebestand
We beginnen met de installatie van Windows. Hoewel je de container via de opdrachtregel kunt starten, is het veel praktischer om een configuratiebestand voor Docker Compose te maken. Ook gelet op eventuele aanpassingen in de toekomst. Open hiervoor een terminalvenster, ga naar je thuismap (cd ~), maak een nieuwe map (mkdir windows) en blader naar die map (cd windows). Maak in deze map vervolgens het configuratiebestand met nano docker-compose.yml en geef het de onderstaande inhoud. Hierbij hebben we de standaardconfiguratie van de projectpagina als startpunt genomen, maar wel enkele opties gewijzigd of toegevoegd. De belangrijkste aanpassingen zullen we straks behandelen.
De configuratie voor de container voor Docker Compose.
6 Uitleg configuratie
De container krijgt simpelweg de naam windows en biedt netwerkfunctionaliteit, inclusief ondersteuning voor VPN/tunneling en externe toegang via RDP (Remote Desktop Protocol).
Poort 8006 op de host wordt onder ports gekoppeld aan poort 8006 in de container voor de webinterface. Je kunt het poortnummer op de host (het nummer links) eventueel wijzigen bij een potentieel conflict. Bijvoorbeeld als je op hetzelfde systeem Proxmox VE gebruikt, dat een webinterface aanbiedt via diezelfde poort. Via poort 3389 geven we RDP-toegang via TCP en UDP.
Onder volumes koppelen we een fysieke map (in dit geval ./data) aan /storage in de container waar alle bestanden voor Windows worden bewaard. De host-map wordt automatisch gemaakt als deze nog niet bestaat. Dit volume is belangrijk, omdat Windows anders bij elke herstart van de container opnieuw zal worden geïnstalleerd.
Docker wacht overigens standaard maar tien seconden om een container netjes te stoppen voordat deze geforceerd wordt gestopt. Deze periode is in de configuratie bij stop_grace_period verruimd naar twee minuten, wat lang genoeg is om Windows af te sluiten.
Zorg dat Windows genoeg tijd krijgt om netjes af te sluiten.
7 Aanpassingen
In het configuratiebestand uit paragraaf 5 onder environment kun je nog enkele aanpassingen maken, die we hier bespreken. In de getoonde configuratie zie je bij VERSION de waarde 11. Dat is de keuze voor Windows 11 Pro. Andere populaire opties zijn Windows 10 Pro (10), Windows Server 2025 (2025), Windows Server 2022 (2022) en Windows XP Professional (xp). Merk op dat voor ARM64 andere versienummers worden gebruikt, controleer dat via de projectpagina!
We hebben zoals je in de configuratie kunt zien de parameter LANGUAGE toegevoegd met de waarde Dutch. Daarmee zal de Nederlandstalige versie van Windows worden geïnstalleerd.
Achter DISK_SIZE zie je de hoeveelheid schijfruimte voor Windows. Standaard is dat 64 GB (64G). Je kunt dit eventueel verhogen naar bijvoorbeeld 128 GB (128G) of 256 GB (256G). Dat kan overigens ook nog ná de installatie, zonder verlies van gegevens.
Je kunt verder ook het aantal processorkernen en de hoeveelheid werkgeheugen aanpassen. Standaard worden 2 cores gebruikt en 4 GB werkgeheugen. In het voorbeeld hebben we dit verhoogd naar 4 cores en 6 GB werkgeheugen. Binnen Windows kun je de waarden onder meer via de instellingen achterhalen. De cores zijn overigens niet exclusief voor de virtuele machine, maar worden gedeeld met de host. Meer cores maken het systeem ook niet sneller.
Via de instellingen van Windows kun je informatie over het systeem achterhalen.
8 Container en installatie starten
Als je klaar bent met de configuratie kun je de container starten met de opdracht:
docker compose up -d
Open nu een browser en verwijs deze naar poort 8006. Op hetzelfde systeem als de host is dat http://localhost:8006. Als je vanaf een ander systeem toegang zoekt, is dat http://IPADRES:8006.
Je ziet dat direct na het starten van de container eerst automatisch een iso-bestand wordt opgehaald voor de installatie van Windows. Voor de meeste varianten van Windows is dat bestand ongeveer 5 GB groot. Via je browser zie je de vordering van deze download. Hierna start ook direct het installatieproces dat je kunt volgen.
Je hoeft nergens iets te kiezen, alles wordt volledig geautomatiseerd afgehandeld. De installatie duurt ongeveer tien minuten. Je kunt je gewenste programma’s installeren zonder beperkingen. Als je klaar bent met (het werken in) Windows kun je de container stoppen met:
docker compose down
Een volgende keer staat Windows al binnen enkele seconden klaar na het starten van de container.
Start de container en controleer op eventuele foutmeldingen.
Is het draaien van Windows en macOS legaal?
De projecten die we in dit artikel gebruiken zijn volgens de makers volkomen legaal. De container voor de installatie van Windows bevat uitsluitend opensource-code en verspreidt geen auteursrechtelijk beschermd materiaal. Eventuele productsleutels zijn algemeen en afkomstig van Microsoft, die deze voor testdoeleinden verstrekt.
Voor macOS ligt dat mogelijk iets anders. Ook nu geldt dat het project geen materiaal met copyright verstrekt en het probeert ook geen beveiligingen te omzeilen. Je moet echter bij de installatie van macOS akkoord gaan met de licentie voor eindgebruikers. Die staat alleen een installatie op officiële hardware toe. Daarom zou je de container dus alleen moeten gebruiken op hardware die door Apple is verkocht, anders schend je de voorwaarden.
9 Toegang via RDP-client
Door een RDP-client te gebruiken, zijn veel hogere prestaties mogelijk en profiteer je van een betere beeldkwaliteit en extra features zoals audio. Hier gebruiken we Remmina onder Linux. Je kunt ook andere programma’s gebruiken. In Windows is bijvoorbeeld het programma om te verbinden met een extern bureaublad heel geschikt.
Installeer en open de tool, in dit voorbeeld Remmina. Maak hierin een nieuwe configuratie. Kies bij Protocol voor RDP – Remote Desktop Protocol. Bij Server vul je localhost in, of als verbinding maakt vanaf een ander systeem: het ip-adres. Achter Resolutie kies je bij voorkeur voor Clientresolutie gebruiken. Daarmee wordt de resolutie in Windows steeds aangepast aan de resolutie van je client, in dit geval de venstergrootte van Remmina.
Als gebruikersnaam vul je Docker in en het wachtwoord laat je leeg. Meldingen over certificaatfouten kun je negeren. Net als een eventuele melding dat de identiteit van de externe computer niet kan worden geverifieerd. Je kunt na het starten met je RDP-client overigens omschakelen naar volledig scherm. Dan kun je op het volledige scherm met Windows werken.
Met een RDP-client heb je betere prestaties en een betere beeldkwaliteit.
10 Extra beveiliging
Merk op dat er bij het werken met deze container met Windows een potentieel veiligheidsrisico ontstaat. Iedereen kan immers vanaf het netwerk jouw Windows-omgeving openen via een browser. En ook bij gebruik van een RDP-client is er nauwelijks een beveiliging. Er zijn wat manieren om dat op te lossen, bijvoorbeeld met een firewall of door het instellen van een wachtwoord. Het makkelijkst is om alleen verbindingen naar localhost toe te staan. Dat is het adres 127.0.0.1. In de configuratie voor Docker Compose kun je daarvoor onder ports de volgende aanpassingen maken:
ports:
- 127.0.0.1:8006:8006
- 127.0.0.1:3389:3389/tcp
- 127.0.0.1:3389:3389/udp
Deze aanpassingen kun je doorvoeren met:
docker compose up -d
Daarna kun je alleen nog vanaf het systeem waarop deze Docker-container met Windows draait verbinding maken. Dit geldt bij deze aanpassingen zowel voor het verbinden met een browser als met een RDP-client.
Standaard kun je vanaf elk systeem verbinding maken.
Meer opties voor je Windows-container
De container met Windows blijkt opvallend stabiel, wat natuurlijk te maken heeft met het feit dat er intern gewoon een virtuele machine wordt gemaakt. Je kunt niet alleen programma’s installeren maar ook gewoon updates voor Windows installeren, zoals je dat gewend bent. Er zijn nog wat meer opties voor de container die we hier niet hebben genoemd. Zo kun je al voor de installatie een gebruikersnaam en wachtwoord instellen, zodat niet standaard Docker als gebruiker (zonder wachtwoord) wordt gebruikt.
Je kunt ook een aangepast iso-image gebruiken. Handig als je bijvoorbeeld Tiny wilt proberen (een lichtgewicht Windows-variant). Verder kun je een aangepaste toetsenbordindeling al vooraf instellen. Het is daarnaast ook mogelijk om een schijf of usb-apparaat door te geven.
Je kunt zoals vertrouwd updates voor Windows installeren.
11 Bestanden delen
Je kunt eenvoudig bestanden uitwisselen tussen de host en het Windows-systeem in de container. Hiervoor hoef je alleen de configuratie voor Docker Compose aan te passen. Bedenk welke map op de Linux-host je wilt delen met Windows in de container. In dit voorbeeld kiezen we /home/gertjan waar Ubuntu alle gebruikersbestanden bewaart. Koppel dan onder volumes die lokale map /home/gertjan met de map /data in de container:
volumes:
- /home/gertjan:/data
Start de container met de veranderingen:
docker compose up -d
Blader dan in Windows naar Netwerk. Open host.lan. Hier zie je een overzicht met bestanden en mappen, wat correspondeert met /home/gertjan op de host. Zo kun je eenvoudig in Windows aan al je bestanden werken.
Je kunt bestanden delen tussen de host en de container met Windows.
macOS
12 Installatie macOS
Heb je het gemak ervaren van het werken met Windows binnen Docker, dan is het goed om te weten dat je vrijwel dezelfde procedure kunt volgen voor een installatie van macOS! We gebruiken de onderstaande configuratie. Merk op dat standaard macOS 13 wordt geïnstalleerd, bekend onder de naam macOS Ventura. Deze versie werd uitgebracht in 2022 en zou in deze situatie de beste prestaties geven. Je kunt ook macOS 14 of 15 proberen door het versienummer aan te passen. Voor details kun je de projectpagina op GitHub raadplegen.
Het configuratiebestand voor macOS in Docker Compose.
13 Installatie macOS Ventura
Start de container met:
docker compose up -d
Verwijs een browser naar poort 8006, op het lokale systeem is dat ook hier http://localhost:8006. Nu zal macOS op de achtergrond worden gedownload. Vervolgens verschijnt een menu. Kies Disk Utility en klik op Continue. Nu moet je de grootste schijf uit de getoonde lijst selecteren met de naam Apple Inc. VirtIO Block Media. Deze is standaard ongeveer 68 GB. Klik op Erase. Vul een herkenbare naam in en klik op Erase om de schijf daadwerkelijk te formateren met het APFS-bestandsformaat (Apple File System). Dit is binnen enkele ogenblikken voltooid. Klik op Done. Sluit het venster via het rode kruisje. Kies Reinstall macOS Ventura, klik op Continue en doorloop het installatieproces. Hierbij moet je akkoord gaan met de gebruiksvoorwaarden en de zojuist geformatteerde schijf selecteren.
We installeren macOS Ventura op de geformatteerde schijf.
14 Installatie afronden
Je moet bij de installatie van macOS wel extra veel geduld hebben, zeker als je het vergelijkt met de procedure voor Windows. De installatie vraagt veel tijd, al is het uiteraard een eenmalig proces.
De laatste stap na het kopiëren van alle bestanden is het instellen van je regio en taal. Ook kun je eventueel gegevens migreren of inloggen met je Apple ID. Zulke stappen kun je overslaan, als je niet heel actief in macOS gaat werken.
Als laatste maak je een account om binnen macOS mee te werken. Hierna verschijnt de desktop van macOS en kun je daadwerkelijk aan de slag. Het werkt in een browser relatief traag. Gebruik daarom een programma als RealVNC Viewer voor betere prestaties en een hogere resolutie. Om te verbinden hoef je alleen het ip-adres van het systeem in te voeren of je gebruikt localhost.
Met RealVNC Viewer haal je veel betere prestaties binnen macOS.
Losse containers
15 Overige toepassingen
In dit artikel draaien we een heel besturingssysteem via Docker. Maar er zijn ook losse toepassingen die je op vergelijkbare wijze via een browser kunt gebruiken. Een goed voorbeeld is Calibre, de bekende software voor het beheren van je e-books. In het artikel, Calibre via Docker: boekenplank op je server, kun je nog eens teruglezen hoe je deze toepassing kunt installeren en gebruiken via Docker.
Ook veel andere toepassingen kun je op vergelijkbare wijze via een browser gebruiken. Zo kun je bijvoorbeeld diverse browsers zoals Firefox of Chrome via Docker draaien. Je kunt dan veilig in een geïsoleerde omgeving browsen, los van de browser waarin je de toepassing gebruikt.
Visual Studio Code wordt ook vaak via een browser gebruikt. Dit wordt doorgaans op een server geïnstalleerd, zodat je binnen VSCode ook direct toegang hebt tot bijvoorbeeld configuratiebestanden of de programmacode waar je aan werkt. Een bekend voorbeeld is Home Assistant.
Er is een container voor PuTTY, handig als je incidenteel SSH-toegang nodig hebt. Ook HandBrake, de bekende tool voor het converteren van video’s, kun je via een container draaien. Verder bestaat er een container om via een browser met LibreOffice te werken.
Zulke containers maken de drempel om over te stappen naar bijvoorbeeld Linux wellicht een stuk kleiner. En bij een eventuele herinstallatie van je besturingssysteem hoef je geen rekening met de bewuste toepassing te houden.
Een ander interessant project is Kasm Workspaces. Hiermee kun je uiteenlopende toepassingen kiezen in een vaste downloadstek en draaien via een browser.
Met Kasm Workspaces kun je uiteenlopende toepassingen via je browser gebruiken.