Docker ile, daha genel olarak da container teknolojisi ile çalışanlardan en çok aldığımız sorulardan biri, biriken eski imajların sunucular üzerindeki disk alanını doldurması ve sistemin çalışamaz hale gelmesi/bazı fonksiyonlarını yitirmesi. Bu da hem genelde takibi iyi yapılmadığı için beklenmedik zamanlarda ortaya çıkıyor hem de hızlı bir çözüm bulunmayınca elle imaj silmeye başlamak istendiği gibi sonuçlanmayabiliyor. Bu yazıda, sistemde ismi </strong> olarak gözüken imajları nasıl silebileceğimize bakacağız. </p> ## Adı Olmayan (Dangling) İmajlar Nedir? Neden Oluşur?

Docker’da imajları görüntülemek için docker images veya docker image ls komutlarını sıkça çalıştırıyorsunuzdur. Bazen bu komutların çıktısında, adı </strong> olan imajlara denk geliyoruz. </p>

docker none yazılı imajlar
Docker’da yazılı imajlar </figcaption></figure>

Bu imajların oluşması için çok basit bir senaryo mevcut. Bir Dockerfile’ı istediğiniz bir imaj ismi ve etiketiyle build edin. Sonra projede bir değişiklik yaparak tekrar build edin. Sonrasında bir imajınız daha olacak. </p>

Daha önceden var olan bir imaj ile aynı isim/etikete sahip yeni bir imaj geldiğinde, eskisinin isim:etiket ikilisi artık yenisine geçmiş oluyor. Bu durumda eski imajın isminin yerinde </strong> görüyoruz. Benzer şekilde etiket yani TAG sütununda da </strong> görmeye başlıyoruz. </p>

Dolayısıyla, bu imajların olması çok doğal ve ters giden bir şeyler olduğu anlamına gelmiyor. Peki neden bu bir sorun haline geliyor? Bu imajlar kullanılmasa bile diskte yer tutmaya devam ediyor. Bu da zaman içerisinde build sayısı arttıkça diskin dolmasına sebep olabiliyor.

Bu imajlara dangling imaj deniyor. Biz de yazının devamında bu ismi de kullanacağız.

## Sadece Yazılı, Yani Dangling İmajlar Nasıl Listelenir?

Docker, bize imaj listelemede özel bir parametre veriyor. Bu parametreyi, -f‘e söylüyoruz:

docker image ls -f dangling=true

Bu komutun sonrasında şöyle bir çıktı olmalı:

docker dangling imajlar
Docker’da dangling imajlar
## Yazılı İmajlar Nasıl Temizlenir?

İmajları listelediğimize göre, artık bunları nasıl sileceğimize bakabiliriz. Sadece ID’lerini alarak başlayalım:

docker image ls -f dangling=true -q

Şöyle bir çıktı almamız gerekiyor:

Silmek için klasik bash subshell özelliğinden faydalanabiliriz (İmajlar silinecek, dikkatli/emin olmakta fayda var):

docker image rm $(docker image ls -f dangling=true -q)

Komut, çıktı olarak imajların katmanlarını verecektir:

O an silinmek istenen imajdan açılmış bir container varsa, o imaj silinmeyecek ve şöyle bir uyarı verecektir:

Error response from daemon: conflict: unable to delete 3a2dc323c451 (must be forced) - image is being used by stopped container 89748cb2893c

İlgili containerları da silip, bu imajları da silmek isterseniz -f parametresi ekleyebilirsiniz.