Ana içeriğe geç

Docker Prune: Uygulamalı Örneklerle Eksiksiz Kılavuz

Kullanılmayan container’ları, imajları, volume’leri ve ağları tek bir kabuk komutuyla güvenle kaldırın. Kullanılmayan Docker kaynaklarını temizleyerek sisteminizi derli toplu tutun ve disk alanı geri kazanın.
· 11 dk. oku

Yapay Zeka ile Keşfedin

Günlük olarak Docker ile çalışıyorsanız, disk alanını ne kadar hızlı tüketebildiğini biliyorsunuz.  

Zamanla sisteminizde kullanılmayan imajlar, container’lar, volume’ler ve ağlar birikir. Bunların çoğu atıl halde bekler, değerli depolama alanını kaplar ve mevcut projenizde çalışmanızı engelleyebilir. Neyse ki Docker, gereksiz kaynakları kolayca kaldıran yerleşik temizlik komutları sağlar.  

Bu temizlik komutları docker prune ailesinin parçasıdır ve bugün bunların tümünü öğreneceksiniz. Disk alanını boşaltmak için hızla başvuracağınız çözüm haline gelecekler.  

Pratik örneklere dalmadan önce kısa bir genel bakışla başlayalım.  

Docker’da yeni misiniz? Hızlıca yetişmek için veri profesyonellerine yönelik sıfırdan Docker öğrenme rehberimize göz atın.  

Docker Prune nedir?  

"Docker Prune" terimi genellikle kullanılmayan ve gereksiz Docker kaynaklarını kaldırmanıza yardımcı olmak için tasarlanmış bir dizi komutu ifade eder.  

Zamanla, özellikle birden çok projede çalışıyorsanız, sayısız imaj oluşturur, container çalıştırır ve volume ile ağlar kurarsınız. Tüm bunlar sisteminizde birikir ve önemli miktarda disk alanı kaplar. docker prune’un amacı bu karmaşayı temizlemek ve depolamayı geri kazanmaktır.  

Bununla birlikte, docker prune göründüğünden daha fazlasıdır.  

Yalnızca çalıştırabileceğiniz tek bir komuttan ibaret değildir. Aslında öyle de yapabilirsiniz, ancak bazen neyin kaldırılacağı üzerinde ince ayarlı bir kontrol gerekebilir. İşte bu noktada bu makale devreye giriyor. Yalnızca silmeyi amaçladıklarınızı sildiğinizden emin olarak budamayı etkili biçimde nasıl yöneteceğinizi ve önemli verileri yanlışlıkla kaldırmamak için güvenli bir ortamda nasıl pratik yapacağınızı gösterecek.  

Ayrıca, prune komutlarının yalnızca etkin olarak kullanılmayan kaynakları kaldırdığını unutmamak gerekir. Çalışan container’lar tarafından başvurulan imajlar, volume’ler ve ağlar silinmez. Başka bir deyişle, budama aktif iş yüklerine müdahale etmez.  

Bir sonraki bölümde, farklı budama komut türlerini adım adım ele alacak ve iş akışınıza nasıl uyduklarını açıklayacağız.  

Docker’ı özgeçmişinize veya portföyünüze eklemek ister misiniz? Bu 10 Docker proje fikri sizi işe hazır hale getirecek.

Uygulamalı Örneklerle Tüm Docker Prune Komutları  

Docker, kullanılmayan kaynakları tek tek ya da topluca temizlemenizi sağlayan birden fazla prune komutu sunar. Bu bölümde, onları hem teoride hem de pratik örneklerle öğreneceksiniz.  

docker system prune  

Bu, disk alanını geri kazanmak için en kapsamlı komuttur. Tek bir işlemde tüm kullanılmayan container’ları, ağları, imajları ve derleme önbelleğini kaldırır.  

Tek bir komutla hızlıca disk alanı boşaltmak istiyorsanız, kullanmanız gereken komut budur.  

docker system prune komutuna seçenekler geçebilirsiniz:  

  • -a veya --all, yalnızca sarkan (etiketsiz veya herhangi bir container tarafından referans verilmeyen) imajlar yerine tüm kullanılmayan imajları kaldırır.  
  • --filter, filtre değerleri belirtmenize olanak tanır.  
  • -f veya --force, onay istemini atlar.  
  • --volumes, container’lar, ağlar, imajlar ve derleme önbelleğinin yanı sıra anonim volume’leri de budar.  

Varsayılan olarak, docker system prune potansiyel olarak yıkıcı bir işlem olduğundan sizden onay ister:  

Docker system prune onay istemi

Görsel 1 - Docker system prune onay istemi

İstemi atlamak ve tek bir komutla tüm kullanılmayan imajları, container’ları, ağları ve volume’leri kaldırmak için şunu çalıştırın:  

docker system prune -a -f --volumes

Tek bir docker system prune komutuyla her şeyi kaldırın

Görsel 2 - Tek bir docker system prune komutuyla her şeyi kaldırın

Peki ya daha ayrıntılı kontrole ihtiyacınız varsa? Şimdi onu ele alalım.

docker container prune

Kısaca, bu komut durdurulmuş tüm container’ları kaldırır.

Durdurulmuş container’lar manuel olarak kaldırılana kadar sisteminizde kalır. Disk alanı kaplayabilirler ve Docker Desktop Dashboard gibi bir araç kullanmadığınız sürece fark edilmeleri zor olabilir.

docker system prune gibi, bu komut da seçenekleri destekler:

  • --filter, hangi container’ların kaldırılacağını kontrol etmek için anahtar-değer çiftleri belirtmenize olanak tanır.
  • -f veya --force, onay istemini atlar.

Çalışmayan container’ların bir listesi aşağıdadır:

Çalışmayan container listesi

Görsel 3 - Çalışmayan container listesi

code-server’ı (ve diğer durdurulmuş container’ları) kaldırmak için şunu çalıştırın:

docker container prune -f

Bu komut sizden onay istemeyecek ve saniyeler içinde şu tür bir çıktı göreceksiniz:

Container budama çıktı mesajı

Görsel 4 - Container budama çıktı mesajı

Ve işte bu kadar, artık durdurulmuş container kalmadı:

Çalışmayan container listesi (2)

Görsel 5 - Çalışmayan container listesi (2)

Şimdi, kullanılmayan imajlarla ilgilenelim.

docker image prune

Önceki komuta benzer şekilde, docker image prune kullanılmayan imajları kaldırır.

Varsayılan olarak yalnızca sarkan imajları kaldırır—etiketsiz ve herhangi bir container ile ilişkili olmayan imajlar. Yalnızca sarkanlar değil, tüm kullanılmayan imajları kaldırmak için isteğe bağlı bir bayrak kullanabilirsiniz.

Mevcut seçeneklerin listesi şudur

  • -a veya --all, yalnızca sarkanlar yerine tüm kullanılmayan imajları kaldırır.
  • --filter, hangi imajların kaldırılacağını kontrol etmek için anahtar-değer çiftleri belirtmenize olanak tanır.
  • -f veya --force, onay istemini atlar.

Şimdi, bunu uygulamada görelim!

Sistemde şu anda bulunan imajların listesi:

Docker imajlarının listesi

Görsel 6 - Docker imajlarının listesi

Hepsini tek bir komutla kaldırmak için şunu çalıştırın:

docker image prune -a -f

Terminalde buna benzer bir çıktı göreceksiniz:

İmaj budama çıktı mesajı

Görsel 7 - İmaj budama çıktı mesajı

Sonrasında, Docker Desktop’ta imaj kalmaz:

Docker imajlarının listesi (2)

Görsel 8 - Docker imajlarının listesi (2)

Sırada, kullanılmayan volume’lerle ilgilenelim.

docker volume prune

Adından da anlaşılacağı gibi, docker volume prune komutu kullanılmayan tüm yerel volume’leri kaldırır. Başka bir deyişle, herhangi bir container tarafından referans verilmeyen volume’leri siler.

Varsayılan olarak komut yalnızca anonim volume’leri — bir container başlatıldığında Docker tarafından oluşturulan isimsiz volume’leri — kaldırır. Özellikle adlandırılmış volume’leri kaldırmak için ek bir seçenek geçirmeniz gerekir.

Kullanabileceğiniz seçenekler şunlardır:

  • -a veya --all, yalnızca anonim olanlar yerine tüm kullanılmayan volume’leri kaldırır.
  • --filter, hangi volume’lerin kaldırılacağını kontrol etmek için anahtar-değer çiftleri belirtmenize olanak tanır.
  • -f veya --force, onay istemini atlar.

Sistemimizde, bir docker-compose.yml dosyasından oluşturulmuş tek bir kullanıcı-oluşturumlu volume var:

Docker volume’lerinin listesi

Görsel 9 - Docker volume’lerinin listesi

Aşağıdaki komut tüm yerel volume’leri kaldırır:

docker volume prune -a -f

Çalıştırdıktan sonra buna benzer bir çıktı göreceksiniz:

Volume budama çıktı mesajı

Görsel 10 - Volume budama çıktı mesajı

Artık hiç volume kalmadı:

Docker volume’lerinin listesi (2)

Görsel 11 - Docker volume’lerinin listesi (2)

Son olarak, kullanılmayan ağların nasıl silineceğine bakalım.

docker network prune

Docker container’ları birbirleriyle iletişim kurarken genellikle kullanıcı tanımlı ağları kullanır. Ancak bu container’lar kaldırıldıktan sonra ağları genellikle sisteminizde kalır.

docker network prune komutu, artık hiçbir container tarafından kullanılmayan ağları kaldırır.

Diğer prune komutlarında olduğu gibi, birkaç seçenek içerir:

  • --filter, hangi ağların kaldırılacağını kontrol etmek için anahtar-değer çiftleri belirtmenize olanak tanır.
  • -f veya --force, onay istemini atlar.

İmajlar, container’lar veya volume’lerin aksine, ağları Docker Desktop üzerinden görsel olarak inceleyemezsiniz, bu nedenle komut satırından çalışmanız gerekir. Mevcut ağların listesi şöyledir:

Docker ağlarının listesi

Görsel 12 - Docker ağlarının listesi

Varsayılan Docker kurulumuyla ilişkili olmayan tüm ağları kaldırmak için şunu çalıştırın:

docker network prune -a -f

Komutu çalıştırdıktan sonra şu tür bir çıktı göreceksiniz:

Ağ budama çıktı mesajı

Görsel 13 - Ağ budama çıktı mesajı

Önceden çalışan container’larla ilişkili ağların tümü artık kaldırıldı:

Docker ağlarının listesi

Görsel 14 - Docker ağlarının listesi

Ancak kalan üç ağın, Docker’ın düzgün çalışması için gerekli olduğunu ve kaldırılamayacağını unutmayın.

Ve böylece docker prune komutlarının temel kullanımını tamamladık! Sırada, bu komutları güvenle kullanmak ve üretim ile hassas ortamlarda en iyi uygulamalar gibi ileri konular var.

Docker Prune’u Güvenle Kullanma  

docker prune komutları disk alanını hızla geri kazanmaya yardımcı olur, ancak özellikle üretim ortamlarında dikkatle kullanılmalıdır.  

Önemli container’ların, imajların veya volume’lerin yanlışlıkla silinmesi veri kaybına ve kritik iş akışlarının kesintiye uğramasına yol açabilir. Bunu önlemek için, herhangi bir prune komutunu çalıştırmadan önce neyin kaldırılacağını anlamak en iyisidir.  

Bu bölümde, docker prune’u güvenle çalıştırırken alınması gereken temel önlemler açıklanmaktadır.  

Nelerin kaldırılacağını anlamak  

prune komutları, yalnızca etkin olarak kullanılmayan kaynakları kaldıracak şekilde tasarlanmıştır.  

Örneğin, docker image prune yalnızca sarkan imajları siler ve docker volume prune yalnızca hiçbir container’a bağlı olmayan volume’leri kaldırır. Ancak -a -f gibi seçenekler eklemek, onay istemeden tüm imajları veya volume’leri kaldıracaktır.  

Ayrıca, karmaşık ortamlarda bağımlılıklar gözden kaçabilir, bu nedenle budama öncesinde iki kez kontrol etmek her zaman iyi bir uygulamadır.  

prune komutlarından herhangi birini çalıştırmadan önce, sisteminizi inceleyerek hangi kaynakların şu anda kullanımda olduğunu görün. Bunu yapmanın birkaç yolu vardır ve bu bölümde en yaygın olanlarını inceleyeceğiz.  

Şu komutu kullanarak durdurulmuş olanlar dahil tüm container’ları görüntüleyin:  

docker ps -a

Buna benzer bir çıktı görmelisiniz:

Tüm Docker container’larının listesi

Görsel 15 - Tüm Docker container’larının listesi

Benzer şekilde, kullanılmayanlar dahil tüm imajları listelemek için bu komutu kullanın:  

docker images

Çıktı, yukarıdakine benzer bir yapıda olacaktır:  

Tüm Docker imajlarının listesi

Görsel 16 - Tüm Docker imajlarının listesi

Volume’leri kontrol etmek için şu komutu çalıştırarak tüm volume’leri listeleyin:  

docker volume ls

Tüm Docker volume’lerinin listesi

Görsel 17 - Tüm Docker volume’lerinin listesi

Bu çıktıları dikkatle inceleyerek kritik kaynakların yanlışlıkla silinmeyeceğinden emin olun.  

Güvenlik için dry run  

Ne yazık ki Docker, yıllar önce talep edilmiş olmasına rağmen budama komutlarının dry run’ı için yerleşik bir seçenek sunmuyor.  

Bu nedenle, bir prune komutu çalıştırmadan önce önceki bölümde listelenen komutları kullanarak kaynakları manuel olarak incelemeniz gerekir.  

Veri kalıcılığının kritik olduğu hassas bir ortamda çalışıyorsanız, volume’leri etkileyen budama komutlarını çalıştırmadan önce her zaman yedek alın.  

Elbette bunlar sadece önleyici tedbirlerdir, ancak yakında bir dry-run seçeneğinin hayata geçirildiğini görmeyi umuyoruz.

Docker Prune için En İyi Uygulamalar  

Docker ortamınızı gereksiz kalıntılardan arındırmak için prune komutlarını düzenli olarak çalıştırmak—hatta otomatikleştirmek—önemlidir.  

Bu bölüm, üretim ortamlarında docker prune komutlarını çalıştırmaya yönelik en iyi uygulamalar üzerinden sizi yönlendirecek.  

docker prune’u düzenli kullanın  

Zamanla Docker, kullanılmayan imajlar, durdurulmuş container’lar ve gereksiz volume’ler biriktirir—bunların tümü önemli disk alanı tüketir.  

Budama komutlarını düzenli olarak çalıştırmak ortamınızı temiz tutar ve aşırı disk kullanımını önler. Bunları bakım programınızın bir parçası haline getirmelisiniz.  

Birkaç haftada bir iyi bir başlangıç noktasıdır, ancak kurulumunuz sık container oluşturma ve kaldırmayı içeriyorsa daha sık bir program düşünün.  

Üretimde temkinli olun  

Üretim ortamında yapılan her iş ekstra dikkat gerektirir ve Docker budaması da istisna değildir.  

Bir anlık dalgınlık kesintiye veya veri kaybına yol açabilir; bunun sorumlusu olmak istemezsiniz. Üretim ortamında docker prune komutlarını çalıştırmadan önce, önceki bölümde açıklandığı gibi her zaman docker ps -a, docker images ve docker volume ls ile sistem kaynaklarını inceleyin.  

Ek olarak, kapsayıcı docker system prune yerine belirli budama komutlarını kullanmak iyi bir fikirdir; istenmeyen silmelerden kurtulmak daha kolay olabilir.  

docker prune’u otomatikleştirin  

Bir diğer iyi uygulama, zamanlanmış görevler kullanarak docker prune komutlarını otomatikleştirerek temizlik çabalarını sadeleştirmektir.  

Linux’ta komutları düzenli aralıklarla çalıştırmak için bir cron görevi oluşturabilir, Windows’ta ise benzer otomasyon için Görev Zamanlayıcıyı kullanabilirsiniz. Bu, manuel müdahaleye gerek kalmadan düzenli bir sistemi korumaya yardımcı olur. Ancak, üretim ortamında otomatik budamanın kritik iş yüklerine müdahale etmediğinden emin olun.  

Örneğin, Linux’taki bu cron görevi, her pazar gece yarısında kapsamlı bir budama komutunu çalıştırır:

0 0 * * 0 docker system prune -a -f

Docker Prune Sorunlarını Giderme  

docker prune komutları disk alanını geri kazanmak için başvurulan çözümdür, ancak yeni imajları çekmek veya yeni container’ları çalıştırmak için yeterli alanı her zaman garanti etmeyebilirler.  

Ayrıca, önemli kaynakları yanlışlıkla kaldırabilirsiniz; bu nedenle kurtarma stratejilerini tartışmak kritik önemdedir.  

Bu bölümde her iki konu da ele alınacaktır.  

Disk alanı sorunlarıyla karşılaşmak  

Docker imajları büyük olabilir—yakın zamanda 13 GB’ı aşan bir imajımız vardı—ve daha da büyüklerinin olduğundan eminiz. Bu nedenle, docker prune çalıştırdıktan sonra bile sisteminizin disk alanı düşük kalabilir.  

İmajlar, container’lar ve volume’ler tarafından tam olarak ne kadar alan kullanıldığını görmek için şu komutu çalıştırın:  

docker system df

Docker tarafından kullanılan alan

Görsel 18 - Docker tarafından kullanılan alan

docker prune komutlarıyla disk alanı geri kazanırken, yalnızca sarkan veya anonim olanları değil tüm imajları, volume’leri veya container’ları kaldırmak için -a bayrağını ekleyin. Elbette bu yaklaşımın potansiyel sakıncalarını unutmayın.  

Disk alanı sorunu devam ederse, tek seçeneğiniz mevcut disk alanını artırmaktır.  

Yanlışlıkla kaldırmalardan kurtulma

Kurtarma, söylemesi yapmasından zordur—bu nedenle, gerçek komutu çalıştırmadan önce budamanın neyi kaldıracağını anlamanızı öneririz.  

Yine de, önemli container’ları, imajları veya volume’leri yanlışlıkla budadığınız bir durumda kalırsanız, neyin kaldırıldığını belirlemek için günlükleri kontrol etmekle başlayın.  

macOS’te bu, aşağıdaki iki komut çalıştırılarak yapılabilir (Windows ve Linux için seçenekler):  

pred='process matches ".*(ocker|vpnkit).*" || (process in {"taskgated-helper", "launchservicesd", "kernel"} && eventMessage contains[c] "docker")'
/usr/bin/log stream --style syslog --level=debug --color=always --predicate "$pred"

/usr/bin/log show --debug --info --style syslog --last 30m --predicate "$pred" >/tmp/logs.txt

Bu komutları çalıştırmak, Docker ile ilgili son 30 dakikalık günlükleri /tmp/logs.txt dosyasına kaydeder. Hangi container’ların veya imajların silindiğini belirlemek için bu günlükleri incelemelisiniz.  

 Silinen imajlar için bunları büyük olasılıkla Docker Hub gibi bir kayıttan yeniden çekebilirsiniz. Şu tür bir komut işinizi görecektir:  

docker pull <image_name>

 Silinen container’lar için kalıcı imajlara dayanıyorlarsa her zaman yeniden oluşturabilirsiniz:  

docker run --name <container_name> <image_name>

Alternatif olarak, mevcutsa yedeklerden geri yükleme yapabilirsiniz; bu, hem volume hem de container verilerini kurtarmak için kullanılabilir. Gelecekte, veri kaybını önlemek için volume anlık görüntü araçlarını kullanmayı düşünün.  

Ancak en iyi strateji, bir budama komutunu çalıştırmadan önce hangi kaynakların silineceğini incelemek ve yalnızca iş akışınızı etkilemeyeceğinden kesinlikle emin olduğunuzda devam etmektir.  

Docker Prune’u Özetlemek  

Sonuç olarak, docker prune komut ailesi disk alanını geri kazanmanın güçlü bir yoludur, ancak ihtiyaç duyduğunuz kaynakları yanlışlıkla silme ve veri kaybına yol açma riski taşır. Bu risk, her şeyi zorla kaldıran -a -f isteğe bağlı bayrakları kullanıldığında daha da artar.  

Yine de, budama sisteminizi temiz ve düzenli tutmanın başvurulan yöntemlerinden biri olmaya devam eder.  

Sadece dikkatli olmanız gerekir, özellikle üretim ortamlarında. docker ps -a, docker images ve docker volume ls gibi komutları, budamadan önce tüm container’ları, imajları ve volume’leri listelemek için kullanın. Budama komutunu, listelenen kaynakları silmeyi kabul ettiğinizden ancak emin olduktan sonra çalıştırın (bunların çalışan bir container tarafından kullanılmadığını varsayarak).  

Docker, konteynerleştirme ve konteyner orkestrasyonu hakkında daha fazla bilgi edinmek isterseniz DataCamp’teki şu kurslara göz atın:

SSS

docker prune güvenli mi?

Genel olarak evet, ancak dikkatle kullanılmalıdır. Yalnızca kullanımda olmayan kaynakları kaldırır; ancak kontrol etmeden çalıştırmak, özellikle üretim ortamlarında yanlışlıkla silmelere yol açabilir. -a -f gibi ek bayraklar, tüm kullanılmayan kaynakları zorla kaldıracaktır. 

docker prune ile docker rm arasındaki fark nedir?

docker prune, belirli bir türdeki tüm kullanılmayan kaynakları kaldırır; docker rm ise belirli container’ları veya imajları elle silmek için kullanılır.

docker system prune her şeyi siler mi?

Hayır, docker system prune kullanılmayan container’ları, ağları, imajları ve derleme önbelleğini kaldırır, ancak --volumes bayrağı belirtilmedikçe adlandırılmış volume’leri silmez. 

Docker’da sarkan (dangling) imaj nedir?

Sarkan imaj, etiketlenmemiş veya herhangi bir container tarafından referans verilmeyen imajdır. Bunlar genellikle derlemelerden kalan ara imajlardır ve docker image prune komutuyla güvenle kaldırılabilir. 

Dario Radečić

Yazar

Dario Radečić

Hırvatistan merkezli Kıdemli Veri Bilimci. 700’ün üzerinde yayımlanmış makaleyle 10 M+ görüntüleme elde eden, önde gelen bir teknoloji yazarı. TPOT ile Makine Öğrenimi Otomasyonu kitabının yazarı.

Konular

İlgili