Docker Mac'te neden bu kadar yer kaplıyor ve çözümü
Docker bir Mac'te bu kadar yer kaplar, çünkü sakladığı her şey, her imaj, konteyner, birim (volume) ve derleme önbelleği kaydı, Docker.raw adlı tek bir sanal disk dosyasının içinde durur ve siz silene kadar içinden hiçbir şey silinmez. Alanı geri almak için Docker içinde docker system prune ve ilgili komutlarla budama (prune) yapın.
Docker.raw dosyasını Finder'da silmeyin. Bu, birimlerdeki veritabanları da dahil her şeyi bir kerede yok eder. Aşağıdaki adımlar en güvenli temizlikten en kapsamlısına doğru ilerler.
Docker'ın alanı gerçekte nerede
Docker Desktop konteynerleri küçük bir Linux sanal makinesinin içinde çalıştırır. O makinenin diski Mac'inizde tek bir dosyadır: ~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw.
Dosya seyrektir (sparse). Çok daha azı kullanımdayken bile Finder onu izin verilen en büyük boyutunda gösterebilir. Aşağıdaki komut iki rakamı da gösterir: ilk sütun diskinizde gerçekten kaplanan alandır, satırın ilerisindeki boyut ise en büyük boyuttur.
Bir konteynerin dosyalarını macOS'in içinden silmenin mümkün olmamasının ve klasörün her disk aracında tek bir dev öğe gibi görünmesinin nedeni budur.
ls -klsh ~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.rawAlanı neyin kullandığını görün
Docker Desktop çalışırken Docker'dan bir döküm isteyin. Aşağıdaki komut dört şeyi listeler: imajlar, konteynerler, yerel birimler ve derleme önbelleği; her birinin toplam boyutuyla ve ne kadarının geri kazanılabilir olduğuyla birlikte.
Her imaj, konteyner ve birim için ayrı bir satır görmek üzere -v ekleyin. Okumak için bir dakika ayırmaya değer. Çoğu geliştirici makinesinde büyük öğeler eski imajlar ve derleme önbelleğidir, ama birimler büyükse bu veridir ve daha fazla özen ister.
docker system df1. adım: güvenli budama
Aşağıdaki komutla başlayın. Durdurulmuş konteynerleri, hiçbir konteynerin kullanmadığı ağları, sahipsiz imajları, yani artık etiketlenmemiş veya başvurulmayan katmanları, ve kullanılmayan derleme önbelleğini siler. Docker neyi sileceğini listeler ve onaylamanızı ister.
Etiketi olan imajları, çalışan konteynerleri veya birimleri silmez. Pek çok kişi için bu yeterlidir.
Buradaki hiçbir şeyi geri getirmek zor değildir. Silinen bir konteyner imajından yeniden oluşturulabilir, derleme önbelleği ise size yalnızca daha yavaş bir sonraki derlemeye mal olur. Kontrol edilecek tek şey, durdurulmuş bir konteynerin, içinde yazıp hiç dışarı kopyalamadığınız dosyalar tutup tutmadığıdır.
docker system prune2. adım: kullanılmayan imajlar ve derleme önbelleği
Daha fazlasına ihtiyacınız varsa doğrudan imajların ve derleme önbelleğinin üzerine gidin.
- docker image prune -a, etiketli olsun olmasın, hiçbir konteynerin kullanmadığı bütün imajları siler. Bir sonraki ihtiyaç duyduğunuzda onları yeniden çeker veya derlersiniz.
- docker builder prune derleme önbelleğini siler. Yalnızca sahipsiz kısmı değil, tamamını silmek için -a ekleyin. Sonraki derlemeleriniz soğuk başlar ve daha uzun sürer.
- docker system prune -a, yukarıdakilerin ikisini 1. adımdaki temizlikle birlikte yapar.
- docker container ls -a durdurulmuş konteynerleri gösterir. Hâlâ istediğiniz bir tanesi büyük bir imajı kullanımda tutuyor olabilir.
3. adım: birimler, dikkatle
Birimler, konteynerlerin kalıcı olması gereken verileri tuttuğu yerdir: veritabanı dosyaları, yüklemeler, paket önbellekleri. Onları budamak gerçek emeği silebilir, bu yüzden önce bakın.
Onları aşağıdaki ilk komutla listeleyin ve hangi projelere ait olduklarına bakın. İkinci komut, hiçbir konteynerin kullanmadığı adsız birimleri siler. -a eklemek bunu, hiçbir konteynerin kullanmadığı adlandırılmış birimleri de kapsayacak şekilde genişletir; yerel bir geliştirme veritabanı genellikle orada durur.
Bir birim önemliyse budamadan önce onu yedekleyin veya veritabanının dökümünü alın. Bir Compose projesinin birimleri, proje klasöründe çalıştırılan docker compose down -v ile o projeyle birlikte silinebilir.
docker volume ls
docker volume pruneAlanı Mac'inizde geri almak
Budamadan sonra Docker Desktop, sanal diskin içinde boşalan alanı macOS'e geri verir. Docker.raw biçiminde bu normalde birkaç an içinde olur, ancak dosyanın en büyük boyutunu gösteren araçlar bir değişiklik göstermez. Gerçek rakamı görmek için ilk bölümdeki ls komutunu yeniden çalıştırın.
İleride bu kadar büyümesini önlemek için Docker Desktop'ı açın, Settings'e, sonra Resources'a gidin ve disk kullanım sınırını düşürün. Değişiklik mevcut verileri silecekse Docker sizi uyarır.
Tümüyle baştan başlamak istiyorsanız Docker Desktop'ın Troubleshoot ekranında bir Clean / Purge data seçeneği ve fabrika ayarlarına sıfırlama vardır. İkisi de bütün imajları, konteynerleri ve birimleri siler.
Docker.raw içinde olmayanlar
Docker ile ilgili birkaç şey sanal diskin dışında durur. Konteynerlere bağladığınız klasörler Mac'inizdeki sıradan klasörlerdir ve hiçbir budama onlara dokunmaz. Proje klasörleri, node_modules gibi kendi derleme çıktılarını tutar. Docker Desktop'ı kaldırırsanız da yardımcıları, grup kapsayıcıları ve ~/.docker klasörü, siz onları da kaldırmadıkça geride kalır.
Diskzy bunun neresinde
Diskzy, disk haritasında Docker.raw dosyasının gerçekte ne kadar büyük olduğunu gösterir; böylece Docker içinde budama zamanının geldiğini bilirsiniz. Dosyayı sizin yerinize küçültmez.
Docker Desktop'ı tümüyle kaldırmaya karar verirseniz Diskzy'nin Uninstall (Kaldır) sekmesi uygulamayı geride bıraktıklarıyla birlikte kaldırır; kapsayıcılar, başlatma aracıları ve ayrıcalıklı yardımcılar buna dahildir. Her şey Çöp Sepeti'ne gider.
Sık sorulan sorular
- Yer açmak için Docker.raw dosyasını silebilir miyim?
- Yalnızca bütün imajları, konteynerleri ve birimleri kaybetmek istiyorsanız. Docker Desktop bir sonraki başlayışında yeni, boş bir dosya oluşturur. Yer açıp kullandıklarınızı korumak için bunun yerine Docker içinde budama yapın.
- Az imajım varken Docker.raw neden bu kadar büyük?
- Finder çoğu zaman dosyanın kullandığı alanı değil, en büyük boyutunu gösterir. Gerçek boyutu ls -klsh ile kontrol edin. Hâlâ büyükse docker system df çalıştırın: olağan gizli nedenler derleme önbelleği ve birimlerdir.
- docker system prune birimlerimi siler mi?
- Saptanmış olarak hayır. Durdurulmuş konteynerleri, kullanılmayan ağları, sahipsiz imajları ve kullanılmayan derleme önbelleğini siler. Birimler yalnızca --volumes bayrağını eklerseniz veya docker volume prune çalıştırırsanız silinir.
- Budamadan sonra disk alanı geri gelir mi?
- Evet. Docker Desktop, Docker.raw içinde boşalan alanı siz budadıktan kısa süre sonra macOS'e geri verir. Finder'da gösterilen en büyük boyut değişmez, ama diskte kullanılan alan değişir.
İlgili rehberler
- Docker.raw~/Library/Containers/com.docker.docker/Data/vms/0/data/Docker.raw
- Containers~/Library/Containers
- Group Containers~/Library/Group Containers
- node_modules<project>/node_modules
Kaldırma rehberleri
Mac'inizdeki alanın nereye gittiğini görün
Diskzy diskinizin haritasını çıkarır, Sistem Verileri'ni açıklar ve güvenli olanı temizler. 72 saat ücretsiz, sonra 2 Mac için tek seferlik 9 $.
Diskzy'yi ücretsiz deneyin