266 lines
8.2 KiB
Markdown
266 lines
8.2 KiB
Markdown
# 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ç [hAtayolu](https://github.com/hatayolu) projesi kapsamında geliştirilmiştir.
|
||
Kişisel ve ticari kullanıma serbesttir.
|