Als je dagelijks met Docker werkt, weet je hoe snel het schijfruimte kan innemen.
Na verloop van tijd hoopt je systeem ongebruikte afbeeldingen, containers, volumes en netwerken op. Deze blijven grotendeels ongebruikt en nemen waardevolle opslagruimte in beslag, en kunnen je mogelijk belemmeren bij het werken aan je huidige project. Gelukkig biedt Docker ingebouwde opruimopdrachten die onnodige bronnen eenvoudig verwijderen.
Deze opruimopdrachten maken deel uit van de docker prune
-familie en vandaag leer je er alles over. Ze zullen al snel je favoriete oplossing worden om schijfruimte vrij te maken.
Laten we beginnen met een beknopt overzicht voordat we ons verdiepen in praktische voorbeelden.
Ben je nieuw met Docker? Bekijk onze gids over het leren van Docker vanaf nul voor data professionals om snel op de hoogte te zijn.
Wat is Docker Prune?
De term “Docker Prune” verwijst meestal naar een reeks commando’s die zijn ontworpen om je te helpen ongebruikte en onnodige Docker-resources te verwijderen.
Na verloop van tijd, vooral als je aan meerdere projecten werkt, zul je talloze images maken, containers uitvoeren en volumes en netwerken opzetten. Dit alles hoopt zich op in je systeem en neemt een aanzienlijke hoeveelheid schijfruimte in beslag. Het doel van docker prune
is om die rommel op te ruimen en opslagruimte terug te winnen.
Dat gezegd hebbende, er is meer aan docker prune
dan je op het eerste gezicht zou denken.
Het is niet zomaar een enkele opdracht die je kunt uitvoeren. Nou ja, dat zou kunnen, maar soms heb je fijnmazige controle over wat er wordt verwijderd. Daar komt dit artikel om de hoek kijken. Het zal je laten zien hoe je het opruimen effectief kunt beheren, ervoor zorgen dat je alleen verwijdert wat je van plan bent, en hoe je kunt oefenen in een veilige omgeving om te voorkomen dat je per ongeluk belangrijke gegevens verwijdert.
Het is ook vermeldenswaard dat snoeiopdrachten alleen bronnen verwijderen die niet actief in gebruik zijn. Afbeeldingen, volumes en netwerken die worden gebruikt door actieve containers zullen niet worden verwijderd. Met andere woorden, snoeien zal niet interfereren met actieve werkbelastingen.
In het volgende gedeelte zullen we u door de verschillende soorten snoeiopdrachten leiden en uitleggen hoe ze passen in uw workflow.
Wilt u Docker toevoegen aan uw CV of portfolio? Deze 10 Docker projectideeën maken u klaar voor werk.
Alle Docker-snoeiopdrachten met praktijkvoorbeelden
Docker biedt meerdere prune
opdrachten waarmee je ongebruikte resources individueel of allemaal tegelijk kunt opruimen. In dit gedeelte leer je er meer over—zowel door middel van theorie als praktische voorbeelden.
docker system prune
Dit is de meest uitgebreide opdracht om schijfruimte terug te winnen. Het verwijdert alle ongebruikte containers, netwerken, images en build cache in één operatie.
Als je op zoek bent naar een snelle manier om schijfruimte vrij te maken met één enkel commando, dan is dit degene om te gebruiken.
Je kunt opties doorgeven aan het docker system prune
commando:
-a
of--all
verwijdert alle ongebruikte images in plaats van alleen hangende images (images die niet zijn getagd of waarnaar niet wordt verwezen door een container).--filter
stelt je in staat filterwaarden te specificeren.-f
of--force
slaat de bevestigingsprompt over.--volumes
verwijdert ook anonieme volumes samen met containers, netwerken, images en build cache.
Standaard vraagt docker system prune
om bevestiging omdat het een potentieel destructieve operatie is:
Afbeelding 1 – Bevestigingsprompt voor Docker systeemopruiming
Om de prompt te omzeilen en alle ongebruikte images, containers, netwerken en volumes met één enkel commando te verwijderen, voer uit:
docker system prune -a -f --volumes
Afbeelding 2 – Verwijder alles met een enkele docker systeem opruimopdracht
Maar wat als je meer gedetailleerde controle nodig hebt? Laten we dat nu bespreken.
docker container prune
Met deze opdracht worden alle gestopte containers verwijderd.
Gestopte containers blijven op uw systeem staan totdat ze handmatig worden verwijderd. Ze kunnen schijfruimte in beslag nemen en moeilijk te herkennen zijn, tenzij u een tool zoals Docker Desktop Dashboard gebruikt.
Net als docker system prune
ondersteunt dit commando opties:
--filter
stelt u in staat om key-value paren te specificeren om te bepalen welke containers worden verwijderd.-f
of--force
slaat de bevestigingsprompt over.
Dit is een lijst van niet draaiende containers:
Afbeelding 3 – Lijst van niet draaiende containers
Om code-server
(en elke andere gestopte container) te verwijderen, voer het volgende commando uit:
docker container prune -f
Dit zal niet om bevestiging vragen, en binnen enkele seconden zie je een uitvoer zoals deze:
Afbeelding 4 – Uitvoerbericht container opruimen
En zo, zijn er geen gestopte containers meer:
Afbeelding 5 – Lijst van niet draaiende containers (2)
Latn we nu zorgen voor ongebruikte afbeeldingen.
docker image prune
Vergelijkbaar met het vorige commando, verwijdert docker image prune
ongebruikte afbeeldingen.
Standaard verwijdert het alleen hangende afbeeldingen – afbeeldingen die niet getagd zijn en niet geassocieerd zijn met een container. U kunt een optionele vlag gebruiken om alle ongebruikte afbeeldingen te verwijderen, niet alleen de hangende.
Hier is een lijst van beschikbare opties
-a
of--all
verwijdert alle ongebruikte afbeeldingen in plaats van alleen hangende.--filter
laat je key-value paren specificeren om te bepalen welke afbeeldingen verwijderd moeten worden.-f
of--force
slaat de bevestigingsprompt over.
Nu gaan we het in actie zien!
Hier is een lijst van afbeeldingen die momenteel op het systeem staan:
Afbeelding 6 – Lijst van Docker-afbeeldingen
Om ze allemaal met één commando te verwijderen, voer uit:
docker image prune -a -f
Je ziet een uitvoer als deze in de terminal:
Afbeelding 7 – Uitvoerbericht van afbeeldingsopschoning
Daarna blijven er geen afbeeldingen meer over in Docker Desktop:
Afbeelding 8 – Lijst van Docker-afbeeldingen (2)
Vervolgens gaan we ongebruikte volumes aanpakken.
docker volume prune
Zoals de naam al aangeeft, verwijdert het docker volume prune
commando alle ongebruikte lokale volumes. Met andere woorden, het verwijdert volumes die niet worden gebruikt door een container.
Standaard verwijdert de opdracht alleen anonieme volumes – naamloze volumes die door Docker worden aangemaakt wanneer een container start. Om expliciet benoemde volumes te verwijderen, moet je een extra optie doorgeven.
Dit zijn de beschikbare opties die je hebt:
-a
of--all
verwijdert alle ongebruikte volumes in plaats van alleen anonieme.--filter
stelt je in staat om sleutel-waarde paren te specificeren om te bepalen welke volumes worden verwijderd.-f
of--force
slaat de bevestigingsprompt over.
Op ons systeem hebben we een door de gebruiker gecreëerde volume vanuit een docker-compose.yml
bestand:
Afbeelding 9 – Lijst van Docker-volumes
De volgende opdracht verwijdert alle lokale volumes:
docker volume prune -a -f
Na het uitvoeren ervan, zie je een uitvoer die hierop lijkt:
Afbeelding 10 – Uitvoerbericht van volumeverzorging
Er blijven nu geen volumes meer over:
Afbeelding 11 – Lijst van Docker-volumes (2)
Laten we tot slot kijken hoe ongebruikte netwerken kunnen worden verwijderd.
docker network prune
Wanneer Docker-containers met elkaar communiceren, gebruiken ze vaak door de gebruiker gedefinieerde netwerken. Deze netwerken blijven echter meestal op uw systeem achter nadat die containers zijn verwijderd.
De opdracht docker network prune
verwijdert netwerken die niet langer in gebruik zijn door een container.
Net als de andere prune-opdrachten, bevat deze een paar opties:
--filter
stelt je in staat om sleutel-waardeparen op te geven om te bepalen welke netwerken worden verwijderd.-f
of--force
slaat de bevestigingsprompt over.
In tegenstelling tot afbeeldingen, containers of volumes, kun je netwerken niet visueel inspecteren via Docker Desktop, dus je zult vanaf de opdrachtregel moeten werken. Hier is een lijst van beschikbare netwerken:
Afbeelding 12 – Lijst van Docker-netwerken
Om alle netwerken te verwijderen die niet zijn gekoppeld aan de standaard Docker-installatie, voer je het volgende commando uit:
docker network prune -a -f
Na het uitvoeren van het commando zie je een uitvoer zoals deze:
Afbeelding 13 – Uitvoerbericht van netwerk opschoning
Alle netwerken die gekoppeld waren aan eerder uitgevoerde containers zijn nu verdwenen:
Afbeelding 14 – Lijst van Docker-netwerken
Let wel op dat de drie resterende netwerken essentieel zijn voor Docker om goed te functioneren en niet kunnen worden verwijderd.
En dat is het voor het basisgebruik van de docker prune
commando’s! Hierna zullen we geavanceerde onderwerpen behandelen, zoals het veilig gebruiken van deze commando’s en de beste werkwijzen voor productie- en gevoelige omgevingen.
Het veilig gebruiken van Docker Prune
De docker prune
commando’s helpen snel schijfruimte terug te winnen, maar ze moeten met voorzichtigheid worden gebruikt, vooral in productieomgevingen.
Het per ongeluk verwijderen van belangrijke containers, afbeeldingen of volumes kan leiden tot gegevensverlies en verstoring van kritieke werkstromen. Om dit te voorkomen, is het het beste om te begrijpen wat er zal worden verwijderd voordat u een opruimopdracht uitvoert.
In dit gedeelte worden belangrijke voorzorgsmaatregelen uitgelegd die moeten worden genomen bij het veilig uitvoeren van docker prune
.
Begrijpen wat er zal worden verwijderd
De prune
-opdrachten zijn ontworpen om alleen bronnen te verwijderen die niet actief in gebruik zijn.
Bijvoorbeeld, docker image prune
verwijdert alleen loshangende afbeeldingen, en docker volume prune
verwijdert alleen volumes die niet zijn gekoppeld aan een container. Het toevoegen van opties zoals -a -f
zal echter alle afbeeldingen of volumes verwijderen zonder om bevestiging te vragen. alle afbeeldingen of volumes zonder om bevestiging te vragen.
Bovendien kunnen in complexe omgevingen afhankelijkheden gemakkelijk over het hoofd worden gezien, dus is het altijd een goede gewoonte om dubbel te controleren voordat u gaat opruimen.
Voordat je een prune
commando uitvoert, moet jeje systeem inspecteren om te zien welke resources momenteel in gebruik zijn. Er zijn verschillende manieren om dit te doen, en we zullen de meest voorkomende in deze sectie verkennen.
Gebruik dit commando omalle containers te bekijken, inclusief gestopte:
docker ps -a
Je zou een uitvoer moeten zien die hierop lijkt:
Afbeelding 15 – Lijst van alle Docker containers
Gebruik op dezelfde manier deze opdracht om alle afbeeldingen op te lijsten, inclusief ongebruikte:
docker images
De output zal vergelijkbaar gestructureerd zijn als hierboven:
Afbeelding 16 – Lijst van alle Docker afbeeldingen
Om volumes te controleren, voer deze opdracht uit omalle volumes op te lijsten:
docker volume ls
Afbeelding 17 – Lijst van alle Docker-volumes
Controleer deze uitvoer zorgvuldig om ervoor te zorgen dat er geen kritieke resources per ongeluk worden verwijderd.
Droogdraai voor veiligheid
Helaas heeft Docker nog steeds geen ingebouwde optie voor een droogdraai van het opruimcommando, hoewel dit jaren geleden is aangevraagd.
Daarom moet je resources handmatig inspecteren met behulp van de commando’s die in de vorige sectie zijn vermeld voordat je een prune-commando uitvoert.
Als je werkt in een gevoelige omgeving waar gegevenspersistentie cruciaal is, moet je altijd een back-up maken voordat je prune-commando’s uitvoert die van invloed zijn op volumes.
Natuurlijk zijn dit slechts voorzorgsmaatregelen, maar we hopen dat er binnenkort een droogloopoptie wordt geïmplementeerd.
Beste praktijken voor Docker Prune
Om uw Docker-omgeving vrij te houden van onnodige rommel, is het belangrijk om regelmatig prune
-opdrachten uit te voeren, misschien zelfs te automatiseren.
In dit gedeelte worden de beste werkwijzen voor het uitvoeren van docker prune
-opdrachten in productieomgevingen toegelicht.
Gebruik docker prune regelmatig
In de loop van de tijd verzamelt Docker ongebruikte images, gestopte containers en onnodige volumes – die allemaal aanzienlijke schijfruimte in beslag nemen.
Het regelmatig uitvoeren van opruimopdrachten houdt uw omgeving schoon en voorkomt overmatig gebruik van schijfruimte. U moet ze opnemen als onderdeel van uwonderhoudsschema.
Elke paar weken is een goed startpunt, maar als uw setup vaak het aanmaken en verwijderen van containers omvat, overweeg dan een frequenter schema.
Wees voorzichtig in productie
Elk werk in een productieomgeving vereist extra voorzichtigheid, en Docker opruimen vormt daarop geen uitzondering.
Een moment van onoplettendheid kan leiden tot downtime of gegevensverlies, en dat wil je niet op je geweten hebben. Voordat je docker prune
commando’s uitvoert in een productieomgeving, inspecteer altijd systeembronnen met behulp van docker ps -a
, docker images
en docker volume ls
, zoals uitgelegd in de vorige sectie.
Bovendien is het een goed idee om specifieke opruimcommando’s te gebruiken in plaats van het allesomvattende docker system prune
, aangezien het gemakkelijker kan zijn om te herstellen van onbedoelde verwijderingen.
Automatiseer docker prune
Nog een goede praktijk is het stroomlijnen van opruimingsinspanningen door het automatiseren van docker prune
commando’s met behulp van geplande taken.
Op Linux kun je een cron job instellen om commando’s op regelmatige tijdstippen uit te voeren, terwijl je op Windows Task Scheduler kunt gebruiken voor vergelijkbare automatisering. Dit helpt bij het onderhouden van een opgeruimd systeem zonder dat handmatig ingrijpen nodig is. Zorg er echter in een productieomgeving voor dat geautomatiseerd opruimen niet interfereert met kritieke workloads.
Bijvoorbeeld, deze cron job op Linux voert elke zondag om middernacht een allesomvattend opruimcommando uit:
0 0 * * 0 docker system prune -a -f
Problemen oplossen met Docker Prune
De docker prune
commando’s zijn een standaardoplossing voor het terugwinnen van schijfruimte, maar ze zijn misschien niet altijd voldoende om ervoor te zorgen dat er voldoende ruimte beschikbaar is voor het ophalen van nieuwe images of het uitvoeren van nieuwe containers.
Bovendien kunt u per ongeluk belangrijke bronnen verwijderen, dus het is cruciaal om herstelstrategieën te bespreken.
Beide onderwerpen zullen in dit gedeelte worden behandeld.
Problemen met schijfruimte tegenkomen
Docker images kunnen groot zijn – we hadden er onlangs een van meer dan 13GB – en we weten zeker dat er nog grotere zijn. Dus, zelfs nadat u docker prune
heeft uitgevoerd, kunt u merken dat uw systeem nog steeds weinig schijfruimte heeft.
Om precies te zien hoeveel ruimte wordt gebruikt door afbeeldingen, containers en volumes, voer dit commando uit:
docker system df
Afbeelding 18 – Ruimte gebruikt door Docker
Bij het terugwinnen van schijfruimte met docker prune
commando’s, voeg de -a
vlag toe om alle afbeeldingen, volumes of containers te verwijderen—niet alleen dangling of anonieme. Vergeet natuurlijk niet de mogelijke nadelen van deze aanpak.
Als het probleem met de schijfruimte aanhoudt, is uw enige optie om de beschikbare schijfruimte te vergroten.
Herstellen van per ongeluk verwijderen
Herstellen is makkelijker gezegd dan gedaan, daarom raden we aan om te begrijpen wat er verwijderd zal worden bij het snoeien voordat u daadwerkelijk het commando uitvoert.
Toch, als u uzelf in een situatie vindt waarin u per ongeluk belangrijke containers, afbeeldingen of volumes heeft gesnoeid, begin dan met het controleren van de logs om te identificeren wat er is verwijderd.
Op macOS kan dit worden gedaan door de volgende twee commando’s uit te voeren (opties voor Windows en Linux):
pred='process matches ".*(ocker|vpnkit).*" || (process in {"taskgated-helper", "launchservicesd", "kernel"} && eventMessage contains[c] "docker")' /usr/bin/log stream --style syslog --level=debug --color=always --predicate "$pred" /usr/bin/log show --debug --info --style syslog --last 30m --predicate "$pred" >/tmp/logs.txt
Het uitvoeren van deze commando’s zal de laatste 30 minuten aan Docker-gerelateerde logs opslaan in /tmp/logs.txt
. U moet deze logs inspecteren om te bepalen welke containers of afbeeldingen zijn verwijderd.
Voor verwijderde afbeeldingen, kunt u ze waarschijnlijk opnieuw ophalen vanuit een register zoals Docker Hub. Een commando zoals dit zou het probleem moeten oplossen:
docker pull <image_name>
En voor verwijderde containers, kunt u ze altijd opnieuw maken als ze gebaseerd waren op persistente afbeeldingen:
docker run --name <container_name> <image_name>
Als alternatief kunt u herstellen van back-ups als deze beschikbaar zijn, wat kan worden gebruikt om zowel volume- als containergegevens te herstellen. Overweeg in de toekomst het gebruik van tools voor volumesnapshots om gegevensverlies te voorkomen.
De beste strategie is echter om de resources die zullen worden verwijderd te inspecteren voordat je een opruimopdracht uitvoert en alleen door te gaan als je er absoluut zeker van bent dat het geen invloed zal hebben op je workflow.
Samenvattend Docker Prune
Al met al is de docker prune
-familie van opdrachten een krachtige manier om schijfruimte terug te winnen, maar het brengt het risico met zich mee dat je per ongeluk resources verwijdert die je nodig hebt, wat kan leiden tot gegevensverlies. Dit risico is nog groter bij het gebruik van de optionele -a -f
-vlaggen, die alles krachtig zullen verwijderen.
Niettemin blijft opruimen een standaardmethode om je systeem schoon en georganiseerd te houden.
Je moet gewoon voorzichtig zijn, vooral in productieomgevingen. Gebruik commando’s zoals docker ps -a
, docker images
en docker volume ls
voordat je gaat snoeien om alle containers, images en volumes op te sommen. Voer het snoeicommando uit alleen nadat je er zeker van bent dat je het eens bent met het verwijderen van de vermelde bronnen (ervan uitgaande dat ze niet worden gebruikt door een draaiende container).
Als je meer wilt weten over Docker, containerisatie en containerorkestratie, bekijk dan deze cursussen op DataCamp: