Docker er en teknologi til containerisering af software, der hjælper udviklere med at skabe og implementere applikationer på tværs af forskellige platforme, lige fra skrivebordet til skyen.

Et øjebliksbillede – eller blueprint – af kildekoden, afhængigheder og værktøjer, der er nødvendige for at opbygge et program i en Docker-container, kaldes et image. Docker-applikationer, der kræver vedvarende data, kan stole på lagerplads kaldet volumener, der er uafhængige af det underliggende operativsystem.

Effektiv organisering af images, volumener og containere er vigtig, når du bruger Docker. Ubrugte inkarnationer af disse aktiver kan ophobes og optage værdifuld diskplads og i sidste ende påvirke systemets ydeevne.

I denne artikel udforskes forskellige måder at opretholde systemorganisationen på ved at rydde images (både individuelt og alle på én gang), volumener og containere. Og vi vil bruge kommandolinjeinterfacet (CLI) docker til at få disse opgaver udført hurtigt.

Sådan fjernes Docker Images

Fjernelse af forældede eller unødvendige images fra Docker er afgørende for at opretholde et rent og organiseret system. Lad os se på, hvordan CLI’en kan målrette visse images til fjernelse.

Lad os først se på billederne i et Docker-miljø med kommandoen 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 ovenfor har afsløret billeder ved navn my_image og demo, begge mærket latest. Et tredje billede har intet navn eller tag. I dette tilfælde er det et “dinglende” image: et image, der ikke i øjeblikket bruges af en container. Dette dinglende image er resultatet af en genopbygning af my_image (et almindeligt scenarie). Den tidligere version af afbilledet findes stadig i filsystemet, men er ikke i brug nu.

Listen viser også de første 12 tegn i hvert afbildningens 64-tegns-id, oprettelsesdatoer og den lagerplads, som afbildningerne bruger.

Fjern alle ubrugte billeder

I ovenstående listeeksempel har vi et hængende billede. Det er dog muligt, at et image uden navn eller tag er aktivt. Det kunne f.eks. være blevet brugt til at starte en container ved at henvise til dens ID.

Hvis du vil slette alle billeder, der virkelig hænger, kan du bruge kommandoen docker image prune for at slette dem sikkert:

$ 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 vil liste vores images igen for at se resultatet af vores arbejde:

$ 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æringsprocessen er billedet uden navn eller tag forsvundet.

Fjern et specifikt image efter navn

Du kan målrette et image til fjernelse ved at henvise til dets navn:

$ docker image rm <image_name>

Bemærk: Du kan ikke nemt fjerne images, der stadig er i brug. Du skal stoppe eller fjerne de kørende containere, der bruger aftrykkene. Selv om det normalt ikke anbefales, kan du tvinge fjernelse af et aktivt image ved hjælp af -f -flaget:

$ docker image rm <image_name> -f

Brug af rmi-forkortelsen til at fjerne aftryk

Docker CLI har en kortfattet tilgang til at fjerne billeder i aliaset rmi. Hvis du bruger det til at fjerne et image efter navn, ser det således ud:

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

Vi bruger rmi i de følgende eksempler på fjernelse af billeder.

Fjern alle images uden tag

Ikke-taggede images optager stadig værdifuld diskplads, hvilket gør dit system mere og mere langsomt over tid.

Hvis du vil fjerne alle untagged images i Docker, skal du bruge kommandoen docker rmi med et filter. Du kan angive filtre baseret på specifikke kriterier ved hjælp af indstillingen -f (ikke at forveksle med -f -flaget, der er tilgængeligt for image rm for at fremtvinge en handling).

Filteret dangling=true bruges til at identificere untagged images:

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

Indstillingen -q i ovenstående kommando viser image-id’erne for alle ikke-mærkede billeder. Alle disse ID’er sendes derefter som argumenter til docker rmi for at fjerne dem.

Dette filter bruger nøgleordet “dangling”, men som nævnt ovenfor kan nogle images uden tags faktisk være aktive. Du vil blive advaret, hvis et image, der er udvalgt af dette filter, ikke virkelig er “dangling”.

Fjern et specifikt billede efter ID

Du kan bruge kommandoen docker rmi til at fjerne et bestemt image ved at henvise til dets ID:

$ docker rmi <image_id>

Fjern et bestemt image ved at henvise til et bestemt image ved navn og tag

Du kan slette et bestemt image sammen med dets navn og tag ved at bruge kommandoen docker rmi.

Hvis du f.eks. har flere images med samme navn, men med forskellige tags, kan du slette et bestemt image ved at bruge dette format:

$ docker rmi <image_name>:<tag>

Denne metode er praktisk, når du ønsker at slette en bestemt version af et image i stedet for at slette alle images, der er relateret til et arkiv.

Fjern alle billeder med det seneste tag

I Docker henviser “seneste” tagget til den seneste version af et bestemt Docker-image. Det seneste tag bruges ofte som standardtag for Docker-images. Det tildeles automatisk til det seneste build af et image, medmindre et andet tag udtrykkeligt er angivet.

Docker tilbyder en kommando til at fjerne alle images med “latest”-tagget:

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

Ovenstående kommando er opdelt i 2 dele. Først får den listen over image-id’er, og derefter sender den denne liste som et argument til kommandoen docker rmi.

Fjern billeder fra et fjernlager

For at fjerne et image fra et fjernrepositorium, f.eks. Docker Hub, skal du først logge ind på kontoen ved hjælp af Docker CLI.

Når du er logget ind, skal du blot bruge kommandoen docker rmi for at fjerne et image. Kommandoen docker rmi kan fjerne både lokale og eksterne images:

docker rmi my_repo/my_image_tag

Du kan dog kun fjerne images, der er blevet skubbet til repositoriet. Ligeledes kan du ikke fjerne billeder, der bruges af kørende containere.

Fjernelse af flere billeder fra et fjernrepositorium

Hvis du vil fjerne flere billeder fra et fjernopbevaringssted, kan du bruge kommandoen docker rmi efterfulgt af image-id’er eller tags. For eksempel:

docker rmi my_repo/image_tag_1 my_repo/image_tag_2 my_repo/image_tag_3

Dette vil fjerne de tre images med tags image_tag_1, image_tag_2 og image_tag_3 fra arkivet my_repo.

Sådan fjerner du Docker Volumes

Docker-volumener kan optage meget diskplads, især hvis de indeholder store datamængder eller flere sikkerhedskopier. Ved at fjerne volumener, der ikke længere er nødvendige, reducerer du risikoen for databrud og sikrer, at følsomme data ikke er tilgængelige for uautoriserede brugere. Regelmæssig fjernelse af volumener kan også holde Docker-miljøet opdateret og forhindre problemer forårsaget af forældede data.

Disse kommandoer ødelægger permanent alle de data, der er gemt på en volumen, så brug dem med forsigtighed.

Fjern alle ubrugte volumener

I Docker er det lige så vigtigt at fjerne ubrugte volumener som at fjerne images eller containere.

For at frigøre disklagerplads kan du bruge kommandoen docker volume prune.

Fjern en specifik volumen efter navn

Fjernelse af en specifik volumen i Docker er nyttig til at fjerne ubrugte volumener. Her er kommandoen til at fjerne en volumen:

docker volume rm my_volume_name

Med ovenstående kommando vil volumen my_volume_name blive fjernet. Docker producerer en fejl, hvis du forsøger at fjerne en brugt volumen. Du kan kontrollere tilgængelige volumener ved hjælp af kommandoen docker volume ls.

Sådan fjernes Docker-containere

Efterhånden som du arbejder mere med Docker, kan du ophobe mange ubrugte containere, som optager diskressourcerne. Hvis du ikke sletter dem, kan de akkumuleres over tid og optage værdifulde diskressourcer, hvilket gør dit system langsommere og potentielt kan bringe dig i fare.

Fjern alle stoppede containere

Med kommandoen docker container prune kan du slette alle stoppede containere i Docker. Her opretter kommandoen en liste over alle stoppede containere, der skal fjernes, og beder om bekræftelse, før den fortsætter. Dette hjælper med at genvinde diskplads og opretholde et rent og organiseret Docker-miljø, samtidig med at du kan dobbelttjekke, at du ikke mister noget vigtigt:

$ docker container prune

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

Deleted Containers:
4df4c47c4df4
d35bcec20bce

Bemærk, at kun stoppede containere kan fjernes med denne kommando. Hvis du har brug for at fjerne kørende containere, skal du stoppe dem først eller bruge en anden kommando.

Fjern en bestemt container efter ID

I Docker kan du fjerne en bestemt container efter ID ved hjælp af docker rm command sammen med container-ID’et. Først skal du få alle container-id’s ved hjælp af docker ps command:

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

$ docker rm 1ce3cdeb4035

Ovenstående kommando virker kun, hvis containeren er i en stoppet tilstand. Hvis containeren kører, skal du tvinge den til at fjerne den ved hjælp af -f-flaget:

$ docker rm -f 1ce3cdeb4035

Fjern en bestemt container efter navn

Docker tilbyder en docker rm -kommando med flere formål til at fjerne både containere efter navn og ID.

Hvis du f.eks. har en container med navnet web_server, kan du fjerne den ved hjælp af følgende kommando:

$ docker rm web_server

Først er det vigtigt at stoppe containeren. Docker tilbyder kommandoen docker stop til at stoppe en bestemt container.

Fjern alle kørende containere

Hvis du vil slette alle kørende containere, kan du bruge kommandoen docker rm:

$ docker rm $(docker ps -q)

Brug af docker ps -q viser ID’erne på de kørende containere. Derefter sendes ID’erne til kommandoen docker rm, som fjerner alle containerne.

Bemærk, at denne kommando kun fjerner kørende containere. Hvis du ønsker at fjerne alle containere, herunder stoppede containere, kan du i stedet bruge følgende kommando:

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

Opsummering

Denne artikel forklarede, hvordan du fjerner Docker-images, -volumener og -containere. Du lærte forskellige metoder til at opretholde et rent og organiseret system. Den dækkede kommandoer til at fjerne alle ubrugte, ikke-mærkede eller specifikke images efter ID eller navn. Du lærte også kommandoer til at slette alle stoppede containere eller en bestemt container efter ID eller navn.

Fjernelse af Docker-images, -volumener og -containere er en enkel proces, der kan hjælpe dig med at administrere ubrugte komponenter, så du genvinder værdifuld diskplads og ofte forbedrer systemets ydeevne.

Det er denne enkelhed, der tiltrækker udviklere til Docker, og der er ingen enklere måde at implementere en applikation udviklet i Docker på end med Kinstas Applikation Hosting-platform. Du kan prøve den gratis 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.