Eski ve kullanılmayan Docker görüntüleri nasıl kaldırılır


762

Docker'ı uzun süre çalıştırırken, sistemde çok fazla görüntü var. Depoyu boşaltmak için kullanılmayan tüm Docker görüntülerini aynı anda nasıl kaldırabilirim?

Ayrıca, aylar önce çekilen ve doğru olan görüntüleri de kaldırmak istiyorum TAG.

Bu yüzden, yalnızca etiketlenmemiş resimleri kaldırmamı istemiyorum. Hem etiketsiz hem de aylar önce çekilmiş gibi diğer görüntüleri içeren genel kullanılmamış görüntüleri kaldırmanın bir yolunu arıyorum TAG.

Yanıtlar:


1402

Eylül 2016 Güncellemesi: Docker 1.13: PR 26108 ve taahhüt 86de7c0 , docker daemon verilerinin diskte ne kadar yer kapladığını görselleştirmeyi ve "gereksiz" fazlalığı kolayca temizlemenizi sağlayan birkaç yeni komut sunuyor.

docker system pruneTÜM sarkan verileri silecektir (örn. Sırayla: kapsayıcılar durdu, kapsayıcı olmayan hacimler ve kapsayıcı olmayan görüntüler). Seçeneksiz kullanılmayan veriler bile -a.

Ayrıca:

İçin kullanılmayan görüntüler, kullanım docker image prune -a(sarkıtıyordu çıkarmak için ve ununsed görüntüleri).
Uyarı: ' kullanılmayan ', "herhangi bir kap tarafından referans alınmayan resimler" anlamına gelir: kullanmadan önce dikkatli olun -a.

Gösterildiği gibi AL 'ın cevabı , docker system prune --alltüm kaldıracaktır kullanılmayan sadece biraz fazla olabilir olanlar ... sarkan değil görüntüleri.

Bu seçenekle birleştirmek docker xxx prune, budamayı sınırlamak için harika bir yol olabilir ( minimum docker SDK API 1.28, bu nedenle docker 17.04+ )--filter

Şu anda desteklenen filtreler:

  • until (<timestamp>) - yalnızca verilen zaman damgasından önce oluşturulan kapsayıcıları, resimleri ve ağları kaldırın
  • label( label=<key>, label=<key>=<value>, label!=<key>, Veya label!=<key>=<value>) - sadece (veya konteynerler, resimler, ağların ve hacimleri kaldırmak olmadan durumda, label!=...kullanılan) Belirtilen etiketleri.

Örnek için bkz. " Görüntüleri budama ".


Orijinal cevap (Eylül 2016)

Genellikle yaparım:

docker rmi $(docker images --filter "dangling=true" -q --no-trunc)

Bu [sarkan görüntüleri] 13 kaldırmak için bir takma adım var :drmi

dangling=trueFiltre kullanılmayan görüntüleri bulur

Bu şekilde, etiketli bir görüntü tarafından artık referans verilmeyen herhangi bir ara görüntü kaldırılır.

Çıkarılan işlemler (kapsayıcılar) için önce aynısını yaparım

alias drmae='docker rm $(docker ps -qa --no-trunc --filter "status=exited")'

As haridsv dışarı noktalarında yorumlarda :

Teknik olarak, görüntüleri temizlemeden önce kapları temizlemelisiniz, çünkü bu daha sarkan görüntüleri ve daha az hatayı yakalayacaktır .


Jess Frazelle (jfrazelle) sahip bashrc fonksiyonu :

dcleanup(){
    docker rm -v $(docker ps --filter status=exited -q 2>/dev/null) 2>/dev/null
    docker rmi $(docker images --filter dangling=true -q 2>/dev/null) 2>/dev/null
}

Eski görüntüleri kaldırmak için ve sadece "referansı olmayan-sarkan" görüntüleri kaldırmak için şunları düşünebilirsiniz docker-gc:


Basit bir Docker konteyner ve görüntü çöp toplama komut dosyası.

  • Bir saatten uzun bir süre önce çıkış yapan kaplar kaldırılır.
  • Bundan sonra kalan kapsayıcıya ait olmayan görüntüler kaldırılır.

28
"dangling=true"Gerçekten ne anlama geldiğine dair belgeler var mı ?
CivFan

1
Bu script aylar önce çekilen bazı görüntüleri kaldıramıyor
Quanlong

2
dcleanupharika!
Quanlong

4
@herm İlk olarak, docker system prunegörüntülerden çok daha fazlasını kaldırır. docker image pruneBunun yerine kullandığınızdan emin olun . Ve olmak çok dikkatli ile -a: bir docker system prune -ayıkıcı etkiye (sıra hacimleri kaldırma) sahip olabilir. Son olarak, evet, -akullanılmayan görüntüleri kaldırır, cevabı düzenleyeceğim.
VonC

2
@stom: 'unused', herhangi bir kap tarafından referansta bulunulmayan, ancak sarkanların hiç etiketlenmediği anlamına gelir (sadece bir kimlik)
VonC

125

İkincisini güncelleyin (2017-07-08):

Daha da yakın olanını kullanarak (tekrar) VonC'ye başvurun system prune. Sabırsız, istemi şu -f, --forceseçenekle atlayabilir :

docker system prune -f

Sabırsız ve pervasız ek olarak "sadece sarkan görüntüleri değil, kullanılmayan görüntüleri" de kaldırabilir -a, --all:

docker system prune -af

https://docs.docker.com/engine/reference/commandline/system_prune/

Güncelleme:

Yakın zamanda eklenen komutları kullanan VonC'nin cevabına bakın prune. İlgili kabuk diğer adı kolaylığı:

alias docker-clean=' \
  docker container prune -f ; \
  docker image prune -f ; \
  docker network prune -f ; \
  docker volume prune -f '

Eski cevap:

Durdurulmuş (çıkılmış) kapsayıcıları sil:

$ docker ps --no-trunc -aqf "status=exited" | xargs docker rm

Kullanılmayan (sarkan) görüntüleri silin:

$ docker images --no-trunc -aqf "dangling=true" | xargs docker rmi

Eğer icra varsa çok dikkatli bakımından dönülmez veri kaybı , o zaman silebilirsiniz kullanılmayan hacimleri (v1.9 ve üzeri) (sarkan):

$ docker volume ls -qf "dangling=true" | xargs docker volume rm

İşte uygun bir kabuk takma adında:

alias docker-clean=' \
  docker ps --no-trunc -aqf "status=exited" | xargs docker rm ; \
  docker images --no-trunc -aqf "dangling=true" | xargs docker rmi ; \
  docker volume ls -qf "dangling=true" | xargs docker volume rm'

Referanslar:


3
Hacim temizleme konusunda dikkatli olurdum. Hem otomatik olarak oluşturulan konteyner hacimleri hem de şu anda kullanılmayan adlandırılmış hacimler dangling = true ile birlikte listelenir.
BMitch

1
@BMitch, kesinlikle haklısın; Tarifine sert bir uyarı ekledim docker volume rm. Her türlü önerinizi memnuniyetle karşılarım.
1616

1
Docker'ın bize adlandırılmış hacimler için farklı bir filtre seçeneği sunmasını isterim. İyi bir geçici çözüm bulursam paylaşacağımdan emin olurum.
BMitch

2
evet, ancak maalesef adlandırılmış birimi basit bir bayrakla anonim bir konteyner biriminden ayırmıyor. Kullandığım komut docker volume ls -qf dangling=true | egrep '^[a-z0-9]{64}$' | xargs --no-run-if-empty docker volume rm, hacimlerinizi asla bir kılavuza benzer bir adla adlandırmadıkça çalışır. Bunu yeni filtre sözdizimi için değiştirebilirim.
BMitch

1
Kullanılmayan (sarkan) hacimleri kaldırmak gerçekten bize yardımcı oluyor!
Kane

61

Bir aydan eski eski etiketli resimleri kaldırmak için :

$ docker images --no-trunc --format '{{.ID}} {{.CreatedSince}}' \
    | grep ' months' | awk '{ print $1 }' \
    | xargs --no-run-if-empty docker rmi

Bir depoda başvurulan, bir havuzda başvurulan, bağımlı alt resimlere sahip olan görüntüleri kaldırmanın başarısız olacağını unutmayın ... bu muhtemelen istediğiniz şeydir. Başka sadece -fbayrak ekleyin .

/etc/cron.daily/docker-gcSenaryo örneği :

#!/bin/sh -e

# Delete all stopped containers (including data-only containers).
docker ps -a -q --no-trunc --filter "status=exited" | xargs --no-run-if-empty docker rm -v

# Delete all tagged images more than a month old
# (will fail to remove images still used).
docker images --no-trunc --format '{{.ID}} {{.CreatedSince}}' | grep ' months' | awk '{ print $1 }' | xargs --no-run-if-empty docker rmi || true

# Delete all 'untagged/dangling' (<none>) images
# Those are used for Docker caching mechanism.
docker images -q --no-trunc --filter dangling=true | xargs --no-run-if-empty docker rmi

# Delete all dangling volumes.
docker volume ls -qf dangling=true | xargs --no-run-if-empty docker volume rm

2
+1 Eski liman işçisi görüntülerini silme komutu için. Biraz hileli, ama çözüm orijinal ve mükemmel çalışıyor :)
Rick

3
Bu güzel, ancak bu sadece en az 4 aylık docker görüntüleri siler düşünüyorum . .CreatedSincehaftalar, çok haftalık görüntülerde bile çıktıdaki zaman birimi olarak kullanılır 12 weeks.
joelittlejohn

2
Bu benim için iyi ve basit çalıştı:docker images | grep ' months' | awk '{ print $3 }' | xargs --no-run-if-empty docker rmi -f
Kent Bull

34

Diğer cevaplar harika, özellikle:

docker system prune # doesn't clean out old images
docker system prune --all # cleans out too much

Ama iki komutun ortasında bir şeye ihtiyacım vardı, bu yüzden filterseçenek ihtiyacım olan şeydi:

docker image prune --all --filter "until=4320h" # delete images older than 6 months ago; 4320h = 24 hour/day * 30 days/month * 6 months

Umarım yardımcı olur :)

Referans için: https://docs.docker.com/config/pruning/#prune-images


1
Çok az cevap! Kesim tarihiyle budama yapabilmek son derece yararlıdır.
Nik Reiman

24

Docker 1.13 veya daha yükseğine sahip olduğunuzu varsayarsak , budama komutlarını kullanabilirsiniz. Özellikle eski görüntüleri kaldırmakla ilgili sorunuz için birincisini istiyorsunuz.

# Remove unused images
docker image prune

# Remove stopped containers.
docker container prune

# Remove unused volumes
docker volume prune

# Remove unused networks
docker network prune

# Command to run all prunes:
docker system prune

Ben öneriyoruz değil kullanarak alışmak docker system prunekomutu. Kullanıcıların yanlışlıkla kastetmedikleri şeyleri kaldıracağını sanıyorum. Şahsen ben esas olarak docker image pruneve docker container prunekomutlarını kullanacağım .


4
kullanılmayan ağları budamak istemiyor musunuz? tüm kapsayıcılar durdurulursa ve bu ağları silersem, kapsayıcıları başlatırsam nasıl çalışırlar. Docker çalıştırmasıyla birlikte ağlar oluşturuluyor mu?
17'de

@meffect Ben tamamen katılıyorum ve tanrı nokta ağ budama bırakmıştı. Bunu dahil ettim ve sonunda docker system prunetek tek kuru erik kullanmayı tavsiye etmem gerektiğini belirten bir parça ekledim .
Programcı

15

Şimdiye kadar (Docker sürüm 1.12) çalışan tüm kapsayıcıları silmek için aşağıdaki komutu kullanıyoruz. Ayrıca, birimleri silmek istiyorsak, bunu aşağıdaki komuttaki ilgili -v etiketini kullanarak el ile yapabiliriz.

Tüm Çıkılan Kapları Sil

docker rm $(docker ps -q -f status=exited)

Tüm Durdurulmuş Kapsayıcıları Sil

docker rm $(docker ps -a -q)

Çalışan ve Durdurulan Tüm Kapları Sil

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

Herhangi bir kriter olmaksızın tüm kapları çıkarın

docker container rm $(docker container ps -aq)

Ancak, 1.13 ve sonraki sürümlerde, tam sistem ve temizleme için, aşağıdaki komutu doğrudan kullanabiliriz:

docker system prune

Kullanılmayan tüm kaplar, resimler, ağlar ve birimler silinir. Bunu, ayrı bileşenleri temizleyen aşağıdaki komutları kullanarak da yapabiliriz:

docker container prune
docker image prune
docker network prune
docker volume prune

14

Bu benim için çalıştı:

docker rmi $(docker images | grep "^<none>" | awk "{print $3}")

13

Aşağıdaki komut 48 saatten eski görüntüleri siler.

$ docker image prune --all --filter until=48h

1
Filtreleri kullanmak, belirli bir sürümden önce her sürümü listelemek için de kullanılabilir: docker image ls --all --filter reference=monolito --filter before=monolito:0.1.8ardından silmek için bir rmi komutu uygulayın. docker rmi $(docker image ls -q --all --filter reference=monolito --filter before=monolito:0.1.8)
rodvlopes

9

Son zamanlarda sunucularımdan birinde bunu çözmek için bir komut dosyası yazdım:

#!/bin/bash

# Remove all the dangling images
DANGLING_IMAGES=$(docker images -qf "dangling=true")
if [[ -n $DANGLING_IMAGES ]]; then
    docker rmi "$DANGLING_IMAGES"
fi

# 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

8

İşte Docker görüntülerini temizlemek ve alanı geri kazanmak için bir komut dosyası.

#!/bin/bash -x
## Removing stopped container
docker ps -a | grep Exited | awk '{print $1}' | xargs docker rm

## If you do not want to remove all container you can have filter for days and weeks old like below
#docker ps -a | grep Exited | grep "days ago" | awk '{print $1}' | xargs docker rm
#docker ps -a | grep Exited | grep "weeks ago" | awk '{print $1}' | xargs docker rm

## Removing Dangling images
## There are the layers images which are being created during building a Docker image. This is a great way to recover the spaces used by old and unused layers.

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

## Removing images of perticular pattern For example
## Here I am removing images which has a SNAPSHOT with it.

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

## Removing weeks old images

docker images | grep "weeks ago" | awk '{print $3}' | xargs docker rmi

## Similarly you can remove days, months old images too.

Orijinal komut dosyası

https://github.com/vishalvsh1/docker-image-cleanup

Docker genellikle görüntü oluşturma ve katmanlarla ilgili tüm geçici dosyaları

/ Var / lib / docker

Bu yol sistem için yereldir, genellikle THE / kök bölümünde, "/" .

Daha büyük bir disk alanı bağlayabilir ve içeriğini /var/lib/dockeryeni bağlama konumuna taşıyabilir ve sembolik bir bağlantı oluşturabilirsiniz.

Bu şekilde, Docker görüntüleri yer kaplasa bile, başka bir montaj konumu kullanacağından sisteminizi etkilemez.

Orijinal yayın: Yerel diskteki Docker görüntülerini yönetme


6

Bu komutu kullanıyorum:

export BEFORE_DATETIME=$(date --date='10 weeks ago' +"%Y-%m-%dT%H:%M:%S.%NZ")
docker images -q | while read IMAGE_ID; do
    export IMAGE_CTIME=$(docker inspect --format='{{.Created}}' --type=image ${IMAGE_ID})
    if [[ "${BEFORE_DATETIME}" > "${IMAGE_CTIME}" ]]; then
        echo "Removing ${IMAGE_ID}, ${BEFORE_DATETIME} is earlier then ${IMAGE_CTIME}"
        docker rmi -f ${IMAGE_ID};
    fi;
done

Bu, oluşturma süresi 10 haftadan daha uzun olan tüm resimleri kaldıracaktır.


Sanırım takas ettiniz IMAGE_CTIMEve BEFORE_DATETIMEo echokomutta
Udo G

5

X ay önce çekilen resimleri kaldırmak istiyorsanız, üç ay önce oluşturulan resimleri kaldıran aşağıdaki örneği deneyebilirsiniz:

three_months_old_images=`docker images | grep -vi "<none>" | tr -s ' ' | cut -d" " -f3,4,5,6 | grep "3 months ago" | cut -d" " -f1`
docker rmi $three_months_old_images

1
Bu doğru değil. Bu , 3 ay önce çekilen görüntüleri değil, 3 ay önce oluşturulan görüntüleri kaldırır (uzak bir kaynaktan çekerseniz, zaten 3 aylık olabilirler).
Andrew Ferrier

Bu, farklı kriterler temelinde daha fazla filtre oluşturmama yardımcı oldu
david.sansay


3

docker system prune -a

(Komutu onaylamanız istenir. -fNe yaptığınızı biliyorsanız, zorla çalıştırmayı kullanın .)


5
Bu tehlikelidir , docker system pruneadlandırılmış birimlerin bile kaldırılmasıyla ilgili diğer yorumlara bakın -a.
RichVel

3

@VonC zaten çok güzel bir cevap verdi, ancak burada bütünlük için kullandığım küçük bir komut dosyası --- ve ayrıca bazı Dorand işlemlerini nükle eden bazılarınız varsa:

#!/bin/bash

imgs=$(docker images | awk '/<none>/ { print $3 }')
if [ "${imgs}" != "" ]; then
   echo docker rmi ${imgs}
   docker rmi ${imgs}
else
   echo "No images to remove"
fi

procs=$(docker ps -a -q --no-trunc)
if [ "${procs}" != "" ]; then
   echo docker rm ${procs}
   docker rm ${procs}
else
   echo "No processes to purge"
fi

Harika çalışıyor ama yine de alabilirsiniz Error response from daemon: You cannot remove a running container. Eklenen docker kill $(docker ps -q)önce satır 3 adrese
Vincent

Neden $(docker images -q)yerine kullanmıyorsunuz $(docker images | awk '/<none>/ { print $3 }')?
SeF

1
@SeF: Eğer yaparsam docker images -qbir resim kimlikleri vektörü alırım, başka bir şey yok. Yaptığım şeyi yaparsam daha fazlasını elde ederim - <none>burada yaptığım gibi filtrelememe izin verin . Mantıklı?
Dirk Eddelbuettel

2

Kapsayıcı çalışmayan etiketli görüntüleri kaldırmak için küçük bir komut dosyası kullanmanız gerekir:

#!/bin/bash

# remove not running containers
docker rm $(docker ps -f "status=exited" -q)

declare -A used_images

# collect images which has running container
for image in $(docker ps | awk 'NR>1 {print $2;}'); do
    id=$(docker inspect --format="{{.Id}}" $image);
    used_images[$id]=$image;
done

# loop over images, delete those without a container
for id in $(docker images --no-trunc -q); do
    if [ -z ${used_images[$id]} ]; then
        echo "images is NOT in use: $id"
        docker rmi $id
    else
        echo "images is in use:     ${used_images[$id]}"
    fi
done

2

Eski kapları haftalar önce çıkarın.

docker rm $(docker ps -a | grep "weeks" | awk '{ print $1; }')

Eski resimleri haftalar önce kaldırın. Dikkatli ol. Bu, haftalar önce oluşturulan ancak yeni görüntülerinizin kullanıyor olabileceği temel resimleri kaldıracaktır.

docker rmi $(docker images | grep 'weeks' | awk '{ print $3; }')


2

Etiketli bir görüntü nasıl kaldırılır

  1. docker rmi ilk etiketi

  2. docker rmi görüntü.

    # bir docker rmi çağrısında yapılabilir örneğin: # docker rmi <repo: tag> <imageid>

(Bu, Kasım 2016, Docker sürüm 1.12.2'de çalışır)

Örneğin

$ docker images 
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
usrxx/the-application   16112805            011fd5bf45a2        12 hours ago        5.753 GB
usryy/the-application   vx.xx.xx            5af809583b9c        3 days ago          5.743 GB
usrzz/the-application   vx.xx.xx            eef00ce9b81f        10 days ago         5.747 GB
usrAA/the-application   vx.xx.xx            422ba91c71bb        3 weeks ago         5.722 GB
usrBB/the-application   v1.00.18            a877aec95006        3 months ago        5.589 GB

$ docker rmi usrxx/the-application:16112805 && docker rmi 011fd5bf45a2
$ docker rmi usryy/the-application:vx.xx.xx && docker rmi 5af809583b9c
$ docker rmi usrzz/the-application:vx.xx.xx eef00ce9b81f
$ docker rmi usrAA/the-application:vx.xx.xx 422ba91c71bb
$ docker rmi usrBB/the-application:v1.00.18 a877aec95006

Örneğin, Scripted 2 haftadan eski olanları kaldırın.

IMAGESINFO=$(docker images --no-trunc --format '{{.ID}} {{.Repository}} {{.Tag}} {{.CreatedSince}}' |grep -E " (weeks|months|years)")
TAGS=$(echo "$IMAGESINFO" | awk '{ print $2 ":" $3 }' )
IDS=$(echo "$IMAGESINFO" | awk '{ print $1 }' )
echo remove old images TAGS=$TAGS IDS=$IDS
for t in $TAGS; do docker rmi $t; done
for i in $IDS; do docker rmi $i; done

2
docker rm $(docker ps -faq)
docker rmi $(docker ps -faq)

-f kuvvet

- hepsi

-q modunda


1
docker rm `docker ps -aq`

veya

docker rm $(docker ps -q -f status=exited)

3
Bence bu cevap tehlikeli çünkü bu komutlar kapları kaldırıyor. İlk olarak OP konteynırları değil görüntüleri nasıl kaldıracağını soruyordu. Ve daha da önemlisi, bu komutlar, insanlar kapsayıcılarda bazı değerli verilere sahip olabileceğinden veri kaybına neden olabilir.
u.unver34

Bu komutları üretim sunucusuna uygulamanın olası istenmeyen sonuçlarını açıklamalısınız.
Daniel

bu, görüntüleri değil kapları kaldırır.
SeF

1

Ara sıra, alan herhangi bir görüntüye veya mevcut kapsayıcıya ayrılmasa bile, Docker'ın disk alanı tahsis edeceği ve kullanmaya devam edeceği sorunlarla karşılaştım. Bu sorunu yanlışlıkla oluşturmamın en son yolu RHEL 7.1'de "docker" yerine "docker-engine" centos derlemesini kullanmaktı. Olan şey bazen konteyner temizlemelerinin başarıyla tamamlanamaması ve daha sonra alanın tekrar kullanılmamasıdır. / Olarak tahsis ettiğim 80GB sürücü / var / lib / docker dosyalarıyla doldurulduğunda, sorunu çözmek için yaratıcı bir yol bulmak zorunda kaldım.

İşte ortaya çıkardığım şey. Disk dolu hatasını ilk gideren:

  1. Bağlantı istasyonunu durdur: systemctl bağlantı istasyonunu durdur
  2. Say / mnt / docker olarak monte edilen yeni bir sürücü atandı.
  3. / Var / lib / docker içindeki tüm dosyaları / mnt / docker klasörüne taşıyın. Komutu kullandım: rsync -aPHSx --remove-source-files / var / lib / docker / / mnt / docker /
  4. Yeni sürücüyü / var / lib / docker'a takın.

Bu noktada artık disk dolu hatası almadım, ancak hala çok fazla alan harcıyordum. Sonraki adımlar bununla ilgilenmektir.

  1. Başlangıç ​​Docker: systemctl başlangıç ​​docker

  2. Tüm görüntüleri kaydedin: docker save $ (docker görüntüleri | sed -e '/ ^ / d' -e '/ ^ REPOSITORY / d' -e 's, [] [] ,:,' -e 's, [ ]. ,, ')> /root/docker.img

  3. Bağlantı istasyonunu kaldırın.

  4. / Var / lib / docker'daki her şeyi sil: rm -rf / var / lib / docker / [cdintv] *

  5. Bağlantı istasyonunu yeniden yükle

  6. Bağlantı istasyonunu etkinleştir: systemctl bağlantı istasyonunu etkinleştir

  7. Başlangıç ​​docker: systemctl başlangıç ​​docker

  8. Görüntüleri geri yükle: docker load </root/docker.img

  9. Çalıştırmanız gereken kalıcı kapları başlatın.

Bu, disk kullanımımı docker için 67 GB'dan docker için 6 GB'a düşürdü.

Bunu günlük kullanım için tavsiye etmiyorum. Ancak, docker'ın yazılım hatalarına veya beklenmedik yeniden başlatmalara karşı kullanılan disk alanını izini kaybettiğinde çalıştırmak yararlıdır.


1

Çıkarılan kapları otomatik olarak / periyodik olarak temizlemek ve çalışan bir kap tarafından kullanılmayan görüntüleri ve birimleri kaldırmak isterseniz görüntüyü indirebilirsiniz meltwater/docker-cleanup.

Sadece koş:

docker run -d -v /var/run/docker.sock:/var/run/docker.sock:rw  -v /var/lib/docker:/var/lib/docker:rw --restart=unless-stopped meltwater/docker-cleanup:latest

Varsayılan olarak her 30 dakikada bir çalışır. Ancak gecikme süresini saniye cinsinden bu bayrağı kullanarak ayarlayabilirsiniz (DELAY_TIME = 1800 seçenek).

Daha fazla detay: https://github.com/meltwater/docker-cleanup/blob/master/README.md


1

Bu budanmış görüntüleri kendiniz oluşturursanız (diğer bazı eski temel görüntülerden) docker image prune, komut künt olduğundan ve en son görüntüleriniz için gereken tüm bağımlılıkları da kaldırmaya çalışacağından lütfen yukarıdaki kabul edilen çözümlere dikkat edin . muhtemelen yeniden adlandırıldı docker image*s* prune).

Docker görüntü oluşturma boru hatları için geldiğim çözüm (günlük yapıların ve etiketlerin olduğu = tarihler YYYYMMDDbiçimindedir):

# carefully narrow down the image to be deleted (to avoid removing useful static stuff like base images)
my_deleted_image=mirekphd/ml-cpu-py37-vsc-cust

# define the monitored image (tested for obsolescence), which will be usually the same as deleted one, unless deleting some very infrequently built image which requires a separate "clock"
monitored_image=mirekphd/ml-cache

# calculate the oldest acceptable tag (date)
date_week_ago=$(date -d "last week" '+%Y%m%d')

# get the IDs of obsolete tags of our deleted image
# note we use monitored_image to test for obsolescence
my_deleted_image_obsolete_tag_ids=$(docker images --filter="before=$monitored_image:$date_week_ago" | grep $my_deleted_image | awk '{print $3}')

# remove the obsolete tags of the deleted image
# (note it typically has to be forced using -f switch)
docker rmi -f $my_deleted_image_obsolete_tag_ids

0

Durdurulmuş kapları ve kullanılmayan (sarkan) görüntüleri temizlemek için kullanabileceğiniz serçe eklentisi docker-remove-dangling-images var:

$ sparrow plg run docker-remove-dangling-images

Hem Linux hem de Windows işletim sistemi için çalışır.


0

İlk olarak, koş docker images görüntülerin listesini görmek için ve IMAGE HASH ID'yi panoya kopyalayın.

Çalıştırmak docker rmi -f <Image>

Unutmayın seçeneği -fzorla silmektir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.