Nieuw in Docker Desktop voor Windows en macOS
Docker is alweer zeven jaar oud, de software wordt langzaam volwassen en grote verschuivingen zijn zeldzaam. De meest zichtbare veranderingen zijn de laatste tijd bij Docker Desktop voor Windows- en Mac-gebruikers.
Docker Desktop is voor veel gebruikers de eerste kennismaking met de containersoftware. Het is bedoeld voor ontwikkelaar-pc’s die op Windows of macOS draaien en met een grafische gebruikersinterface worden bediend. Docker Desktop is expliciet niet bedoeld voor servergebruik. Daarvoor is er de pure commandline-versie Docker CE (Community Edition).
Het eerste grote verschil tussen Desktop en CE is de gebruikte virtualisatietechniek. Op een Linux-server met Docker CE en Linux-containers hoeft niets gevirtualiseerd of gecompileerd te worden. Systeemaanroepen van het proces in de container worden eenvoudigweg doorgegeven aan de kernel van de host. Alle processen in de containers delen een kernel. Zelfs een server met Windows Server met Windowscontainers heeft geen virtualisatielaag nodig.
OP EEN MAC
Op een Mac met MacOS werkt dat het anders. Dat draait wel met de Unix-achtige Darwin-kernel, maar Darwin is nu eenmaal geen Linux. Daarom wordt samen met de Docker-daemon op een Mac altijd een virtuele machine opgestart met de Linux-distributie Moby Linux, die Docker speciaal voor die toepassing gemaakt heeft. Je kunt echter niet direct met de virtuele Linux-machine werken om bijvoorbeeld Linuxprogramma’s uit te proberen. De virtuele machine werkt altijd op de achtergrond. Ook kun en mag je er maar weinig aan configureren. Je kunt de dialoog voor de instellingen (Preferences) vinden via het walvislogo op de macOS-statusbalk bovenaan. Dat logo geeft ook aan of de virtuele machine en Dockerdaemon op dat moment draaien. Zolang de containers daarop heen en weer bewegen, is Docker nog niet operationeel. Als de containers helemaal ontbreken, is Docker inactief.
De instellingen voor de virtuele machine vind je in het menu Preferences onder ‘Resources / Advanced’. Afhankelijk van je Docker-gewoonten kan het handig zijn om het geheugen voor de virtuele machine aan te passen. Als je beroepsmatig en bijna de hele dag parallel aan verschillende containerprojecten werkt, kun je iets royaler zijn met het bij Apple duur betaalde RAM-geheugen. Als je slechts af en toe met Docker werkt, kun je de daemon en de virtuele machine het beste volledig stoppen wanneer die niet in gebruik zijn – op mobiele Macs verhoogt dat de accuduur enorm.
Een speciale functie die alleen van invloed is op de virtuele machine op macOS is te vinden bij de Preferences onder het menu-item General. De optie ‘Include VM in Time Machine backups’ voegt de virtuele machine toe aan je back-ups. Het grootste deel van wat in de virtuele machine is opgenomen, is echter vervangbaar. Alleen de zogenaamde Named Volumes komen in de back-up terecht, oftewel de volumes die je met docker volume create mijn-data aangemaakt hebt. Docker raadt dergelijke volumes bijvoorbeeld aan voor databases, omdat ze wat performanter werken.
Aangezien Docker Desktop alleen bedoeld is voor testomgevingen, loont het meestal de moeite niet om named-volumes met gebruiksdata zoals databases in een back-up op te nemen. De experimenteerdata worden na een crash sneller nieuw gereconstrueerd dan dat ze uit een back-up kunnen worden hersteld. Iedereen die productieserver-omgevingen met een Mac draait, maakt een fundamentele fout.
Je moet onderscheid maken tussen namedvolumes en de folder-forwards die je bijvoorbeeld hebt aangemaakt met docker run -v ${PWD}/folder:/var/folder. De folder-forwards zijn bedoeld voor programmacode die je tijdens runtime in de container wilt brengen – dat wil zeggen, voor het klassieke ontwikkelscenario waarbij je programma’s in de container ontwikkelt en die direct wilt testen.
OP EEN WINDOWS-PC
Docker for Windows is veruit de grootste bouwplaats voor Docker-ontwikkelaars. Al sinds 2018 werkt Docker samen met Microsoft om te proberen een soepele parallelle werking van Windows- en Linux-containers te implementeren op een Windowsontwikkelmachine. Zonder zo’n mogelijkheid moet je altijd op het walvispictogram op de taakbalk klikken en in het menu schakelen tussen Windows- en Linuxcontainers. Bij Windows 10 versie 1709 verscheen de eerste oplossing voor het parallelle werken onder de naam Linux Containers on Windows (LCOW). Dat is echter nooit verder gekomen dan de bètafase.
Parallel aan de inspanning voor Docker-integratie heeft Microsoft intensief gewerkt aan het Windows-subsysteem voor Linux (WSL). De eerste WSL, die Linux-systeemaanroepen direct kon vertalen naar Windows-functies zonder virtuele machine, was nog niet geschikt voor Docker-integratie. Sinds Windows 10 versie 20H2 in de herfst van 2020 verscheen is de nieuwe WSL 2 algemeen beschikbaar. Docker Desktop kan het op de achtergrond gebruiken. WSL 2 start een virtuele machine met een Linux-kernel, maar daar hoeft geen Hyper-V voor te worden geïnstalleerd. Dat
detail is vrij cruciaal voor de licenties – want Hyper-V is alleen beschikbaar voor Pro- en Enterprise-klanten. WSL 2 werkt ook met Windows 10 Home. In tegenstelling tot de gebruikelijke virtuele machines is er geen vaste hoeveelheid RAM nodig, maar wordt er slechts zoveel gebruikt als de containers samen nodig hebben.
Voordat WSL in combinatie met Docker draait, zijn nog enkele voorbereidende acties nodig, die deels afhankelijk zijn van wat je eerder gebruikt hebt. Voordat je Docker Desktop gaat gebruiken, moet je een Linux-distributie in WSL 2 hebben draaien – als je Docker al gebruikt, stop zijn daemon dan zolang. Installeer eerst twee Windows-functies. Voor het dialoogvenster dat hiervoor nodig is, typ je gewoon ‘onderdeel’ in op de zoekbalk. Markeer in dat venster ‘Windows subsysteem voor Linux’ en ‘Platform voor virtuele machine’ en bevestig dat met OK. De computer zal dan herstarten.
Als de installatie klaar is, heb je een apart updatepakket nodig met de Linux-kernel, dat je als een MSI-bestand kunt downloaden bij Microsoft (zie de link bij dit artikel). Download dat en klik door de wizard. Dan is het pas tijd voor een eerste test van WSL 2 op de Opdrachtprompt: wsl -l -v
Dat moet alle geïnstalleerde Linux-distributies laten zien. Als je al met WSL 1 hebt gewerkt, verschijnt daar een vermelding, bijvoorbeeld Ubuntu-20.04. Met één commando kun je het systeem overbrengen naar WSL 2: wsl --set-version Ubuntu-20.04 2
Als de lijst leeg is, geef je eerst aan dat alle nieuw geïnstalleerde systemen direct met WSL 2 werken: wsl --set-default-version 2
Vervolgens moet je een distributie uit de Windows Store halen door bijvoorbeeld te zoeken naar Ubuntu, en installeer je het aangeboden pakket. Gebruik het wsl-commando op de commandline om WSL 2 in te stellen. Soms komt de wizard niet verder dan één regel tekst – geef hem dan een duwtje in de rug met de Enter-toets als dat gebeurt. Je wordt dan gevraagd om een gebruiker aan te maken.
Daarna kun je eindelijk Docker Desktop installeren. Als je dat nog niet gedaan hebt, zorg er dan voor dat je de laatste versie van Docker gebruikt. Open vervolgens het Preferences-menu via het walvispictogram op de taakbalk. Op het tabblad General staat het selectievakje ‘Use the WSL 2 based engine’. Bevestig dat met ‘Apply & Restart’. Schakel daarna over naar ‘Resources/WSL Integration’ aan de linkerkant en zet vinkjes voor alle Linux-distributies van waaruit je Docker wilt bedienen.
Zodra Docker weer opgestart is, kun je met containers gaan werken. Gebruik daar de Opdrachtprompt of PowerShell voor, of start een WSL-sessie in je distributie (die is het makkelijkst te vinden via het Startmenu). Bij WSL (maar niet op de Windowscommandoregel) gelden dezelfde wetten als op een echte Linux-machine: om toegang te krijgen tot de Docker-socket moet je lid zijn van de groep docker.
Als je niet altijd sudo voor de commando’s wilt zetten, voeg jezelf dan toe aan de groep: sudo usermod -aG docker $USER
Daarna moet je de WSL-sessie eenmalig afsluiten en een nieuwe starten. Met WSL 2 kun je voor het eerst ook een stabiele parallelle werking van Linux- en Windows-containers benutten – maar dan wel met een kleine bug. Als je Docker via het walvismenu overschakelt naar Windows-containers, waarschuwt een melding je dat de Linux-containers dan niet meer te bedienen zijn. Maar dat is niet waar. In plaats daarvan kun je met Linux-containers werken in de WSLsessie en Windows-containers lanceren in een Windows-commandoregel. Bij onze test was het echter niet mogelijk om tijdens die parallelle operatie images van de hub te downloaden. Een oplosbaar probleem voor ontwikkelaars, als je bedenkt welke conversiekunststukjes Microsoft en Docker al geleverd hebben.
VOOR IEDEREEN
Voor zowel Mac- als Windows-gebruikers geldt dat ze met Docker Desktop een aantal hulpmiddelen krijgen. Heel nuttig in het dagelijks leven is het Dashboard, dat je bereikt via het walvismenu. Dat laat in een overzicht zien welke containers, images en volumes op dat moment op de machine draaien. Niet schrikken, maar de weergave doet er soms wat langer over om te laden en beweert dan dat er geen containers draaien.
Die weergave is bijvoorbeeld handig om snel ruimte te creëren op de harde schijf. Je kunt de prullenbakknop naast een invoer gebruiken om bijvoorbeeld een oude image of een gestopte container weg te gooien. Op het tabblad Images staat er een knop rechtsboven om alle ongebruikte images onmiddellijk te verwijderen.
Als je Visual Studio Code (VSC) gebruikt als IDE en Docker Compose-projecten bewerkt, kun je een sessie in de IDE direct vanuit de Dashboardweergave openen. Als Docker een bijbehorend project herkent, toont het een VSC-knop op de containerlijst.