Docker är en teknik för containerisering av programvara som hjälper utvecklare att skapa och distribuera applikationer på olika plattformar, från skrivbordet till molnet.

En ögonblicksbild – eller blåkopia – av källkoden, beroendena och verktygen som krävs för att bygga en applikation i en Docker-container kallas för en image. Docker-applikationer som kräver beständiga data kan förlita sig på lagring som kallas volymer och som är oberoende av det underliggande operativsystemet.

En effektiv organisation av avbildningar, volymer och containrar är viktig när man använder Docker. Icke använda inkarnationer av dessa tillgångar kan exempelvis ackumuleras, ta upp värdefullt diskutrymme och så småningom påverka systemets prestanda.

I den här artikeln så utforskar vi olika sätt att upprätthålla systemorganisationen genom att rensa avbildningar (både individuellt och alla på en gång), volymer och containers. Och vi kommer att använda kommandoradsgränssnittet (CLI) docker för att få dessa uppgifter utförda med snabbhet.

Så här tar du bort Docker-avbildningar

Att ta bort föråldrade eller onödiga avbildningar från Docker är viktigt för att upprätthålla ett rent och organiserat system. Låt oss titta på hur CLI kan rikta in sig på vissa avbildningar för borttagning.

Vi ska börja med bilderna i en Docker-miljö med kommandot 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

Listing images ovan har avslöjat avbildningar som heter my_image och demo, båda taggade med latest. En tredje bild har inget namn och ingen märkning. I det här fallet så är detta en ”dinglande” avbildning: en avbildning som för närvarande inte används av en container. Den här dinglande avbildningen är ett resultat av en ombyggnad av my_image (ett vanligt scenario). Den tidigare versionen av avbildningen finns fortfarande kvar i filsystemet, men används inte längre.

I listan så visas även de första 12 tecknen i varje avbildnings 64 tecken långa ID, skapandedatum och det lagringsutrymme som avbildningarna tar i anspråk.

Ta bort alla oanvända avbildningar

I listningsexemplet ovan så har vi en dinglande avbildning. Det är dock möjligt att en avbildning utan namn eller tagg är aktiv. Den kan exempelvis ha använts för att starta en container genom att hänvisa till dess ID.

För att på ett säkert sätt radera alla bilder som verkligen dinglar kan du använda kommandot docker image prune:

$ 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

Vi listar våra avbildningar igen för att se resultatet av vårt arbete:

$ 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

Efter beskärningen så har avbildningen utan namn eller etikett försvunnit.

Ta bort en specifik avbildning med namn

Du kan ta bort en avbildning genom att hänvisa till dess namn:

$ docker image rm <image_name>

Obs: Det är inte så enkelt att ta bort avbildningar som fortfarande används. Du bör stoppa eller ta bort de containrar som körs och som använder avbildningarna. Även om det vanligtvis inte rekommenderas så kan du exempelvis tvinga bort en aktiv avbildning med hjälp av flaggan -f:

$ docker image rm <image_name> -f

Användning av rmi-kortappen för att ta bort avbildningar

Docker CLI har ett kortfattat tillvägagångssätt för att ta bort avbildningar i aliaset rmi. Det ser ut så här om du använder detta för att ta bort en avbildning med namnet:

$ docker rmi demo
Untagged: demo:latest
Deleted: sha256:2cbc27836df4a7707e746e28368f1fdecfefbfb813aae06611ca6913116b80b4

Vi använder rmi för följande exempel på borttagning av avbildningar.

Ta bort alla otaggade bilder

Avbildningar som inte är taggade tar fortfarande upp värdefullt diskutrymme. Som ett resultat så blir systemet allt långsammare med tiden.

För att ta bort alla otaggade bilder i Docker så använder du kommandot docker rmi med ett filter. Du kan ge filter som baseras på specifika kriterier med hjälp av alternativet -f (inte att förväxla med flaggan -f som finns tillgänglig för image rm för att tvinga fram en åtgärd).

Filtret dangling=true används för att identifiera otaggade avbildningar:

$ docker rmi $(docker images -f "dangling=true" -q)

Alternativet -q i kommandot ovan visar avbildnings-ID: n för alla otaggade bilder. Alla dessa ID: n skickas sedan som argument till docker rmi för borttagning.

I detta filter så används nyckelordet ”dangling”, men som vi nämnde ovan så kan vissa bilder utan taggar faktiskt vara aktiva. Du kommer exempelvis att bli varnad om en bild som har valts ut av detta filter inte är dinglandes på riktigt.

Ta bort en specifik avbildning efter ID

Du kan använda kommandot docker rmi för att ta bort en specifik avbildning genom att hänvisa till dess ID:

$ docker rmi <image_id>

Ta bort en viss avbildning efter namn och tagg

Du kan ta bort en viss avbildning tillsammans med dess namn och tagg genom att använda kommandot docker rmi.

Om du exempelvis har flera bilder med samma namn men med olika taggar så kan du ta bort en viss avbildning genom att använda det här formatet:

$ docker rmi <image_name>:<tag>

Den här metoden är praktisk när du vill ta bort en viss version av en avbildning i stället för att ta bort alla avbildningar som är relaterade till ett arkiv.

Ta bort alla avbildningar med den senaste taggen

I Docker så hänvisar taggen ”latest” till den senaste versionen av en viss Docker-avbildning. Den senaste taggen används ofta som standardtagg för Docker-avbildningar. Taggen tilldelas automatiskt den senaste byggnaden av en avbildning om inte en annan tagg uttryckligen anges.

Docker tillhandahåller ett kommando för att ta bort alla avbildningar med taggen ”latest”:

$ docker rmi $(docker images | grep "latest" | awk '{print $3}')

Ovanstående kommando är uppdelat i två delar. Först så hämtar det en lista över avbildnings-ID: n och sedan så skickas denna lista som ett argument till kommandot docker rmi.

Ta bort avbildningar från ett fjärrarkiv

För att ta bort en avbildning från ett fjärrarkiv, exempelvis Docker Hub, så måste du först logga in på kontot med Docker CLI.

När du är inloggad så behöver du bara använda kommandot docker rmi för att ta bort avbildningen. Kommandot docker rmi kan ta bort både lokala och fjärrbaserade avbildningar:

docker rmi my_repo/my_image_tag

Du kan dock endast ta bort avbildningar som har lagts till i arkivet. På samma sätt så kan du inte ta bort avbildningar som används av containrar som körs.

Ta bort flera avbildningar från ett fjärrarkiv

Om du vill ta bort flera avbildningar från ett fjärrarkiv så kan du använda kommandot docker rmi följt av avbildningens ID eller taggar. Exempelvis:

docker rmi my_repo/image_tag_1 my_repo/image_tag_2 my_repo/image_tag_3

Detta tar bort de tre avbildningarna med taggarna image_tag_1, image_tag_2 och image_tag_3 från arkivet my_repo.

Så här tar du bort Dockervolymer

Dockervolymer kan ta upp mycket diskutrymme, särskilt om de innehåller stora mängder data eller flera säkerhetskopior. Genom att ta bort volymer som inte längre behövs så minskar du risken för dataintrång och ser till att känsliga data inte är tillgängliga för obehöriga användare. Att regelbundet ta bort volymer kan även hålla Docker-miljön uppdaterad och förhindra problem som orsakas av föråldrade data.

De här kommandona förstör permanent all data som lagras i en volym, så använd dem med försiktighet.

Ta bort alla oanvända volymer

I Docker så är det lika viktigt att ta bort oanvända volymer som att ta bort avbildningar eller containers.

För att frigöra diskutrymme så kan du använda kommandot docker volume prune.

Ta bort en specifik volym efter namn

Att ta bort en specifik volym i Docker är användbart för att ta bort oanvända volymer. Här är kommandot för att ta bort en volym:

docker volume rm my_volume_name

Med ovanstående kommando så tas volymen my_volume_name bort. Docker producerar ett fel om du försöker att ta bort en använd volym. Du kan kontrollera tillgängliga volymer med hjälp av kommandot docker volume ls.

Så här tar du bort Docker Containrar

När du arbetar mer med Docker så kan det hända att du samlar på dig många oanvända containrar som upptar diskresurser. Om du inte tar bort dem så kan de med tiden samlas och ta upp värdefulla diskresurser, vilket gör att systemet blir långsammare och du kan eventuellt utsättas för risker.

Ta bort alla stoppade containrar

Kommandot docker container prune kan ta bort alla stoppade containrar i Docker. Här skapar kommandot en lista över alla stoppade containrar som ska tas bort och ber om bekräftelse innan det fortsätter. Detta hjälper till att återvinna diskutrymme och upprätthålla en ren och organiserad Docker-miljö. Som ett resultat så kan du även dubbelkolla att du inte förlorar något viktigt:

$ docker container prune

WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y

Deleted Containers:
4df4c47c4df4
d35bcec20bce

Observera att endast stoppade containrar kan tas bort med det här kommandot. Om du behöver ta bort containrar som körs så måste du stoppa dem först eller använda ett annat kommando.

Ta bort en specifik container efter ID

I Docker så kan du ta bort en specifik container efter ID genom att använda docker rm command tillsammans med container-ID. Först så hämtar du alla container-ID: n med hjälp av docker ps command:

$ docker ps -a -q
1ce3cdeb4035
06b79541e25c
fa98f1804e3e

$ docker rm 1ce3cdeb4035

Ovanstående kommando fungerar endast om containern är stoppad. Om containern körs så måste du ta bort den med tvång med hjälp av flaggan -f:

$ docker rm -f 1ce3cdeb4035

Ta bort en specifik container efter namn

Docker tillhandahåller ett mångsidigt docker rm-kommando för att ta bort containrar både efter namn och ID.

Om du exempelvis har en container som heter web_server så kan du ta bort den med följande kommando:

$ docker rm web_server

Först så är det viktigt att stoppa containern. Docker tillhandahåller kommandot docker stop för att stoppa en specifik container.

Ta bort alla containrar som körs

För att ta bort alla containrar som körs så kan du använda kommandot docker rm:

$ docker rm $(docker ps -q)

Med hjälp av docker ps -q så visas ID för de containrar som körs. Därefter så skickas ID: erna till kommandot docker rm, som tar bort alla containrar.

Observera att det här kommandot endast tar bort containrar som körs. Om du vill ta bort alla containrar, även stoppade sådana, kan du istället använda följande kommando:

$ docker rm $(docker ps -a -q)

Sammanfattning

I den här artikeln så förklarade vi hur du tar bort Docker-avbildningar, volymer och containrar. Du lärde dig olika metoder för att upprätthålla ett rent och organiserat system. Den gick igenom kommandon för att ta bort alla oanvända, otaggade eller specifika avbildningar efter ID eller namn. Du lärde dig även kommandon för att ta bort alla stoppade containrar eller en specifik container efter ID eller namn.

Att ta bort Docker-avbildningar, volymer och containrar är en enkel process som kan hjälpa dig att hantera oanvända komponenter, återvinna värdefullt diskutrymme och förbättra systemets prestanda.

Det är denna enkelhet som lockar utvecklare till Docker, och det finns inget enklare sätt att distribuera en applikation som utvecklad i Docker än med Kinsta’s plattform Applikationshosting. Du kan prova den kostnadsfritt nu.

Salman Ravoof

Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.