Docker is softwarecontainerisatietechnologie die developers helpt bij het maken en inzetten van applicaties op verschillende platforms, van de desktop tot de cloud.
Een momentopname – of blauwdruk – van de broncode, dependencies en tools die nodig zijn om een applicatie in een Docker container te bouwen wordt een image genoemd. Docker applicaties die persistente gegevens nodig hebben kunnen vertrouwen op opslag, volumes genaamd, die onafhankelijk zijn van het onderliggende besturingssysteem.
Effectieve organisatie van images, volumes en containers is belangrijk bij het gebruik van Docker. Ongebruikte incarnaties van deze assets kunnen zich ophopen, waardoor ze kostbare schijfruimte in beslag nemen en uiteindelijk de systeemprestaties aantasten.
Dit artikel onderzoekt verschillende manieren om de systeemorganisatie te handhaven door images (zowel afzonderlijk als allemaal tegelijk), volumes en containers op te ruimen. En we gebruiken de docker
commandoregelinterface (CLI) om deze taken snel uit te voeren.
Zo verwijder je Docker images
Het verwijderen van verouderde of onnodige images uit Docker is essentieel om een schoon en georganiseerd systeem te behouden. Laten we kijken hoe je met de CLI bepaalde images kan verwijderen.
Laten we eerst eens kijken naar de images in een Docker omgeving met het commando docker image ls
:
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
my_image latest 2cbc27836df4 60 seconds ago 7.05MB
<none> <none> 85b412789704 2 days ago 7.05MB
demo latest 26d80cd96d69 15 months ago 28.5MB
De bovenstaande lijst met images laat images zien met de namen my_image en demo, beide getagd latest. Een derde image heeft geen naam of tag. In dit geval is het een “bungelende” (Engels: dangling) image: eentje die momenteel niet door een container wordt gebruikt. Deze bungelende image is het resultaat van een herbouw van my_image (een veel voorkomend scenario). De vorige versie van de image staat nog op het bestandssysteem, maar is nu niet in gebruik.
De lijst toont ook de eerste 12 tekens van de 64-karakter ID van elke image, de aanmaakdata en de opslagruimte die de images innemen.
Alle ongebruikte images verwijderen
In het bovenstaande voorbeeld hebben we een bungelende image. Het is echter mogelijk dat een image zonder naam of tag actief is. Het kan bijvoorbeeld gebruikt zijn om een container te starten door naar zijn ID te verwijzen.
Om alle images die daadwerkelijk bungelen veilig te verwijderen, kun je het commando docker image prune
gebruiken:
$ docker image prune
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y
Deleted Images:
deleted: sha256:85b412789704c17e9c5e7edc97b2f64c748bbdae7eaa44d3fe2cc21a87acad3d
Total reclaimed space: 7.05MB
We zetten onze images nog eens op een rijtje om het resultaat van ons werk te zien:
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
my_image latest 2cbc27836df4 70 seconds ago 7.05MB
demo latest 26d80cd96d69 15 months ago 28.5MB
Na pruning is de image zonder naam of tag verdwenen.
Een specifieke image op naam verwijderen
Je kunt een image gericht verwijderen door naar de naam te verwijzen:
$ docker image rm <image_name>
Opmerking: Je kunt niet eenvoudig images verwijderen die nog in gebruik zijn. Je moet de draaiende containers die de images gebruiken stoppen of verwijderen. Hoewel het meestal niet wordt aanbevolen, kun je de verwijdering van een actief image forceren met de flag-f
:
$ docker image rm <image_name> -f
De rmi steno gebruiken voor het verwijderen van images
De Docker CLI heeft een stenografische aanpak voor het verwijderen van images in de alias rmi
. Het gebruik ervan om een image op naam te verwijderen ziet er als volgt uit:
$ docker rmi demo
Untagged: demo:latest
Deleted: sha256:2cbc27836df4a7707e746e28368f1fdecfefbfb813aae06611ca6913116b80b4
We zullen rmi
gebruiken voor de volgende imageverwijderingsvoorbeelden.
Alle ongetagde images verwijderen
Ongetagde images nemen nog steeds kostbare schijfruimte in beslag, waardoor je systeem na verloop van tijd steeds trager wordt.
Om alle ongelabelde images in Docker te verwijderen, gebruik je het commando docker rmi
met een filter. Je kunt filters geven op basis van specifieke criteria met de optie -f
(niet te verwarren met de flag -f
die beschikbaar is voor image rm
om een actie te forceren).
Het filter dangling=true
wordt gebruikt om ongemerkte images te identificeren:
$ docker rmi $(docker images -f "dangling=true" -q)
De optie -q
in het bovenstaande commando toont de image ID’s van alle ongemerkte images. Al deze ID’s worden dan als argumenten doorgegeven aan docker rmi
om ze te verwijderen.
Dit filter gebruikt het sleutelwoord “dangling”, maar zoals hierboven opgemerkt kunnen sommige images zonder tags wel degelijk actief zijn. Je krijgt een waarschuwing als een door dit filter geselecteerde image niet echt “bungelt”.
Een specifieke afbeelding op ID verwijderen
Je kunt het commando docker rmi
gebruiken om een specifieke image te verwijderen op basis van zijn ID:
$ docker rmi <image_id>
Verwijder een specifieke image op naam en label
Je kunt een specifieke image met naam en label verwijderen met het commando docker rmi
.
Als je bijvoorbeeld meerdere images hebt met dezelfde naam maar verschillende tags, kun je een bepaalde image verwijderen met dit format:
$ docker rmi <image_name>:<tag>
Deze methode is handig als je een specifieke versie van een image wilt verwijderen in plaats van alle images te verwijderen die betrekking hebben op een archief.
Alle images met de latest tag verwijderen
In Docker verwijst de “latest” tag naar de meest recente versie van een bepaald Docker image. De latest tag wordt vaak gebruikt als de standaard tag voor Docker images. Het wordt automatisch toegewezen aan de meest recente build van een image, tenzij expliciet een andere tag wordt opgegeven.
Docker biedt een commando om alle images met de “latest” tag te verwijderen:
$ docker rmi $(docker images | grep "latest" | awk '{print $3}')
Het bovenstaande commando bestaat uit 2 delen. Eerst krijgt het de lijst met image ID’s, en dan geeft het deze lijst door als argument aan het commando docker rmi
.
Images verwijderen uit een extern archief
Om een image te verwijderen uit een remote repository, zoals Docker Hub, moet je eerst inloggen op het account met de Docker CLI.
Als je eenmaal bent ingelogd, hoef je alleen maar het commando docker rmi
te gebruiken om de image te verwijderen. Het docker rmi
commando kan zowel lokale als remote images verwijderen:
docker rmi my_repo/my_image_tag
Je kunt alleen images verwijderen die naar het archief zijn gepushed. Ook kun je geen images verwijderen die gebruikt worden door draaiende containers.
Meerdere images uit een remote archief verwijderen
Om meerdere images uit een extern archief te verwijderen, kun je het commando docker rmi
gebruiken, gevolgd door de image ID’s of tags. Bijvoorbeeld:
docker rmi my_repo/image_tag_1 my_repo/image_tag_2 my_repo/image_tag_3
Dit zal de drie images met de tags image_tag_1
, image_tag_2
, en image_tag_3
verwijderen uit de repository my_repo
.
Zo verwijder je Docker volumes
Docker volumes kunnen veel schijfruimte in beslag nemen, vooral als ze grote hoeveelheden gegevens of meerdere backups bevatten. Door volumes die niet langer nodig zijn te verwijderen, verminder je het risico op datalekken en zorg je ervoor dat gevoelige gegevens niet toegankelijk zijn voor onbevoegde gebruikers. Het regelmatig verwijderen van volumes kan de Docker omgeving ook up-to-date houden en problemen door verouderde gegevens voorkomen.
Deze commando’s vernietigen permanent alle gegevens die in een volume zijn opgeslagen, dus gebruik ze met voorzichtigheid.
Alle ongebruikte volumes verwijderen
In Docker is het verwijderen van ongebruikte volumes net zo cruciaal als het verwijderen van images of containers.
Om schijfruimte vrij te maken kun je het commando docker volume prune
gebruiken.
Een specifiek volume op naam verwijderen
Het verwijderen van een specifiek volume in Docker is handig voor het verwijderen van ongebruikte volumes. Hier is het commando om een volume te verwijderen:
docker volume rm my_volume_name
Met het bovenstaande commando wordt het volume my_volume_name verwijderd. Docker produceert een fout als je een gebruikt volume probeert te verwijderen. Je kunt beschikbare volumes controleren met het commando docker volume ls
.
Zo verwijder je Docker containers
Naarmate je meer met Docker werkt, kun je veel ongebruikte containers verzamelen die de schijfresources in beslag nemen. Als je ze niet verwijdert, kunnen ze zich na verloop van tijd ophopen en kostbare schijfresources in beslag nemen, waardoor je systeem vertraagt en je mogelijk gevaar loopt.
Alle gestopte containers verwijderen
Het commando docker container prune
kan alle gestopte containers in Docker verwijderen. Hierbij maakt het commando een lijst van alle gestopte containers die verwijderd zullen worden en vraagt om bevestiging voordat het verder gaat. Dit helpt om schijfruimte terug te winnen en een schone en georganiseerde Docker omgeving te houden, terwijl je dubbel kunt controleren of je niets belangrijks verliest:
$ docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
4df4c47c4df4
d35bcec20bce
Merk op dat alleen gestopte containers met dit commando kunnen worden verwijderd. Als je draaiende containers wilt verwijderen, moet je ze eerst stoppen of een ander commando gebruiken.
Een specifieke container op ID verwijderen
In Docker kun je een specifieke container per ID verwijderen met behulp van de docker rm command
samen met de container ID. Verkrijg eerst alle container ID met behulp van de docker ps command
:
$ docker ps -a -q
1ce3cdeb4035
06b79541e25c
fa98f1804e3e
$ docker rm 1ce3cdeb4035
Het bovenstaande commando werkt alleen als de container zich in een gestopte toestand bevindt. Als de container draait, dan moet je hem geforceerd verwijderen met de -f flag:
$ docker rm -f 1ce3cdeb4035
Een specifieke container op naam verwijderen
Docker biedt een veelzijdig docker rm
commando om zowel containers op naam als op ID te verwijderen.
Als je bijvoorbeeld een container hebt met de naam web_server, kun je die verwijderen met het volgende commando:
$ docker rm web_server
Eerst is het belangrijk om de container te stoppen. Docker biedt het commando docker stop
om een specifieke container te stoppen.
Alle draaiende containers verwijderen
Om alle draaiende containers te verwijderen, kun je het commando docker rm
gebruiken:
$ docker rm $(docker ps -q)
Met behulp van docker ps -q
worden de ID’s van draaiende containers opgesomd. Daarna worden de ID’s doorgegeven aan het commando docker rm
, dat alle containers verwijdert.
Let op dat dit commando alleen draaiende containers verwijdert. Als je alle containers wilt verwijderen, ook de gestopte, kun je in plaats daarvan het volgende commando gebruiken:
$ docker rm $(docker ps -a -q)
Samenvatting
In dit artikel is uitgelegd hoe je Docker images, volumes en containers kunt verwijderen. Je leerde verschillende methoden om een schoon en georganiseerd systeem te onderhouden. Het behandelde commando’s om alle ongebruikte, ongemerkte of specifieke images op ID of naam te verwijderen. Je leerde ook commando’s om alle gestopte containers of een specifieke container op ID of naam te verwijderen.
Het verwijderen van Docker images, volumes en containers is een eenvoudig proces dat je kan helpen ongebruikte componenten te beheren, waardoor waardevolle schijfruimte wordt teruggewonnen en de systeemprestaties vaak verbeteren.
Het is deze eenvoud die developers aantrekt tot Docker, en er is geen eenvoudiger manier om een in Docker ontwikkelde applicatie te deployen dan met Kinsta’s Applicatie Hosting platform. Je kunt het nu gratis uitproberen.
Laat een reactie achter