🐳 Docker Disk Canavarını Dizginlemek: Windows, macOS ve Linux’ta Veri Taşıma Rehberi
Hepimiz o anı yaşadık: Projeler tıkır tıkır çalışıyor, konteynerler ayakta, her şey harika… Ta ki işletim sisteminiz “Diskte yer kalmadı” uyarısını yüzünüze çarpana kadar. Docker, doğası gereği imajları, container statelerini ve volume’leri biriktirmeyi çok sever. Zamanla varsayılan sürücünüzü (genellikle işletim sisteminin kurulu olduğu diski) tamamen yutabilir.
Bu rehberde, Docker verilerinizi (ve o devasa sanal diskleri) Windows, macOS ve Linux sistemlerinde varsayılan konumlarından alıp, geniş ve ferah başka bir diske nasıl taşıyacağınızı adım adım inceleyeceğiz.
🪟 1. Windows: WSL 2 Diskini Sıkıştırmak ve Özgürleştirmek
Docker Desktop, Windows üzerinde artık varsayılan olarak WSL 2 (Windows Subsystem for Linux) kullanıyor. Bu mimari çok hızlı olsa da, verileri ext4.vhdx (veya docker_data.vhdx) adlı sanal bir disk dosyasında saklar. İşin kötü yanı, siz Docker içinden verileri silseniz bile bu dosya Windows tarafında kendiliğinden küçülmez.
Adım Adım Sıkıştırma ve Taşıma İşlemi:
1. Docker’ı ve WSL’i Kapatın: Sistem tepsisinden Docker Desktop’a sağ tıklayıp “Quit” deyin. Ardından PowerShell’i açıp arka plandaki servisleri dondurun:
wsl --shutdown
2. Diski Sıkıştırın (Compact - Opsiyonel ama Hayat Kurtarır):
Önce o şişen diskin içindeki boşlukları silip C: diskini rahatlatalım. PowerShell’de diskpart aracını çalıştırın ve sırayla şu komutları girin (kendi kullanıcı adınıza göre yolu güncelleyin):
select vdisk file="C:\Users\KULLANICI_ADIN\AppData\Local\Docker\wsl\disk\docker_data.vhdx"
compact vdisk
exit
3. Dağıtım Adını Doğrulayın: Docker’ın verilerini tuttuğu WSL dağıtımının adı sistemden sisteme değişebilir. PowerShell’de şu komutla tam adı öğrenin:
wsl -l -v
(Listede docker-desktop veya docker-desktop-data göreceksiniz. Biz aşağıdaki komutlarda docker-desktop kullandık, kendi sisteminize göre uyarlayın).
4. Veriyi Dışa Aktarın (Export): WSL diskini, hedef diskinize (örneğin D:\Docker) bir .tar arşivi olarak çıkarın:
wsl --export docker-desktop "D:\docker_desktop.tar"
(Not: Diskinizin boyutuna göre bu işlem vakit alabilir, sabırlı olun).
5. Eski Kaydı Silin ve Yeni Konuma Kurun (Import): C: sürücüsündeki kaydı silin, hedef klasörü oluşturun ve yedeği yeni yuvasında hayata döndürün:
wsl --unregister docker-desktop
mkdir "D:\Docker\data"
wsl --import docker-desktop "D:\Docker\data" "D:\docker_desktop.tar" --version 2
İşlem bitince o devasa .tar yedek dosyasını silebilirsiniz. Docker’ı başlatın, C: diskiniz artık özgür!
🍏 2. macOS: Apple Silicon ve Intel Mac’lerde Diski Taşımak
Özellikle M serisi (M1, M2, M4 vb.) Apple Silicon işlemcili modern cihazlarda Docker, Apple’ın Sanallaştırma Çerçevesi üzerinden çalışır ve verileri devasa bir Docker.raw dosyasında tutar. Mac tarafında terminalde symlink (sembolik link) ile uğraşmak sanal makineyi bozabileceğinden, en temiz yol uygulamanın kendi arayüzünü kullanmaktır.
Adım Adım Taşıma İşlemi:
- Hedef diskinizi (örneğin harici bir Thunderbolt SSD) Mac’inize bağlayın ve içinde boş bir
DockerDataklasörü oluşturun. - Docker Desktop‘ı açın ve sağ üstteki Ayarlar (Dişli İkonu) simgesine tıklayın.
- Sol menüden Resources -> Virtual disk sekmesine gidin.
- Disk image location başlığı altındaki Browse butonuna tıklayın.
- Yeni diskinizdeki hedef klasörü seçin.
- Apply & Restart butonuna tıklayın.
Docker, o devasa veri dosyasını güvenli bir şekilde yeni konuma taşıyacak ve arka planda servisi yeniden başlatacaktır. İşlem bu kadar basit!
🐧 3. Linux: Native Docker Engine (Daemon) Yapılandırması
Linux ortamında (özellikle sunucularda) arayüzlü Docker Desktop yerine genellikle doğrudan Docker Engine kullanılır. Docker, verileri varsayılan olarak /var/lib/docker dizininde tutar. Bunu yapılandırma dosyası ile değiştirmek en stabil yöntemdir.
Adım Adım Taşıma İşlemi:
1. Servisi Durdurun: İşlem yaparken veri yazılmasını engellemek için servisi kapatın:
sudo systemctl stop docker
sudo systemctl stop docker.socket
2. Verileri Yeni Diske Kopyalayın: Dosya izinlerini (permissions) bozmamak için cp yerine rsync kullanmak şarttır. Hedefin /mnt/yeni_disk/docker_data olduğunu varsayalım:
sudo rsync -aP /var/lib/docker/ /mnt/yeni_disk/docker_data/
3. Yapılandırma Dosyasını Düzenleyin: Docker’a yeni adresi göstermemiz gerekiyor. /etc/docker/daemon.json dosyasını açın (yoksa oluşturun):
sudo nano /etc/docker/daemon.json
İçerisine şu satırları ekleyin:
{
"data-root": "/mnt/yeni_disk/docker_data"
}
4. Servisi Yeniden Başlatın ve Test Edin:
sudo systemctl start docker
Docker’ın doğru diske baktığını doğrulamak için docker info | grep "Docker Root Dir" komutunu çalıştırın. Çıktıda yeni dizini görüyorsanız, eski /var/lib/docker klasörünü güvenle silebilirsiniz.
💡 Kapanış ve Bonus İpucu
Diski taşıdınız ve rahat bir nefes aldınız. Ancak Docker zamanla yine “dangling” (boşta kalan) imajlar ve kullanılmayan volume’ler üretecektir. Haftada bir şu komutu çalıştırarak bahar temizliği yapmayı unutmayın:
docker system prune -a --volumes -f
Mutlu kodlamalar! 🚀