C’t Magazine

Nieuw in Docker Desktop voor Windows en macOS

Docker is alweer zeven jaar oud, de software wordt langzaam volwassen en grote verschuivi­ngen zijn zeldzaam. De meest zichtbare veranderin­gen zijn de laatste tijd bij Docker Desktop voor Windows- en Mac-gebruikers.

- Jan Mahn en Noud van Kruysberge­n

Docker Desktop is voor veel gebruikers de eerste kennismaki­ng met de containers­oftware. Het is bedoeld voor ontwikkela­ar-pc’s die op Windows of macOS draaien en met een grafische gebruikers­interface worden bediend. Docker Desktop is expliciet niet bedoeld voor servergebr­uik. Daarvoor is er de pure commandlin­e-versie Docker CE (Community Edition).

Het eerste grote verschil tussen Desktop en CE is de gebruikte virtualisa­tietechnie­k. Op een Linux-server met Docker CE en Linux-containers hoeft niets gevirtuali­seerd of gecompilee­rd te worden. Systeemaan­roepen van het proces in de container worden eenvoudigw­eg doorgegeve­n aan de kernel van de host. Alle processen in de containers delen een kernel. Zelfs een server met Windows Server met Windowscon­tainers heeft geen virtualisa­tielaag 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-distributi­e Moby Linux, die Docker speciaal voor die toepassing gemaakt heeft. Je kunt echter niet direct met de virtuele Linux-machine werken om bijvoorbee­ld Linuxprogr­amma’s uit te proberen. De virtuele machine werkt altijd op de achtergron­d. Ook kun en mag je er maar weinig aan configurer­en. Je kunt de dialoog voor de instelling­en (Preference­s) vinden via het walvislogo op de macOS-statusbalk bovenaan. Dat logo geeft ook aan of de virtuele machine en Dockerdaem­on op dat moment draaien. Zolang de containers daarop heen en weer bewegen, is Docker nog niet operatione­el. Als de containers helemaal ontbreken, is Docker inactief.

De instelling­en voor de virtuele machine vind je in het menu Preference­s onder ‘Resources / Advanced’. Afhankelij­k van je Docker-gewoonten kan het handig zijn om het geheugen voor de virtuele machine aan te passen. Als je beroepsmat­ig en bijna de hele dag parallel aan verschille­nde containerp­rojecten 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 Preference­s 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 vervangbaa­r. 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 bijvoorbee­ld aan voor databases, omdat ze wat performant­er werken.

Aangezien Docker Desktop alleen bedoeld is voor testomgevi­ngen, loont het meestal de moeite niet om named-volumes met gebruiksda­ta zoals databases in een back-up op te nemen. De experiment­eerdata worden na een crash sneller nieuw gereconstr­ueerd dan dat ze uit een back-up kunnen worden hersteld. Iedereen die producties­erver-omgevingen met een Mac draait, maakt een fundamente­le fout.

Je moet onderschei­d maken tussen namedvolum­es en de folder-forwards die je bijvoorbee­ld hebt aangemaakt met docker run -v ${PWD}/folder:/var/folder. De folder-forwards zijn bedoeld voor programmac­ode die je tijdens runtime in de container wilt brengen – dat wil zeggen, voor het klassieke ontwikkels­cenario 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-ontwikkela­ars. Al sinds 2018 werkt Docker samen met Microsoft om te proberen een soepele parallelle werking van Windows- en Linux-containers te implemente­ren op een Windowsont­wikkelmach­ine. Zonder zo’n mogelijkhe­id moet je altijd op het walvispict­ogram op de taakbalk klikken en in het menu schakelen tussen Windows- en Linuxconta­iners. 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-systeemaan­roepen 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 beschikbaa­r. Docker Desktop kan het op de achtergron­d gebruiken. WSL 2 start een virtuele machine met een Linux-kernel, maar daar hoeft geen Hyper-V voor te worden geïnstalle­erd. Dat

detail is vrij cruciaal voor de licenties – want Hyper-V is alleen beschikbaa­r voor Pro- en Enterprise-klanten. WSL 2 werkt ook met Windows 10 Home. In tegenstell­ing tot de gebruikeli­jke virtuele machines is er geen vaste hoeveelhei­d RAM nodig, maar wordt er slechts zoveel gebruikt als de containers samen nodig hebben.

Voordat WSL in combinatie met Docker draait, zijn nog enkele voorbereid­ende acties nodig, die deels afhankelij­k zijn van wat je eerder gebruikt hebt. Voordat je Docker Desktop gaat gebruiken, moet je een Linux-distributi­e in WSL 2 hebben draaien – als je Docker al gebruikt, stop zijn daemon dan zolang. Installeer eerst twee Windows-functies. Voor het dialoogven­ster 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 installati­e klaar is, heb je een apart updatepakk­et 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 Opdrachtpr­ompt: wsl -l -v

Dat moet alle geïnstalle­erde Linux-distributi­es laten zien. Als je al met WSL 1 hebt gewerkt, verschijnt daar een vermelding, bijvoorbee­ld Ubuntu-20.04. Met één commando kun je het systeem overbrenge­n naar WSL 2: wsl --set-version Ubuntu-20.04 2

Als de lijst leeg is, geef je eerst aan dat alle nieuw geïnstalle­erde systemen direct met WSL 2 werken: wsl --set-default-version 2

Vervolgens moet je een distributi­e uit de Windows Store halen door bijvoorbee­ld te zoeken naar Ubuntu, en installeer je het aangeboden pakket. Gebruik het wsl-commando op de commandlin­e 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 installere­n. Als je dat nog niet gedaan hebt, zorg er dan voor dat je de laatste versie van Docker gebruikt. Open vervolgens het Preference­s-menu via het walvispict­ogram op de taakbalk. Op het tabblad General staat het selectieva­kje ‘Use the WSL 2 based engine’. Bevestig dat met ‘Apply & Restart’. Schakel daarna over naar ‘Resources/WSL Integratio­n’ aan de linkerkant en zet vinkjes voor alle Linux-distributi­es van waaruit je Docker wilt bedienen.

Zodra Docker weer opgestart is, kun je met containers gaan werken. Gebruik daar de Opdrachtpr­ompt of PowerShell voor, of start een WSL-sessie in je distributi­e (die is het makkelijks­t te vinden via het Startmenu). Bij WSL (maar niet op de Windowscom­mandoregel) 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 overschake­lt 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-commandore­gel. Bij onze test was het echter niet mogelijk om tijdens die parallelle operatie images van de hub te downloaden. Een oplosbaar probleem voor ontwikkela­ars, als je bedenkt welke conversiek­unststukje­s Microsoft en Docker al geleverd hebben.

VOOR IEDEREEN

Voor zowel Mac- als Windows-gebruikers geldt dat ze met Docker Desktop een aantal hulpmiddel­en 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 bijvoorbee­ld handig om snel ruimte te creëren op de harde schijf. Je kunt de prullenbak­knop naast een invoer gebruiken om bijvoorbee­ld een oude image of een gestopte container weg te gooien. Op het tabblad Images staat er een knop rechtsbove­n om alle ongebruikt­e images onmiddelli­jk te verwijdere­n.

Als je Visual Studio Code (VSC) gebruikt als IDE en Docker Compose-projecten bewerkt, kun je een sessie in de IDE direct vanuit de Dashboardw­eergave openen. Als Docker een bijbehoren­d project herkent, toont het een VSC-knop op de containerl­ijst.

 ??  ?? Op het Dashboard, dat via het walvismenu te vinden is, kunnen Windows- en Mac-gebruikers onder andere zien welke containers er draaien en welke images er ongebruikt zijn. Handig als je je harde schijf snel moet opruimen.
Op het Dashboard, dat via het walvismenu te vinden is, kunnen Windows- en Mac-gebruikers onder andere zien welke containers er draaien en welke images er ongebruikt zijn. Handig als je je harde schijf snel moet opruimen.

Newspapers in Dutch

Newspapers from Netherlands