Docker Desktop op de Mac verwijderen zonder volumes te verliezen
Docker Desktop is niet één app. Het is een grafische interface, een virtuele machine op de achtergrond, een set
opdrachtregeltools die als koppeling in /usr/local/bin staan, en een schijfkopie die stilletjes groeit
tot tientallen gigabytes. Het naar de prullenmand slepen verwijdert de eerste daarvan en laat
de rest staan.
Het heeft ook het omgekeerde probleem van de meeste verwijderingen: het officiële verwijderprogramma draaien is de destructieve stap, niet het opruimen daarna. Dit is de volgorde die je gegevens bewaart, en hoe je wegwerpresten onderscheidt van wat je terug wilt.
Verwijderen vernietigt je containers, images en volumes
De verwijderdocumentatie van Docker zegt dit duidelijk: Docker Desktop verwijderen vernietigt containers, images, volumes en andere Docker-gegevens die lokaal op de machine staan. Er is geen ongedaan maken en geen tussenstap via de prullenmand.
Het meeste daarvan is opnieuw op te bouwen. Images haal je opnieuw op, containers bouw je opnieuw vanuit een Dockerfile. De uitzondering zijn benoemde volumes: daar bewaart een lokale database zijn gegevens. Een Postgres- of MySQL-container waartegen je maanden hebt ontwikkeld, houdt zijn rijen in een volume, niet in de image, en dat volume wordt met al het andere verwijderd.
Noteer eerst wat er bestaat:
docker volume ls
Als een volume ertoe doet, maak er een back-up van vóór het verwijderen, niet erna. Stop processen die ernaar schrijven voordat je een archief op bestandsniveau maakt. Gebruik voor een database de ondersteunde back-upmethode, of sluit hem eerst netjes af. Een archief van bestanden die nog wijzigen kan inconsistent zijn:
docker run --rm -v <volume>:/from -v "$PWD":/to alpine \
tar czf /to/<volume>.tgz -C /from .
Hetzelfde geldt voor alles wat je hebt gebouwd en nooit hebt gepusht. docker image ls toont wat
lokaal is. Staat het niet in een registry, dan bestaat het alleen op deze Mac.
Als ruimte de reden is, hoef je misschien helemaal niet te verwijderen
Docker bewaart alles in één grote virtuele schijfkopie, en dat bestand is meestal
het grootste wat Docker bezit. Binnen Docker opschonen haalt vaak terug wat je
kwam halen terwijl de tool geïnstalleerd blijft, maar opschonen is niet omkeerbaar.
Begin met docker system df om de verdeling te zien, en lees daarna
Docker op de Mac opruimen zonder gegevens te verliezen, dat
opschonen behandelt en waarom het schijfbestand niet vanzelf krimpt.
Als je Docker definitief wilt verwijderen, ga dan verder.
Gebruik het eigen verwijderprogramma van Docker
Het gedocumenteerde verwijderprogramma van Docker doet meer dan de bundle wissen. Het ontlaadt de achtergrondservices en verwijdert de opdrachtregel-symlinks die een sleepactie in de Finder achterlaat.
Vanuit de app: open Docker Desktop, kies het pictogram Troubleshoot rechtsboven, kies Uninstall en bevestig. Vanuit Terminal:
/Applications/Docker.app/Contents/MacOS/uninstall
Verplaats Docker daarna van Programma's naar de prullenmand.
Docker documenteert een specifieke fout operation not permitted voor de beschermde app-containermap:
in dat geval kan de verwijdering afronden terwijl de map blijft staan. Dat betekent niet
dat elke toestemmingsfout onschuldig is. Controleer het exacte pad en het resultaat van de verwijdering.
Terminal heeft Volledige schijftoegang nodig om die beschermde map te bereiken.
Wat blijft staan, en van wie het is
Nadat het verwijderprogramma heeft gedraaid, blijven sommige mappen over. Docker noemt er twee:
~/Library/Group Containers/group.com.docker
~/.docker
Dit zijn niet dezelfde soort dingen, en dat verschil is het hele punt.
~/.docker is je configuratie. Daar staan contexts, daemon-instellingen en registry-gegevens van docker login. Als je Docker later opnieuw installeert, of overstapt naar
Colima, Rancher Desktop of OrbStack, is dit de map die je misschien wilt houden. Hem verwijderen
betekent opnieuw aanmelden bij elke registry.
~/Library/Containers/com.docker.docker is de containermap van de app. Daar staat de
virtuele machine en de schijfkopie, Docker.raw. Hier zitten de tientallen gigabytes,
en dit is de beschermde map uit het geval operation not permitted hierboven.
~/Library/Group Containers/group.com.docker bevat de instellingen van Docker Desktop, niet de
schijfkopie. Zodra je hebt geaccepteerd dat de containers en volumes weg zijn, zijn deze twee
de delen die het waard zijn om te verwijderen.
Daarbuiten laat Docker het gebruikelijke macOS-spoor achter: caches, logbestanden, voorkeuren en
opgeslagen applicatiestatus onder je Bibliotheek. Die zijn wegwerpbaar. Het punt is niet om
elk bestand met docker in de naam te wissen, maar om te weten welk een cache is en
welk een inloggegeven.
Bevestig dat het echt weg is
Twee controles. Eerst, dat er niets meer draait:
pgrep -fl -i docker
Ten tweede, dat de opdrachtregeltools ontkoppeld zijn:
which docker docker-compose
Beide horen niets terug te geven. Als docker nog steeds wordt gevonden, heb je waarschijnlijk een aparte
Homebrew-kopie van de CLI, en dat is een ander pakket dat het verwijderprogramma van Docker
Desktop met opzet overleeft. brew list | grep docker laat dat zien.
De snellere manier om het allemaal tegelijk te zien
De handmatige route werkt, maar vraagt dat je al weet welke paden bestaan en welk daarvan je gegevens zijn. Dat is het deel dat gidsen meestal overslaan, en het is het deel dat je iets kost als het misgaat.
Mole toont de gerelateerde bestanden die het herkent voordat er iets wordt verwijderd, gegroepeerd zodat je ziet wat een map echt is, met de grootte ernaast. Je controleert de set, vinkt uit wat je wilt houden, en wat je verwijdert gaat naar de prullenmand in plaats van te verdwijnen. Bij Docker is de schijfkopie meestal bijna alle teruggewonnen ruimte, en dat getal zien voordat je bevestigt is het verschil tussen een opschoning en een verrassing.
Wat terugkomt na een herinstallatie
Images kun je opnieuw ophalen als ze nog in een registry staan, en containers kun je opnieuw aanmaken als je hun build- en runtimeconfiguratie hebt bewaard. Alleen-lokale images, wijzigingen binnen een container en gegevens in benoemde volumes komen niet vanzelf terug. Maak een back-up van alles wat je niet kunt reproduceren voordat je verwijdert.
~/.docker bevat clientconfiguratie en contexts, en kan verwijzen naar gegevens die
elders staan, zoals in Sleutelhanger. Maak een back-up van instellingen die je nodig hebt voordat je de map verwijdert. De
map houden garandeert niet dat elke aanmelding overleeft. Hem verwijderen kan meer verliezen dan een aanmeldsessie.
De virtuele schijfkopie wordt leeg opnieuw aangemaakt. Hij groeit weer terwijl je images
opnieuw ophaalt, dus de tientallen gigabytes die een verwijdering teruggeeft zijn vooral tijdelijk als je
opnieuw installeert en normaal gebruik hervat. Dat getal op de lange termijn laag houden is waar
docker system prune voor is, niet een cyclus van verwijderen en opnieuw installeren.
Wat Mole voor deze app toont, en wat het met rust laat, staat in Docker Desktop op de Mac verwijderen.