Skip to content
Bloga dön
Rehber Docker Image Temizliği Disk Yönetimi Container Temizleme DevOps Sistem Yönetimi Mistral

Docker Image Temizliği: Disk Alanı Yönetiminde Kritik Adımlar ve Otomatikleştirilmiş Çözümler

Docker kullanırken karşılaşılan disk alanı sorunlarına yönelik pratik temizlik yöntemleri, otomatikleştirilmiş senaryolar ve sahada uygulanabilir en iyi uygulamalar.

Caner Serbest

Sistem ve Altyapı

6 dk okuma

Docker Image Temizliği: Disk Alanı Yönetiminde Kritik Adımlar ve Otomatikleştirilmiş Çözümler

Docker, modern yazılım geliştirme ve dağıtım süreçlerinde vazgeçilmez bir araç haline geldi. Ancak uzun süreli kullanımda, gereksiz Docker image’leri, durmuş container’lar ve ölü volumeler sistem diskini hızla tüketebilir. Bu durum, özellikle üretim ortamlarında ciddi performans sorunlarına ve hatta hizmet kesintilerine yol açabilir. Yapılan araştırmalar, Docker kullanımında ortalama bir sistemde disk alanının %30-40’ının temizlenmemiş image’ler ve durmuş container’lar tarafından işgal edildiğini göstermektedir.

Bu rehberde, Docker image temizliği konusunda sahada uygulanabilir yöntemleri, otomatikleştirilmiş çözümleri ve en iyi uygulamaları detaylı bir şekilde ele alacağız. Hem gelişmiş kullanıcılar hem de Docker’a yeni başlayanlar için pratik bilgiler sunacağız.


Docker Disk Alanı Yönetiminde Karşılaşılan Temel Problemler

Docker kullanırken karşılaşılan en yaygın disk alanı sorunları şunlardır:

  1. Dangling Image’ler: Hiçbir container tarafından kullanılmayan, ancak sistemde kalan image’ler.
  2. Durmuş Container’lar: Kullanılmayan ve sistem kaynaklarını tüketen durmuş container’lar.
  3. Ölü Volumeler: Hiçbir container tarafından kullanılmayan Docker volumeleri.
  4. Eski Image’lerin Birikmesi: Sık sık güncellenen uygulamalarda eski versiyonların sistemde kalması.
  5. Build Cache’in Temizlenmemesi: Docker build işlemleri sırasında oluşan cache’lerin birikmesi.

Bu problemler, sistem performansını doğrudan etkileyebilir ve disk doluluğu nedeniyle hizmet kesintilerine yol açabilir.


Manuel Temizlik Yöntemleri

Docker image temizliği için ilk adım, manuel olarak nelerin temizlenebileceğini anlamaktır. Aşağıdaki komutlar, Docker sistemindeki gereksiz dosyaları tanımlamaya yardımcı olur.

1. Dangling Image’leri Temizleme

Dangling image’ler, hiçbir container tarafından kullanılmayan image’lerdir. Bu image’ler, sistemde gereksiz yere yer kaplar.

# Dangling image'leri listeleme
docker images -f dangling=true

# Dangling image'leri silme
docker image prune

# Tüm dangling image'leri ve kullanılmayan volumeleri silme (daha agresif)
docker system prune

Not: docker system prune komutu, durmuş container’ları, kullanılmayan network’leri ve build cache’ini de temizler. Bu komutu kullanırken dikkatli olunmalıdır.

2. Durmuş Container’ları Temizleme

Durmuş container’lar, sistem kaynaklarını tüketmeye devam eder. Bu container’ları temizlemek için aşağıdaki komutları kullanabilirsiniz:

# Tüm durmuş container'ları listeleme
docker ps -a -f status=exited

# Tüm durmuş container'ları silme
docker rm $(docker ps -a -f status=exited -q)

# Belirli bir süre önce durmuş container'ları silme (örneğin, 24 saat önce)
docker container prune --filter "until=24h"

3. Ölü Volumeleri Temizleme

Volumeler, Docker container’ları tarafından kullanılan veri depolama alanlarıdır. Kullanılmayan volumeler de sistemde gereksiz yer kaplar.

# Tüm volumeleri listeleme
docker volume ls

# Kullanılmayan volumeleri listeleme
docker volume ls -qf dangling=true

# Kullanılmayan volumeleri silme
docker volume prune

4. Eski Image’leri Temizleme

Docker image’leri, sık sık güncellenen uygulamalarda eski versiyonların sistemde kalmasına neden olabilir. Bu image’leri temizlemek için aşağıdaki komutları kullanabilirsiniz:

# Tüm image'leri listeleme
docker images

# Belirli bir image'ı silme
docker rmi <IMAGE_ID>

# Eski image'leri temizleme (örneğin, 30 günden eski olanları)
docker image prune -a --filter "until=720h"

Otomatik Temizlik Senaryoları

Manuel temizlik yöntemleri etkili olsa da, Docker sisteminin düzenli olarak temizlenmesi için otomatikleştirilmiş senaryolar oluşturmak daha verimlidir. Aşağıda, Docker disk alanını otomatik olarak temizlemek için kullanılabilecek bazı yöntemler bulunmaktadır.

1. Cron Job ile Düzenli Temizlik

Linux sistemlerinde cron kullanarak Docker sistemini düzenli olarak temizleyebilirsiniz. Aşağıdaki örnek, her hafta Pazar günü saat 03:00’te Docker sistemini temizleyen bir cron job oluşturur:

# Crontab dosyasını düzenleme
crontab -e

# Aşağıdaki satırı ekleyin
0 3 * * 0 /usr/bin/docker system prune -af --volumes

Açıklamalar:

  • -a: Tüm durmuş container’ları, kullanılmayan network’leri ve build cache’ini temizler.
  • -f: Onay gerektirmeden temizleme işlemini gerçekleştirir.
  • --volumes: Kullanılmayan volumeleri de temizler.

2. Docker Cleanup Script’i Oluşturma

Daha karmaşık temizlik senaryoları için bir bash script oluşturabilirsiniz. Aşağıdaki örnek script, Docker sistemini temizler ve log dosyalarını da yönetir:

#!/bin/bash

# Docker sistemini temizle
echo "Docker sistemini temizleme başlıyor..."
docker system prune -af --volumes

# Log dosyalarını temizle (örneğin, /var/log/docker/ dizinindeki logları)
if [ -d "/var/log/docker/" ]; then
    echo "Log dosyalarını temizleme başlıyor..."
    find /var/log/docker/ -type f -name "*.log" -mtime +7 -delete
fi

# Sistem disk kullanımını kontrol et
echo "Sistem disk kullanımı:"
df -h

echo "Temizlik tamamlandı."

Bu scripti /usr/local/bin/docker-cleanup.sh olarak kaydedin ve çalıştırılabilir hale getirin:

chmod +x /usr/local/bin/docker-cleanup.sh

Ardından, bu scripti cron job olarak ekleyin:

crontab -e

# Aşağıdaki satırı ekleyin
0 3 * * 0 /usr/local/bin/docker-cleanup.sh

3. Docker API ve Script Entegrasyonu

Daha gelişmiş kullanıcılar, Docker API’yi kullanarak özel temizlik senaryoları oluşturabilirler. Örneğin, belirli bir tag’e sahip eski image’leri otomatik olarak temizleyen bir script yazabilirsiniz:

import docker
import datetime

# Docker istemcisini başlat
client = docker.from_env()

# Eski image'leri temizle (örneğin, 30 günden eski olanları)
for image in client.images.list():
    created_at = datetime.datetime.fromtimestamp(image.attrs['Created'])
    if (datetime.datetime.now() - created_at).days > 30:
        print(f"Siliniyor: {image.tags}")
        client.images.remove(image.id, force=True)

Bu scripti Python ile çalıştırarak Docker image’lerini otomatik olarak temizleyebilirsiniz.


Docker Image Temizliği için En İyi Uygulamalar

Docker image temizliği konusunda en iyi uygulamaları takip etmek, sistem performansını artırmanın yanı sıra güvenlik ve verimlilik açısından da önemlidir. Aşağıda, Docker image temizliği için önerilen en iyi uygulamalar bulunmaktadır:

1. Düzenli Temizlik Planı Oluşturun

Docker sistemini düzenli olarak temizlemek, disk alanını yönetmek için kritik öneme sahiptir. Aşağıdaki temizlik planını uygulayabilirsiniz:

  • Haftalık Temizlik: docker system prune -af --volumes komutunu haftalık olarak çalıştırın.
  • Aylık Derin Temizlik: Tüm durmuş container’ları, kullanılmayan volumeleri ve eski image’leri temizleyin.
  • Yıllık Genel Temizlik: Docker sistemini tamamen sıfırlayın ve gereksiz dosyaları silin.

2. Image’leri Düzenli Olarak Güncelleyin

Eski image’ler, sistemde gereksiz yer kaplamanın yanı sıra güvenlik açıklarına da yol açabilir. Image’leri düzenli olarak güncelleyin ve eski versiyonları temizleyin.

# Tüm image'leri güncelleme
docker-compose pull

# Eski image'leri temizleme
docker image prune -a

3. Volumeleri Düzenli Olarak Kontrol Edin

Volumeler, Docker container’ları tarafından kullanılan veri depolama alanlarıdır. Kullanılmayan volumeleri düzenli olarak kontrol edin ve temizleyin.

# Kullanılmayan volumeleri listeleme
docker volume ls -qf dangling=true

# Kullanılmayan volumeleri silme
docker volume prune

4. Build Cache’ini Yönetin

Docker build işlemleri sırasında oluşan cache’ler, sistemde gereksiz yer kaplayabilir. Build cache’ini düzenli olarak temizleyin.

# Build cache'ini temizleme
docker builder prune

# Tüm build cache'ini temizleme
docker builder prune -a

5. Log Dosyalarını Yönetin

Docker container’ları tarafından oluşturulan log dosyaları, sistemde gereksiz yer kaplayabilir. Log dosyalarını düzenli olarak temizleyin.

# Docker log dosyalarını temizleme
docker logs --tail=0 --follow --since=1h <CONTAINER_ID>

# Log dosyalarını yönetmek için logrotate kullanın

Docker Image Temizliği için Üçüncü Parti Araçlar

Docker image temizliği için kullanılabilecek birçok üçüncü parti araç bulunmaktadır. Bu araçlar, Docker sistemini daha verimli bir şekilde yönetmenize yardımcı olur. Aşağıda, en popüler üçüncü parti araçlardan bazıları bulunmaktadır:

1. Docker Clean

Docker Clean, Docker sistemini temizlemek için kullanılan basit ve etkili bir araçtır. Aşağıdaki komutla kurabilirsiniz:

# Docker Clean'i kurma
curl -sSL https://raw.githubusercontent.com/ZZROTDesign/docker-clean/master/docker-clean | sudo tee /usr/local/bin/docker-clean > /dev/null && sudo chmod +x /usr/local/bin/docker-clean

# Docker Clean'i çalıştırma
docker-clean

2. Docker-GC

Docker-GC, Docker sistemini otomatik olarak temizleyen bir araçtır. Aşağıdaki komutla kurabilirsiniz:

# Docker-GC'i kurma
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -v /etc:/etc docker-gc/docker-gc

3. Portainer

Portainer, Docker sistemini yönetmek için kullanılan bir web arayüzüdür. Portainer’ı kullanarak Docker sistemini kolayca temizleyebilirsiniz.

# Portainer'ı kurma
docker run -d -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer

Docker Image Temizliği için Güvenlik İpuçları

Docker image temizliği sırasında dikkat edilmesi gereken bazı güvenlik ipuçları bulunmaktadır:

  1. Veri Kaybını Önleyin: Temizlik işlemleri sırasında önemli verilerin silinmemesine dikkat edin. Öncelikle verilerin yedeklendiğinden emin olun.
  2. Yetkilendirme Kontrolleri: Docker komutlarını çalıştırırken yetkilendirme kontrollerini yapın. Gereksiz yetkilerle çalışmaktan kaçının.
  3. Güncel Docker Sürümü: Docker’ı düzenli olarak güncelleyin. Eski Docker sürümleri, güvenlik açıklarına yol açabilir.
  4. Güvenlik Duvarı Kuralları: Docker sistemini korumak için güvenlik duvarı kurallarını uygulayın.
  5. Log Dosyalarını İzleyin: Docker sistemindeki log dosyalarını düzenli olarak izleyin ve şüpheli aktiviteleri tespit edin.

Sonuç

Docker image temizliği, Docker kullanırken karşılaşılan en yaygın sorunlardan biridir. Düzenli olarak Docker sistemini temizlemek, disk alanını yönetmek ve sistem performansını artırmak için kritik öneme sahiptir. Bu rehberde, Docker image temizliği için manuel ve otomatik yöntemleri, en iyi uygulamaları ve üçüncü parti araçları detaylı bir şekilde ele aldık.

Unutmayın: Docker sistemini temizlemek, sadece disk alanını yönetmekle kalmaz, aynı zamanda sistem güvenliğini ve performansını da artırır. Düzenli olarak Docker sistemini temizleyerek, hizmet kesintilerini önleyebilir ve sistem kaynaklarını daha verimli bir şekilde kullanabilirsiniz.

Eğer Docker kullanırken karşılaştığınız sorunlar veya önerileriniz varsa, yorum bölümünde paylaşabilirsiniz. İyi çalışmalar! 🚀


Bu yazı Mistral ile otomatik oluşturulmuştur.