Docker Kapsayıcılarımın Kararlılığını Nasıl Artırırım
26 Nisan 2026 tarihinde yayınlandı

İki gün boyunca sorunsuz çalışan ve sonra sabaha karşı 3:12'de kapanan bir Docker kapsayıcısı. bir kapsayıcı sorunu değildir. Genellikle Docker etiketi taşıyan bir operasyon sorunudur. Eğer "Docker kapsayıcılarımın kararlılığını nasıl artırırım?" diye soruyorsanız, cevap nadiren tek bir sihirli bayraktır. Kararlılık, tahmin edilebilir kapsayımlar, mantıklı kaynak limitleri, sağlık kontrolleri, temiz depolama ve kullanıcılarınızdan önce sorunu yakalayan izleme sayesinde gelir.
Çoğu ekip için kapsayıcı kararsızlığı bilindik şekillerde ortaya çıkar. Bir hizmet uyarı vermeden yeniden başlar. Bellek, çekirdeğin işlemi sonlandırmasına kadar yükselir. Bir dağıtım bir sunucuda çalışır ancak diğerinde çalışmaz. En çok ihtiyaç duyduğunuzda günlükler kaybolur. İyi haber şu ki bu hatalar genellikle birkaç disiplinli değişiklikle önlenebilir.
Docker kapsayıcılarının kararlılığını pratikte nasıl artırılır
Önce uygulama hatalarını kapsayıcı çalışma zamanı sorunlarından ayırarak başlayın. Docker, kötü işlem yönetimi, zayıf bağımlılık kontrolü veya ana bilgisayar düzeyinde kaynak tükenmesinden kaynaklanan hatalar için sıklıkla suçlanır. Kararlı bir kapsayıcı kurulumu, temiz başlayan, günlükleri düzgün yazan, sinyalleri işleyen ve anlamlı çıkış kodlarıyla sonlanan kararlı bir uygulama işlemiyle başlar.
Kapsayıcınız bir web uygulaması, API, kuyruk işleyicisi veya zamanlanmış görev çalıştırıyorsa, içindeki ana işlem gerçek hizmet işlemi olmalı, sinyalleri yutan bir kabuk sarmalayıcısı değil. Docker, yeniden başlatma veya dağıtım sırasında SIGTERM gönderdiğinde, uygulamanızın temiz bir şekilde kapanması gerekir. Eğer kapanmazsa, takılı kalan yeniden başlatmalar, bozuk geçici durumlar veya eksik işler görebilirsiniz.
Başka yaygın bir sorun da kapsayıcıları minik sanal makineler gibi görmektir. Kapsayıcılar elden çıkarılabilir olmalıdır. Onların içinde ne kadar çok gizli durum tutarsanız, zamanla o kadar kararsız hale gelirler. Eğer bir yeniden başlatma dosyalar kaybolduğu, izinler değiştiği veya çalışan kapsayıcının içinde manuel bir düzeltme yapıldığı için hizmeti bozarsa, kurulum tasarımsal olarak kırılgandır.
Tahmin edilebilir, küçük ve sabitlenmiş kapsayımlar kullanın
Şaşırtıcı sayıda kararlılık sorunu, derleme aşamasında başlar. Eğer "latest" gibi yüzen etiketler kullanıyorsanız, kapsayım yeniden derlendiğinde veya çekildiğinde her seferinde sessiz değişikliği kabul ediyorsunuz demektir. Bu, uyarı vermeden yeni kütüphaneler, paket sürümleri veya çalışma zamanı davranışları getirebilir.
Temel kapsayım sürümlerinizi sabitleyin. Uygulama bağımlılıklarınızı da sabitleyin. Bu, yeniden derlemeleri tekrarlanabilir hale getirir ve bir şey bozulursa net bir geri alma yolu sunar. Küçük kapsayımlar ayrıca saldırı yüzeyini azalttığı, başlatma süresini kısalttığı ve uygulamanızla çakışabilecek gereksiz paketleri kaldırdığı için yardımcı olur.
Burada çok aşamalı derlemeler kullanmaya değer. Bunlar, bir aşamada artefaktları derlemenize veya hazırlamanıza ve yalnızca son kapsayımdaki çalışma zamanı parçalarını göndermenize olanak tanır. Bu daha temiz, yamalanması daha kolay ve genellikle y ük altında daha kararlıdır.
Daha da önemlisi, kapsayımları aylarca yaşlandırmak yerine zamanlanmış olarak yeniden derleyin. Kararlılık durgunluk ile aynı şey değildir. Eski kapsayımlar genellikle eski paketler, süresi dolmuş sertifikalar veya çevredeki hizmetler değiştiğinde ortaya çıkan uyumsuzluklar içerir.
Ana bilgisayar sizin adınıza belirlemeden önce kaynak limitlerini ayarlayın
Kararsız bir kapsayıcı, düğümdeki diğer her şeye zarar verebilir. Eğer belleği sınırsızsa, Linux OOM killer sonunda sizin için bir karar verecektir ve beklediğiniz işlemi seçmeyebilir.
Bellek ve CPU limitlerini bilinçli olarak ayarlayın. Bellek limitleri, bir kapsayıcının ana bilgisayarı tüketmesini engeller. CPU limitleri, gürültülü komşuların diğer hizmetleri aç bırakmasını önler. Desteklenen yerlerde, özellikle birden fazla kritik iş yükü aynı sunucuyu paylaşıyorsa, rezervasyonlar da yardımcı olabilir.
Bu kısımda bir ödünleşim vardır. Eğer limitler çok sıkıysa, ana bilgisayarda yer olsa bile uygulamanız başarısız olabilir. Eğer limitler çok gevşekse, ana bilgisayar savunmasız hale gelir. Doğru ayarlar, tahmin etmek yerine gerçek kullanımı gözlemlemekten gelir. Temel tüketimi, başlangıç ani yükselişlerini, trafik patlamalarını ve yedekleme pencerelerini değerleri kilitlemeden önce izleyin.
Eğer hizmetiniz Java, Node.js, Python veya PHP-FPM kullanıyorsa, bellek davranışını dikkatlice test edin. Bazı çalışma zamanları, kapsayıcı belleği varsayılan varsayımlardan düşük olduğunda kötü tepki verir. Uygulama çalışma zamanı, kapsayıcı limiti göz önünde bulundurularak ayarlandığında kararlılık iyileşir.
Sağlık kontrolleri ekleyin, ancak anlamlı hale getirin
Bir kapsayıcının "çalışıyor" olması, hizmetin sağlıklı olduğu anlamına gelmez. İşlem, veritabanı bağlantıları öldüğü, disk dolduğu veya uygulama iş parçacığı havuzunun donduğu sırada hala çalışıyor olabilir.
Docker sağlık kontrolleri yardımcı olur, ancak yalnızca gerçek bir şeyi test ederlerse. İyi bir sağlık kontrolü, yalnızca bir bağlantı noktasının açık olduğunu değil, hizmetin trafiğe hizmet etmeye hazır olduğunu doğrular. Bir web uygulaması için, işlem varlığını kontrol etmekten daha iyi, hafif bir iç uç noktasına vurmaktır. İşleyiciler için, kuyruk bağlantısını veya uygulamanın kendisi tarafından güncellenen bir heartbeat dosyasını doğrulamak daha iyi olabilir.
Sağlık kontrollerini çok agresif yapmaktan kaçının. Eğer birkaç saniyede bir çalışırlarsa ve yavaş bir aşağı akış hizmetine bağımlıysalarsa, yanlış hatalar ve yeniden başlatma döngüleri oluşturabilirsiniz. Sağlık kontrolü ucuz, mümkünse yerel olmalı ve gerçek hazır olma durumuna bağlı olmalıdır.
Yeniden başlatma davranışını kazara değil, bilinçli yapın
Yeniden başlatma politikaları dayanıklılığı artırır, ancak temel nedenleri düzeltmez. Bunlar yalnızca hatadan sonra ne olacağını değiştirir.
İş yüküne uygun bir yeniden başlatma politikası kullanın. Her zaman kullanılabilir olması gereken hizmetler genellikle otomatik olarak yeniden başlatılmalıdır. Tek seferlik işler ve geçiş kapsayıcıları, mantıksal bir hata sonrası sonsuza dek yeniden başlatılmamalıdır. Eğer bir kapsayıcı kötü bir yapılandırma nedeniyle her 10 saniyede bir çöküyorsa, otomatik yeniden başlatma günlükler silinene ve ekip müşteri şikayetlerini fark edene kadar sorunu gizleyebilir.
Bu yüzden günlük kaydı ve uyarı mekanizmaları yeniden başlatma politikalarının yanında yer almalıdır. Yeniden başlatma faydalıdır. Sessizce yeniden başlatmak tehlikelidir.
Kalıcı verileri dikkatli kullanın
Durum bilgisi olan kapsayıcılar, durum bilgisi olmayanlara göre daha ilginç şekillerde arızalanır. Veritabanları, dosya işleme uygulamaları ve diske önbellek yapan sistemler tutarlı depolama davranışı gerektirir. Eğer önemli verileri kapsayıcı dosya sistemine yazarsanız, geçici olması tasarlanmış bir şeye bağımlı olursunuz.
Kalıcılık önemlidir yerlerde birim veya harici depolama kullanın. İzinleri açıkça kontrol edin. Hem ana bilgisayarda hem de bağlanan depolamada boş disk alanını izleyin. Birçok "rastgele" çökme aslında yazma hataları, inode tükenmesi veya yavaş depolama nedeniyle uygulama zaman aşımlarına neden olur.
Yedeklemeler burada da önemlidir. Kararlılık sadece ayakta kalmakla ilgili değildir. Aynı zamanda temiz bir şekilde kurtarmakla da ilgilidir. Bozulma sonrası hızlı bir şekilde kurtarılamayan bir hizmet, iş açısından kararlı değildir.
Günlük kaydı olayı atlatmalı
Bir kapsayıcı çöktüğünde, ilk soru basittir: çökmeden hemen önce ne oldu? Eğer cevabınız "emin değiliz" ise, ortamınız henüz yeterince kararlı değil demektir.
Mümkün olduğunca uygulama günlüklerini stdout ve stderr'e gönderin ve Docker günlük sürücünüzün ana bilgisayar için uygun olduğundan emin olun. Eğer günlükler yalnızca kapsayıcının içinde kalırsa, onunla birlikte kaybolurlar. Eğer günlükler çok gürültülü ve yönetilmemişse, diskleri doldururlar ve farklı bir kesintiye neden olurlar.
Yapılandırılmış günlükler, ekiplerin beklediğinden daha fazla yardımcı olur. Zaman damgaları, önem derecesi, istek kimlikleri ve hata kodları tutarlı olduğunda, sorun giderme daha hızlı ve daha az stresli hale gelir. Müşteri odaklı iş yükleri için, yanıt süresindeki bu azalma kararlılığın bir parçasıdır.