VPS sunucularında Docker container’larını yönetirken, yeniden başlatma politikaları (restart policy) sistemin sürekliliğini ve güvenilirliğini artırmanın kritik bir unsurudur. Bu politika, container’ların beklenmedik durumlarda otomatik olarak yeniden başlatılmasını sağlar, böylece hizmet kesintilerini minimuma indirir. Özellikle yüksek erişilebilirlik gerektiren web uygulamaları, veritabanları veya API servisleri için vazgeçilmezdir. Bu makalede, Docker restart policy’nin temel kavramlarını, VPS ortamında pratik uygulamasını ve en iyi uygulamaları adım adım ele alacağız. VPS’nizde Docker’ı etkin kullanmak isteyen sistem yöneticileri için somut rehberlik sunacağız.
Docker, container’lar için dört ana restart policy sunar: no, on-failure, always ve unless-stopped. Bu politikalar, container’ın çıkış koduna ve sistem olaylarına göre davranışını belirler. “No” politikası varsayılan olup, container’ı yeniden başlatmaz; manuel müdahale gerektirir. “On-failure” ise belirli bir başarısızlık sayısını (örneğin 3 kez) aştığında yeniden başlatmayı durdurur, kaynak israfını önler. “Always” her durumlarda (kaza dışı çıkışlar dahil) yeniden başlatır, ideal sürekli hizmetler için uygundur. “Unless-stopped” ise manuel durdurma hariç her koşulda yeniden başlatır, en esnek seçenektir.
VPS ortamında bu politikaları seçerken, uygulamanızın tolerans seviyesini göz önünde bulundurun. Örneğin, bir web sunucusu için “always” uptime’ı maksimize ederken, geliştirme ortamlarında “on-failure” test süreçlerini kolaylaştırır. Politika, Docker daemon’un restart yapma yetkisine bağlıdır; VPS’nizde systemd entegrasyonu ile sorunsuz çalışır.
Yeni bir container oluştururken restart policy’yi docker run komutuyla belirtin. Örnek: docker run -d --name webapp --restart=always -p 80:80 nginx. Bu komut, Nginx container’ını her zaman yeniden başlatacak şekilde ayarlar. Mevcut container’lar için docker update --restart=always webapp kullanın; bu, çalışan container’ı etkilemeden politikayı günceller. VPS’nizde birden fazla container yönetiyorsanız, Docker Compose ile yaml dosyasında restart: always tanımlayın ve docker-compose up -d ile uygulayın.
Yeni container’larda policy’yi baştan entegre etmek en verimlidir. VPS terminalinde şu adımları izleyin: Önce imajı çekin (docker pull mysql:8), ardından docker run -d --name db --restart=on-failure:5 -e MYSQL_ROOT_PASSWORD=gucluSifre -p 3306:3306 mysql:8. Burada “on-failure:5” ile 5 başarısızlıktan sonra durur, veritabanı stabilitesini korur. Bu yaklaşım, VPS kaynaklarını verimli kullanır ve otomatik recovery sağlar. Test etmek için container’ı kill edin (docker kill db) ve logları inceleyin (docker logs db).
Mevcut bir container’ı güncellemek için docker ps ile ID’leri listeleyin, sonra docker update --restart=unless-stopped containerID çalıştırın. VPS’te swarm modunda iseniz, service update ile docker service update --restart-condition=unless-stopped myservice kullanın. Değişiklikleri doğrulamak adına docker inspect containerID | grep RestartPolicy komutunu uygulayın; JSON çıktısında policy detaylarını göreceksiniz. Bu işlem saniyeler sürer ve downtime yaratmaz.
Politika değişikliklerini kalıcı hale getirmek için Docker servis dosyasını (/etc/docker/daemon.json) düzenleyin ve daemon’u yeniden başlatın (systemctl restart docker). VPS sağlayıcınızın firewall kurallarını unutmayın; portlar açık olmalı.
VPS’te restart policy’yi optimize etmek için monitoring araçları entegre edin; Prometheus veya Docker Stats ile container sağlık durumunu izleyin. Her zaman healthcheck tanımlayın: docker run’da --health-cmd='curl -f http://localhost/' --health-interval=30s. Bu, policy’nin yalnızca gerçek arızalarda tetiklenmesini sağlar. Kaynak sınırlamaları ekleyin (--memory=512m --cpus=1) ki sonsuz döngü oluşmasın. Log rotasyonu için --log-opt max-size=10m kullanın.
En sık karşılaşılan sorun, policy’nin çalışmamasıdır; nedeni genellikle Docker socket izinleri veya systemd entegrasyonudur. Çözüm: usermod -aG docker $USER ile yetki verin ve logout/login yapın. Başka bir sorun, OOM killer nedeniyle tekrarlanan restart’lardır; docker stats ile bellek kullanımını kontrol edin ve limitleri ayarlayın. VPS’te yüksek yükte daemon çökerse, journalctl -u docker loglarını inceleyin ve policy’yi “unless-stopped”e geçin. Bu adımlar, %99.9 uptime hedefinize ulaşmanızı sağlar.
Otomasyon için cron job ile docker ps -f "status=exited" | xargs docker start ekleyin, ancak policy ile çakışmasın. VPS panelinizde (örneğin DigitalOcean droplet) alert’ler kurun. Gerçek dünya örneği: Bir e-ticaret sitesinde “always” policy ile checkout servisi, 7/24 erişim sağladı. Düzenli docker system prune ile eski container’ları temizleyin ki policy etkili kalsın.
Sonuç olarak, VPS sunucularınızda Docker restart policy’yi stratejik kullanmak, operasyonel mükemmelliği getirir. Bu rehberdeki adımları uygulayarak hizmetlerinizi daha dayanıklı hale getirin; düzenli testler ve ince ayarlarla kesintisiz performans elde edin. Sisteminizi proaktif yönetmek, uzun vadede maliyetleri düşürür ve kullanıcı memnuniyetini artırır.