„Docker“ paveikslėlio pašalinimas: kaip ištrinti „Docker“ vaizdus, ​​paaiškintus pavyzdžiais

Gyvename laikais, kai saugojimas kasdien tampa pigesnis. Mes galime tiesiog nusiųsti viską į debesį ir beveik nieko nemokėti.

Taigi kodėl turėtume nerimauti dėl „Docker“ vaizdų ištrynimo?

Visų pirma, vis dar yra tam tikrų kritinių užduočių, kurios negali būti perkeltos į debesis, ypač tose, kurios yra griežtai reguliuojamose pramonės šakose, pavyzdžiui, įstatymuose ar sveikatos priežiūros srityje.

Bet norėdamas geriau atsakyti į šį klausimą, sakyčiau, kad mums, kaip kūrėjams, dažnai trūksta vietos savo vietinėse mašinose.

Atlikime greitą šio „StackOverflow“ viešojo duomenų rinkinio analizę, kad galėtume toliau tai ištirti:

SELECT tag, title, answer_count, favorite_count, score, view_count VIEWS FROM (SELECT title, answer_count, favorite_count, view_count, score, SPLIT(tags, '|') tags FROM `bigquery-public-data.stackoverflow.posts_questions` posts_questions), UNNEST(tags) tag WHERE tag = 'docker' AND title LIKE '%space left%' ORDER BY VIEWS DESC

Užklausos rezultatai:

Taigi tai atsitinka ne tik su manimi, tiesa? Pažiūrėkite, kiek peržiūrų turime tose „StackOverflow“ žinutėse. Jei įdomu, pranešimų, atitinkančių paieškos užklausą , skaičius yra 465687 .

Mūsų laimei, šiandien pamatysime keletą lengvai naudojamų pavyzdžių, kaip ištrinti kabančius ir nenaudojamus dokų atvaizdus, ​​kad padėtume sau.

Kas yra kabantys ir nenaudojami „Docker“ vaizdai?

piešimas

Koks skirtumas tarp kabančių ir nenaudojamų vaizdų, galite paklausti?

Kabantis vaizdas reiškia, kad sukūrėte naują vaizdo struktūrą, bet nepateikėte naujo pavadinimo. Pagalvokite apie tuos senus, užmirštus vaizdus, ​​su kuriais niekas nebegali ką daryti - tai „kabantys vaizdai“.

Jie lieka nepažymėti ir paleidus rodomi ant savo vardo docker images.

Kita vertus, nenaudojamas vaizdas reiškia, kad jis nebuvo priskirtas arba nebuvo naudojamas talpykloje.

Pvz., Kai veikia docker ps -a- bus pateikti visi jūsų šiuo metu veikiantys konteineriai ir uždaryti konteineriai. Bet kokie konteineriuose naudojami vaizdai rodomi kaip „naudoti vaizdai“, o visi kiti yra nenaudojami.

Ištrinti „Docker Images“

Dabar pažiūrėkime keletą pavyzdžių, kaip ištrinti „Docker“ vaizdus.

Mūsų atvejo analizė

piešimas

„Busy Cat Corp“ yra išgalvota įmonė, kuri kaupia kačių elgesio duomenis ir teikia rekomendacijas kačių savininkams, kaip padaryti savo augintinius judresnius ir laimingesnius.

Visi jų darbo krūviai kaupiami konteineriuose ir jie naudoja šiuos duomenų bazės vaizdus:

cassandra, postgres, mysql ir mongo.

Jų kūrėjams nuolat trūksta vietos savo mašinose, ir jie yra didžiausi „StackOverflow“ vartotojai - ar ne mes visi?

Taigi jie paprašė mūsų pateikti keletą greitų pavyzdžių, kaip ištrinti kai kuriuos vaizdus ir atgauti jų vietą.

Pirmiausia pažvelkime į vieno iš jų kūrėjų mašiną.

docker images

Rezultatas

REPOSITORY TAG IMAGE ID CREATED SIZE   9c872a6119cc About a minute ago 384MB mysql latest 5ac22cccc3ae 43 hours ago 544MB cassandra 3 9fab0c92a93d 4 days ago 384MB adoptopenjdk 8-jre... 2bf0172ac69b 4 days ago 210MB mongo latest 6d11486a97a7 2 weeks ago 388MB postgres latest b97bae343e06 6 weeks ago 313MB

Tai puiku, jie turi atsisiųsti visus vaizdus iš savo darbo krūvių. Bet pažvelkite į disko vietą - tai daugiau nei 2 GB ! Pažiūrėkime, ką galime padaryti jiems.

Ištrinkite kabančius „Docker“ vaizdus

Pradėsime nuo kabančių vaizdų paieškos.

docker images -qf "dangling=true"

Rezultatas

REPOSITORY TAG IMAGE ID CREATED SIZE   9c872a6119cc About a minute ago 384MB

Turime vieną, todėl ketiname tai išaiškinti.

Ištrinkite kabantį vaizdą

docker rmi $(docker images -qf "dangling=true") 
piešimas

Ištrinkite nenaudojamus „Docker“ vaizdus

Toliau ieškome nenaudojamų vaizdų.

docker ps -a

Rezultatas

CONTAINER ID IMAGE CREATED NAMES b6387b343b81 mysql 16 minutes ago some-mysql

Mes turime tik vieną konteinerį, kuriame veikia   mysql  vaizdas, todėl visi kiti vaizdai yra nenaudojami.

Kad nereikėtų to daryti rankiniu būdu, galime sudaryti scenarijų, kuriame būtų rodomi visi nenaudojami vaizdai, kad juos patikrintume.

# Get all the images currently in use USED_IMAGES=($( \ docker ps -a --format '{{.Image}}' | \ sort -u | \ uniq | \ awk -F ':' '$2{print $1":"$2}!$2{print $1":latest"}' \ )) # Get all the images currently available ALL_IMAGES=($( \ docker images --format '{{.Repository}}:{{.Tag}}' | \ sort -u \ )) # Print the unused images for i in "${ALL_IMAGES[@]}"; do UNUSED=true for j in "${USED_IMAGES[@]}"; do if [[ "$i" == "$j" ]]; then UNUSED=false fi done if [[ "$UNUSED" == true ]]; then echo "$i is not being used." fi done

Rezultatas

adoptopenjdk:8-jre-hotspot-bionic is not being used. cassandra:3 is not being used. mongo:latest is not being used. postgres:latest is not being used.

Tada jis ištrina nenaudojamus vaizdus.

# Get all the images currently in use USED_IMAGES=($( \ docker ps -a --format '{{.Image}}' | \ sort -u | \ uniq | \ awk -F ':' '$2{print $1":"$2}!$2{print $1":latest"}' \ )) # Get all the images currently available ALL_IMAGES=($( \ docker images --format '{{.Repository}}:{{.Tag}}' | \ sort -u \ )) # Remove the unused images for i in "${ALL_IMAGES[@]}"; do UNUSED=true for j in "${USED_IMAGES[@]}"; do if [[ "$i" == "$j" ]]; then UNUSED=false fi done if [[ "$UNUSED" == true ]]; then docker rmi "$i" fi done

Ištrynę ir kabančius, ir nenaudojamus vaizdus galime pažvelgti į tai, kas mums liko.

docker images

Rezultatas

REPOSITORY TAG IMAGE ID CREATED SIZE mysql latest 5ac22cccc3ae 43 hours ago 544MB

Taigi turime tik mysql  vaizdą, tai puiku!

piešimas

Ištrinkite visus pasenusius „Docker“ vaizdus su slyvomis

Šios komandos skamba puikiai, tačiau antrasis kūrėjas teigė, kad jiems nerūpi kabančių ir nenaudojamų vaizdų skirtumai.

Viskas, ko jie norėjo, buvo išvalyti pasenusius vaizdus ir atgauti vietos diske.

Aš asmeniškai tai dažniausiai darau.

Taigi galime tiesiog naudoti „Docker“ slyvų komandas.

# First delete all stopped containers docker container prune # Then delete both dangling and unused images docker image prune --all

Tai ištrins nepanaudotus ir kabančius vaizdus. Arba, kitaip tariant, vaizdai, su kuriais nėra susietas bent vienas konteineris.

Pastaba: todėl pirmiausia turėjome ištrinti sustabdytus konteinerius aukščiau esančiame kode.

vyniojimo iki

In this article we saw how to delete Docker Images, and we used a fictional company to explain it with some easy-to-use examples.

It's important to point out that you shouldn't use Docker to keep a history of your old images. For a developer environment that's fine, and you can even automate the image clean up workload if you have to deal with a lot of them.

But for a production workload, you should be using a Container Registry solution to handle your Docker images.

There are many Container Registry solutions out there, like Google Cloud Platform with Artifact Registry and Docker Enterprise with Docker Trusted Registry. And if you are in the open source world, you can just use Docker Hub :).

Thanks for reading!

* Illustrations by Icons 8 from Icons8

Jei jums tai buvo naudinga arba norite užginčyti ar išplėsti bet ką čia iškeltą, susisiekite su manimi „Twitter“ ar „Linkedin“. Prisijunkime!