Windows-inside-Docker: insane maar oh zo handig

De nieuwste aflevering van de Tweakers Podcast #385 zette me weer eens aan het denken. Er vielen opmerkingen die bij mij, als fervent Arch Linux gebruiker, toch een beetje begon te jeuken: "Je kunt niet alles op Linux doen." Ik moest glimlachen, want in mijn dagelijkse praktijk bewijs ik keer op keer het tegendeel. Voor bijna 99% van mijn digitale leven, van simpel browsen en media consumeren tot complexe development taken en systeembeheer, zijn Arch Linux en de Gnome Desktop mijn rots in de branding. Het biedt me de controle, de snelheid en de flexibiliteit die ik nergens anders vind.

Toch moet ik toegeven, er is die ene procent. Die zeldzame keren dat ik stuit op software die hardnekkig weigert te draaien buiten de Windows-omgeving. Denk aan specifieke legacy applicaties, of tools waar echt geen volwaardig Linux-alternatief voor bestaat. Het is frustrerend, maar een realiteit. De gedachte aan een dual-boot installatie, waarbij ik mijn machine moet rebooten telkens als ik die ene applicatie nodig heb, staat me compleet tegen. Ik wilde een oplossing die net zo naadloos was als de rest van mijn setup.

En toen schoot me iets te binnen! Ooit had mijn oud-collega Gijs me iets leuks laten zien: Windows draaien binnen Docker. Destijds leek het me onzinnig. Maar nu was het precies de oplossing die ik zocht. Het idee om een volledig geïsoleerde Windows-omgeving op te starten en af te sluiten wanneer ik die nodig had, zonder mijn host OS te vervuilen of een hele VM-suite te moeten installeren, klonk als muziek in mijn oren.

Mijn zoektocht leidde me naar het project Windows-inside-Docker. Dit bleek de perfecte basis. Het mooie is dat je met docker-compose een complete omgeving kunt definiëren en met één commando kunt starten. Daarna kan je Windows via de browser gebruiken. Tip voor degene die een stevige thuis-server hebben. Zet daar deze container neer en je kan op elke apparaat met een browser Windows gebruiken. Dit is hoe mijn compose.yaml voor zo'n setup eruit ziet:

services:
  windows:
    image: dockurr/windows
    container_name: windows
    devices:
      - /dev/kvm
      - /dev/net/tun
      - /dev/bus/usb
      - /dev/dri:/dev/dri
      - /dev/snd:/dev/snd
    cap_add:
      - NET_ADMIN
    ports:
      - 8610:8006
      - 3389:3389/tcp
      - 3389:3389/udp
    volumes:
      - ./windows:/storage
    restart: no
    stop_grace_period: 2m
    environment:
      ARGUMENTS: "-device usb-host,vendorid=0x046d,productid=0x085c"
      Version: "11l"
      RAM_SIZE: "8G"
      CPU_CORES: "5"
    privileged: true
    deploy:
       resources:
        reservations:
          devices:
            - driver: nvidia
              device_ids: ['0']
              capabilities: [gpu]

En hoe werkt het in de praktijk? Verrassend goed! Voor taken zoals het testen van websites in een specifieke Windows-browser of gewoon rustig wat rondklikken, is het perfect. De prestaties zijn 'oke', zeker gezien het feit dat het een volledige OS binnen een container draait. Het is lichtgewicht genoeg om snel op te starten en te gebruiken voor die korte, noodzakelijke sessies. Maar om eerlijk te zijn: gamen zou ik er absoluut niet op doen. De latente vertraging en de beperkte toegang tot grafische hardware maken dat een hopeloze zaak.

Dus, als reactie op de Tweakers Podcast #385: ja, er zijn altijd uitzonderingen, maar met de kracht van Linux en de flexibiliteit van tools zoals Docker, kun je die uitzonderingen elegant en efficiënt opvangen. Het bewijst voor mij eens te meer dat met een beetje creativiteit en de juiste tools, Linux echt voor bijna alles de basis kan zijn.