Sarkan görüntü nedir ve kullanılmayan görüntü nedir?


155

Docker görüntü budamasının docker belgelerinde aşağıdakileri yapmak için -a bayrağını kullanmak mümkündür

Sadece sarkan görüntüleri değil, kullanılmayan tüm görüntüleri kaldırın

ve sonra

Sarkan tüm görüntüleri kaldırın. -A belirtilirse, herhangi bir kapsayıcı tarafından başvurulmayan tüm görüntüleri de kaldırır.

Birisi bana sarkan görüntülerin ne olduğunu ve sarkan ve kullanılmayan görüntüler arasındaki farkın ne olduğunu açıklayabilir mi?


docker image prune (-a olmadan) tam olarak aynı şeyi yapıyor
herm

Jenkinlerde kullandığınızda başarısız olur, docker görüntü önbelleğine bağımlı olursak üretimde docker yedeklemesini kaybedeceğiz. pruneüretimde recomanded değil /
Jinna Balu

Yanıtlar:


154

Kullanılmayan bir görüntü, bir kaba atanmamış veya kullanılmamış demektir. Örneğin, çalışırken docker ps -a- mevcut ve şu anda çalışan tüm konteynerlerinizi listeler. Herhangi bir kap içinde kullanıldığı gösterilen resimler "kullanılmış resim" dir.

Öte yandan, sarkan bir görüntü sadece görüntünün yeni yapısını oluşturduğunuz anlamına gelir, ancak ona yeni bir ad verilmemiştir. Böylece eski görüntüler “sarkan görüntü” haline gelir. Bu eski resim, etiketsiz olan ve <none>çalıştırdığınızda adında " " görüntülenen resimlerdir docker images.

Çalışırken docker system prune -ahem kullanılmayan hem de sarkan görüntüleri kaldıracaktır. Bu nedenle, bir kapta kullanılan görüntüler, ister çıkmış ister şu anda çalışıyor olsun, etkilenmeyecektir.


Docker budama çalıştırılırken belgelere göre - sadece sarkan görüntüler kaldırılır. -a kullanılmayan görüntülerin de silinmesini sağlayacak mı? docs.docker.com/engine/reference/commandline/system_prune
herm


1
Çok ilginç. Böylece sarkan bir görüntü bir kap tarafından kullanılabilir. Not: Docker, bu etiketsiz görüntüleri kullanan kapsayıcılar varsa sizi uyarır.
herm

7
docker system prune --all --filter "until=24h"son görüntüleri de korur
Harry Moreno

1
Docs.docker.com/engine/reference/commandline/system_prune/… 'a göre docker system prune -adurdurulmuş kapsayıcıları da kaldırır. Bu yüzden sadece çıkan kaplarla ilişkili resimleri de kaldırmalı, değil mi?
lfk

41

Sarkan Görüntüleri temizlemenin en güvenli ve en kolay yolu

docker images --quiet --filter=dangling=true | xargs --no-run-if-empty docker rmi

Docker görüntüleri birden çok katmandan oluşur. Sarkan görüntüler, etiketli görüntülerle hiçbir ilişkisi olmayan katmanlardır. Artık bir amaca hizmet etmiyorlar ve disk alanı tüketmiyorlar.

Not: pruneÜretimde kullanılmamasını tavsiye ederim , çünkü docker system prune -akap tarafından referans verilmeyen tüm görüntüleri önceki sürümüne geri alamayacağımız kaldırır.

Filtre bayrağını ekleyerek görüntüleri sarkan listelemek için -fdeğeriyle dangling=trueiçin docker images.

Sarkan görüntüleri listele

docker images -f dangling=true

Sarkan Resimleri Kaldır

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

VEYA

docker images --quiet --filter=dangling=true | xargs --no-run-if-empty docker rmi

Sarkan şeyleri silmek için herhangi bir cron işi çalıştırdığımızda, işin başarılı bir şekilde çalıştığından emin olmak için yukarıdakileri kullanın. Jenkins gibi, eğer commad işiyle serbest stil işi yaparsak, makinede sarkan hiçbir şey olmasa bile asla başarısız olmaz.

Bu, sarkan görüntüleri temizlemenin ve disk alanımızı kullanım için geri almanın en güvenli ve en kolay yoludur.


2
docker görüntü budaması ne olacak? Dokümanlar şunları söylüyor: "Sarkan tüm resimleri kaldır. -A belirtilirse, herhangi bir kap tarafından referans verilmeyen tüm resimleri de kaldırır." docs.docker.com/engine/reference/commandline/image_prune/…
herm

2
@herm, başvurduğunuz sayfanın altından "Not: Kuru erik herhangi bir şeyi kaldırmadan önce sizden onay istenir, ancak potansiyel olarak kaldırılacakların bir listesi gösterilmez". Bu cevabın amacı, tüm sarkan görüntüleri budama ile körü körüne kaldırmak yerine, açıkça kaldırılmasını belirttiğiniz sarkan görüntülerin bir listesini alabileceğinizi düşünüyorum.
bzier

Adı ve etiketi hiçbiri docker imagesolarak bulunmayan görüntüler sarkar. Boyutlarını nasıl kontrol edebilirim? Ayrıca, adında ve etiketinde hiçbiri olmayan docker images -agörüntüler ara görüntülerdir. Silinebilirler ve boyutlarını nasıl kontrol edebilirler?
değişken

17

Bağlantı birimindeki görüntülere, genellikle görüntü kimliği olarak adlandırılan bir sha256 özeti gönderilir. Görüntünün docker ana bilgisayarında olması için ihtiyacınız olan tek şey bu özettir. Genellikle, bu özetlere işaret eden etiketlere sahip olursunuz, örn. Meşgul kutusu etiketi: sistemimdeki c30178c523 resim kimliğine en son geçerli noktalar ... Birden çok etiket aynı görüntüyü gösterebilir ve herhangi bir etiket farklı bir kimliği gösterecek şekilde değiştirilebilir; örneğin, meşgul kutusunun yeni bir kopyasını çektiğinizde: en son veya uygulama görüntünüzün yeni bir sürümünü oluşturduğunuzda.

Sarkan görüntüler, etiketi olmayan ve alt resmi olmayan (ör. Farklı bir sürümü kullanan eski bir görüntü FROM busybox:latest) olmayan, kendilerine işaret eden görüntülerdir. Daha önce kendilerine işaret eden bir etiketi olmuş olabilir ve daha sonra bu etiket değişmiş olabilir. Veya hiçbir zaman etiketleri olmayabilir (örneğin docker build, etiket seçeneği dahil edilmeden a'nın çıktısı ). Eski görüntü kimliğine başvuran kaplar hala çalışmadığı sürece bunların kaldırılması genellikle güvenlidir. Onları saklamanın temel nedeni, önbellek oluşturma amaçlıdır.

Ayrıca, şu anda kapsayıcılar (durdurulmuş kapsayıcılar dahil) tarafından kullanmadığınız görüntüleri indirmiş olabilirsiniz. Bunlar, sarkan görüntülerden tamamen farklıdır ve gelecekte kullanmayı planladığınız veya ihtiyacınız olduğunda başka bir kopya indirmeyi düşünmediğiniz sürece kaldırılması güvenli olabilir.


Bir liman işçisi inşa çalışırken (gelecekte sarkan görüntüler için katmanlar ve olası adaylar oluşturduğu süreç), liman işçisi görüntü budaması çalıştırırsam yeni bir pencerede, devam eden yapı herhangi bir şekilde etkiler mi?
değişkeni

@değişken bir yarış koşulu olabilir, ancak tipik olarak bir yapım aşaması için çalışan konteyner görüntünün kullanımdaki gibi tanımlanmasına neden olur. Olabilecek en kötü şey, kuru erik bir hata atar veya derleme yapar ve yeniden çalıştırmanız gerekir. Başarılı bir kuru erik, gelecekteki yapıların resimleri tekrar indirmesi gerekeceğinden bu yana oluşturmak için kullanmakta olduğunuz görüntüleri önlemek için kuru erik sınırlayıp sınırlayamayacağınıza bakarım.
BMitch

Ara görüntüler (çalıştırıldığında ad / etiketi olmayanlar docker images -a) da asılı görüntüler olarak adlandırılıyor mu? Docker görüntü budaması ile temizlenir mi?
değişkeni

Artık çevremde olanlarım yok (burada buildkit kullanarak), bu yüzden neler olduğunu görmek için kendinizi laboratuvar ortamında denemenizi tavsiye ederim.
BMitch

Bununla birlikte, etiketlenmemiş "görüntüleri" ara aşamalardan silmek, son etiketli görüntüyü silmediğiniz sürece, tüm katmanlar sonraki bir görüntüde yeniden kullanılır ve silinemez. Bunları silerseniz, yapı önbelleğinizi yok eder ve gelecekteki tüm görüntülerin daha fazla zaman almasına ve disk alanının depolanmasına neden olursunuz.
BMitch

5

Sarkan görüntüler, etiketlenmiş görüntülerle hiçbir ilişkisi olmayan katmanlardır. Artık bir amaca hizmet etmiyorlar ve disk alanı tüketmiyorlar.

Kullanılmayan görüntü, bir kapta atanmamış veya kullanılmamış bir görüntüdür.

Sarkan görüntüleri listele

docker images -f dangling=true

3

sarkan görüntüler etiketsiz görüntülerdir. Aşağıdaki komut sarkan görüntülerin listesini verir.

docker images --filter "dangling=true"

docker image prune tüm sarkan görüntüleri siler.

Kullanılmayan görüntüler, etiketleri olan ancak şu anda kapsayıcı olarak kullanılmayan görüntülerdir. İleride buna ihtiyacınız olabilir veya olmayabilir.

docker image prune -a tüm sarkan ve kullanılmayan görüntüleri sil.

Genellikle bir süre öncesine kadar kullanılmayan tüm görüntüleri kaldırmak istemezsiniz. Bu nedenle bir filtreyle çıkarmak daha iyidir.

docker image prune -f --filter "until=6h"


1) docker image prune -a -f --filter "until=6h"Sarkan görüntüleri de siler mi?
değişkeni

2) Son komutunuzda docker image prune -f --filter "until=6h"- -a olmadığından - bahsettiğinizde kullanılmayan görüntüleri nasıl kaldıracaksınız?
değişkeni

0

Burada sallanan görüntüleri, andyneff iznini kaldırmak için yararlı komutlar (takma adlar) gördüm: https://forums.docker.com/t/how-to-delete-cache/5753 :

alias docker_clean_images='docker rmi $(docker images -a --filter=dangling=true -q)' 
alias docker_clean_ps='docker rm $(docker ps --filter=status=exited --filter=status=created -q)' 

Birincisi sarkan tüm görüntüleri temizler. Bu, birden fazla derlemeden kalan ara görüntüleri kaldırmak için kullanışlıdır. İkincisi, durdurulan kapları çıkarmak içindir. Bunlar rutin bakım için kullandığım takma adlar

TÜM önbelleğinizi kaldırmak istiyorsanız, önce tüm kapların durdurulduğundan ve kaldırıldığından emin olmalısınız, çünkü kap tarafından kullanılan bir görüntüyü kaldıramazsınız. Yani benzer bir şey

docker kill $(docker ps -q) docker_clean_ps docker rmi $(docker images
-a -q)

Bu, önbelleğinizdeki tüm resimleri öldürür ve kaldırır.


0

Görüntüler ekran görüntüsünde "hiçbiri" adı sarkan görüntülerdir. Sarkan bir görüntü, görüntünün yeni yapısını oluşturduğunuz anlamına gelir, ancak ona yeni bir ad verilmemiştir. Böylece eski görüntüler “sarkan görüntü” haline gelir. Bu eski resim etiketsiz olanlardır ve liman işçiliği resimlerini çalıştırdığınızda adında "" görüntülenir.

docker system prune -a, kullanılmayan ve sarkan resimleri kaldıracaktır. Bu nedenle, bir kapta kullanılan veya çıkmış veya şu anda çalışıyor olan görüntüler etkilenmeyecektir.

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.