# Docker Desktop Temizlik & Bakım Aracı Windows üzerinde Docker Desktop kullananlar için geliştirilmiş, **tek tıkla çalışan** kapsamlı bir temizlik ve disk kazanım aracıdır. Docker kaynaklarını temizlemenin yanı sıra WSL2 backend'inin kullandığı `.vhdx` sanal disk dosyalarını da sıkıştırarak Windows'a disk alanı iade eder. --- ## Dosya Yapısı ``` docker-cleanup/ ├── docker-cleanup.bat ← Çift tıkla başlatıcı (buradan başlayın) └── docker-cleanup.ps1 ← Ana temizlik scripti (PowerShell) ``` İki dosyanın **aynı klasörde** bulunması zorunludur. --- ## Gereksinimler | Gereksinim | Açıklama | |---|---| | Windows 10/11 | WSL2 destekli | | Docker Desktop | WSL2 backend aktif | | PowerShell 5.1+ | Windows ile birlikte gelir | | Yönetici yetkisi | Yalnızca VHDX shrink adımı için gerekli | > Docker temizlik adımları (1-5) normal kullanıcı yetkisiyle çalışır. > VHDX shrink (adım 6) için Yönetici yetkisi şarttır. --- ## Hızlı Başlangıç ### Yöntem 1 — Çift Tıkla (Önerilen) `docker-cleanup.bat` dosyasına **sağ tıklayın** → **"Yönetici olarak çalıştır"** seçin. Açılan menüden istediğiniz modu seçin: ``` ==================================================== Docker Desktop - Temizlik, Bakim ve VHDX Shrink ==================================================== Yetki : YONETICI - VHDX shrink AKTIF ==================================================== [1] Standart temizlik + VHDX shrink (7 gunluk filtre) [2] Hizli temizlik + VHDX shrink (2 gunluk filtre) [3] Volume dahil tam temizlik (DIKKATLI!) [4] Sadece goster - dry-run (hicbir sey silinmez) [5] Cikis ``` ### Yöntem 2 — PowerShell'den Doğrudan ```powershell # Dosyayı önce güven listesine alın (bir kez yeterli) Unblock-File .\docker-cleanup.ps1 # Standart çalıştırma .\docker-cleanup.ps1 # Yönetici PowerShell'inde (VHDX shrink dahil) .\docker-cleanup.ps1 -Hours 168 ``` --- ## Parametreler | Parametre | Tür | Varsayılan | Açıklama | |---|---|---|---| | `-Hours` | `int` | `168` | Bu saatten eski kaynakları temizle (168 = 7 gün) | | `-All` | `switch` | kapalı | Volume temizliğini de dahil et | | `-DryRun` | `switch` | kapalı | Hiçbir şeyi silme, sadece raporu göster | ### Parametre Örnekleri ```powershell # Son 2 günden eski kaynakları temizle .\docker-cleanup.ps1 -Hours 48 # Volume dahil tam temizlik .\docker-cleanup.ps1 -All # Ne kadar alan kazanılacağını önce gör, hiçbir şeyi silme .\docker-cleanup.ps1 -DryRun # Volume dahil, 3 günlük filtre, dry-run .\docker-cleanup.ps1 -All -Hours 72 -DryRun ``` --- ## Çalışma Akışı (8 Adım) Script çalıştırıldığında aşağıdaki adımları sırayla uygular. ### Adım 0 — Başlangıç Raporu Script başlamadan önce mevcut durumu gösterir: - `docker system df` çıktısı (konteyner, imaj, volume, cache boyutları) - `%LOCALAPPDATA%\Docker\wsl\disk\` altındaki tüm `.vhdx` dosyaları ve boyutları ### Adım 1 — Konteyner Temizliği `exited`, `dead` ve hiç başlatılmamış `created` durumundaki konteynerleri bulur ve kaldırır. `-Hours` filtresine göre yalnızca belirtilen süreden eski olanlar silinir. Çalışan (`running`) konteynerlere dokunulmaz. ``` docker container prune --force --filter "until=168h" ``` ### Adım 2 — İmaj Temizliği Hiçbir konteynere bağlı olmayan imajları kaldırır. Hem `dangling` (tag'siz) hem de kullanılmayan tüm imajlar hedeflenir. ``` docker image prune -a --force --filter "until=168h" ``` > Aktif konteynerlerin kullandığı imajlar korunur. ### Adım 3 — Build Cache Temizliği `docker build` işlemlerinden kalan katman önbelleklerini temizler. Zamanla GB'larca yer kaplayabilir. ``` docker builder prune --force --filter "until=168h" ``` ### Adım 4 — Ağ Temizliği Hiçbir konteynere bağlı olmayan özel Docker ağlarını kaldırır. `bridge`, `host` ve `none` gibi yerleşik ağlar korunur. ``` docker network prune --force ``` ### Adım 5 — Volume Temizliği *(opsiyonel, `-All` ile aktif)* Yalnızca `-All` parametresiyle çalışır. Herhangi bir konteynere bağlı olmayan volume'ları kaldırır. Çalıştırmadan önce onay ister. ``` docker volume prune --force ``` > **Uyarı:** Volume'lar veritabanı verileri, yapılandırma dosyaları gibi kalıcı içerik barındırabilir. Bu adımı kullanmadan önce yedek alın. ### Adım 6 — WSL2 Kapatma + VHDX Shrink *(Yönetici yetkisi gerekir)* Bu adım Docker'ın WSL2 backend'inin kullandığı sanal disk dosyalarını (`ext4.vhdx`, `data.vhdx` vb.) sıkıştırarak Windows'a fiziksel disk alanı iade eder. **Neden gerekli?** `docker system prune` Docker içindeki verileri siler ama `.vhdx` dosyası Windows gözünden küçülmez. VHDX dinamik olarak büyür, ancak içi boşalsa bile Windows'a otomatik yer iade etmez. Bu adım bu sorunu çözer. **İşlem sırası:** ``` 1. wsl --shutdown ← WSL2 ve tüm distro'ları kapat 2. diskpart select vdisk file="...\ext4.vhdx" attach vdisk readonly compact vdisk ← Boş blokları geri ver detach vdisk 3. Docker Desktop'ı yeniden başlat ``` Script her `.vhdx` dosyası için önce/sonra boyutu karşılaştırır ve kazanılan alanı raporlar. ### Adım 7 — Sonuç Raporu Tüm adımlar tamamlandıktan sonra: - `docker system df` ile güncel Docker disk kullanımı - Her `.vhdx` dosyasının yeni boyutu --- ## VHDX Dosyaları Hakkında Docker Desktop WSL2 backend kullandığında verilerini şu konumda saklar: ``` %LOCALAPPDATA%\Docker\wsl\disk\ ext4.vhdx ← Ana Docker verisi (imaj katmanları, konteynerler) docker-desktop-data.vhdx ← Ek veri (yapılandırmaya göre değişir) ``` Bu dosyalar büyüdükçe Windows'ta ciddi disk baskısı oluşturur. Docker temizliği + VHDX shrink kombinasyonu uygulandığında **5 GB ile 30 GB arasında** alan kazanımı görülmesi normaldir. --- ## Güvenlik Notları ### ExecutionPolicy Uyarısı Script ilk çalıştırmada PowerShell güvenlik uyarısı gösterebilir. Bunu kalıcı olarak çözmek için: ```powershell Unblock-File .\docker-cleanup.ps1 ``` `.bat` üzerinden çalıştırıldığında bu adım otomatik olarak atlanır (`-ExecutionPolicy Bypass`). ### Neye Dokunulmaz Script **asla** şunlara dokunmaz: - Çalışan (`running`) konteynerler - Aktif konteynerlerin kullandığı imajlar - `bridge`, `host`, `none` gibi yerleşik Docker ağları - `-All` parametresi verilmediği sürece volume'lar - Docker Desktop yapılandırma dosyaları - WSL2 distro verileri (yalnızca Docker'ın kendi `.vhdx` dosyaları hedeflenir) ### Dry-Run Modu Emin olmadığınızda her zaman önce dry-run ile başlayın: ```powershell .\docker-cleanup.ps1 -DryRun ``` Hiçbir silme işlemi yapılmaz; yalnızca ne yapılacağı ekrana yazdırılır. --- ## Sık Karşılaşılan Durumlar **Docker Desktop çalışmıyor hatası** Script başlangıçta `docker info` komutuyla Docker'ın erişilebilir olup olmadığını kontrol eder. Docker Desktop kapalıysa hata mesajı gösterir ve çıkar. Çözüm: Docker Desktop'ı açın ve birkaç saniye bekleyip tekrar çalıştırın. **VHDX shrink adımı atlanıyor** Script yönetici yetkisiyle çalışmıyorsa adım 6 otomatik olarak atlanır ve uyarı verilir. Çözüm: `.bat` dosyasına sağ tıklayın → "Yönetici olarak çalıştır". **VHDX boyutu değişmedi** Dosya zaten optimize durumdaysa `diskpart compact` herhangi bir alan kazanımı sağlamaz ve script bunu raporlar. Bu normal bir durumdur. **Volume temizliği sonrası uygulama hatası** `-All` ile volume silindikten sonra bazı uygulamalar başlatılamayabilir. Çözüm: İlgili volume'ları yedekleyin veya uygulamayı yeniden yapılandırın. --- ## Önerilen Kullanım Sıklığı | Senaryo | Komut | Sıklık | |---|---|---| | Günlük geliştirme | Standart (seçenek 1) | Haftada 1 | | Yoğun build dönemi | `-Hours 48` (seçenek 2) | Günlük | | Disk dolmak üzere | `-All` (seçenek 3) | Gerektiğinde | | Yeni başlarken | `-DryRun` (seçenek 4) | İlk kullanımda | --- ## Lisans Bu araç [hOLOlu](https://www.mustafaozkaya.tr) tarafndan geliştirilmiştir.