Ana içeriğe geç

Tüm Docker Konteynerlerini Durdurma: Adım Adım Kılavuz

Basit komutlar kullanarak çalışan tüm Docker konteynerlerini nasıl durduracağınızı öğrenin. Bu, sistem kaynaklarını yönetmenize ve Docker ortamınızı sadeleştirmenize yardımcı olur.
· 5 dk. oku

Yapay Zeka ile Keşfedin

Konteynerleri tek tek durdurmak, geliştirme iş akışınızı yavaşlatabilir ve mikro hizmetler veya çok konteynerli uygulamalarla uğraşırken hatalara yol açabilir. 

Bu kılavuzda, çalışan tüm konteynerleri sonlandırmanıza yardımcı olacak birkaç yöntemden bahsedeceğim.

Bu öğreticinin sonunda şunları yapabileceksiniz:  

  • Docker’ın sinyalleri ve bekleme sürelerini nasıl ele aldığını anlamak
  • Basit CLI teknikleri ve filtreler kullanarak tüm konteynerleri durdurmak
  • İş akışlarını sadeleştirmek için Docker Compose ve özel takma adlardan yararlanmak 

Docker Konteyner Sonlandırmayı Anlama

Toplu olarak konteynerleri durdurmadan önce, Docker’ın kapatma işlemlerini perde arkasında nasıl yönettiğini anlamak faydalıdır.

Sinyal tabanlı süreç yönetimi

Docker, zorla sonlandırmadan önce nazik bir kapatma talep etmek için Unix sinyallerini kullanır. docker stop komutunun varsayılan davranışı: 

  1. SIGTERM’i konteynerin ana sürecine gönderir.  
  2. En fazla 10 saniye bekler (-t/--time ile yapılandırılabilir).  
  3. Süreç çıkış yapmadıysa SIGKILL gönderir.
  • SIGTERM: Sürece temizleyip çıkması için kibarca istekte bulunur.  
  • Bekleme süresi: Uygulamaların günlükleri boşaltmasına, bağlantıları kapatmasına veya durumu kaydetmesine zaman tanır.  
  • SIGKILL: Yanıt vermeyen herhangi bir süreci derhal sonlandırır.

Docker stop sinyal sırasını gösteren zaman çizelgesi: SIGTERM, bekleme ve ardından SIGKILL.

Komut satırı arayüzü (CLI) mekaniği

Varsayılan olarak, docker stop aynı anda bir konteyneri ele alır. Kabuk özelliklerini kullanarak birden çok konteyneri durduracak şekilde genişletebilirsiniz.

# Stop a single container named my_container
docker stop my_container

Bu, my_container’a SIGTERM gönderir ve gerekirse SIGKILL vermeden önce varsayılan 10 saniye bekler.

# Stop all running containers at once
docker stop $(docker ps -q)

Burada, docker ps -q çalışan tüm konteynerlerin kimliklerini listeler; bu kimlikler docker stop’a iletilir ve konteynerler sıralı olarak kapatılır.

Tüm konteynerleri kapatmak için docker ps -q çıktısının docker stop içine yönlendirildiği terminal oturumu.

docker ps -q çıktısının docker stop’a yönlendirildiğini gösteren terminal ekran görüntüsü

Bu kavramları daha ayrıntılı anlamak için Konteynerleştirme ve Sanallaştırma Kavramlarını incelemeyi düşünün.

docker stop ve docker kill Karşılaştırması

Nazik ve zorlayıcı sonlandırma arasında seçim yapmak, istenmeyen sonuçlardan kaçınmanıza yardımcı olur.

Nazik vs. anında sonlandırma

Komut

Sinyal(ler)

Davranış

Kullanım senaryosu

docker stop

Zaman aşımından sonra SIGTERM → SIGKILL

Temizleme süresiyle nazik kapatma

Rutin bakım veya güncellemeler

docker kill

SIGKILL

Anında sonlandırma  

Askıda kalmış konteynerlerin acil giderimi

Sinyal özelleştirme

Her iki komut da varsayılanları geçersiz kılmak için bir --signal bayrağını destekler:

# Send SIGINT instead of SIGTERM
docker stop --signal=SIGINT my_container

Yukarıdaki komut, süreçlerin özel temizlik için SIGINT’i yakalamasına olanak tanır.

# Kill all containers with SIGUSR1
docker kill --signal=SIGUSR1 $(docker ps -q)

Görüldüğü gibi, uygulamanız belirli kapatma kancaları uygularsa özel sinyaller kullanabilirsiniz.

Gelişmiş Konteyner Durdurma Stratejileri

Konteyner durdurmayı filtrelemek ve otomatikleştirmek, özellikle büyük ölçekli ortamlarda daha hassas DevOps iş akışlarına olanak tanır.  

Temelleri anladıktan sonra, hangi konteynerleri durdurduğunuzu ve süreci nasıl otomatikleştirdiğinizi ince ayar yapabilirsiniz.

Filtrelenmiş konteyner sonlandırma

Filtreler, imaj adı, durum veya etiketler gibi özniteliklere göre konteynerleri hedeflemenize olanak tanır:

# Stop containers running the my_image:latest image
docker stop $(docker ps --filter "ancestor=my_image:latest" -q)

Yukarıdaki komut yalnızca my_image:latest tabanlı konteynerleri durdurur; bu da çok hizmetli projelerde hedefe yönelik kontrol sağlar.

Kullanım örnekleri:  

  • İmaj etiketiyle test konteynerlerini durdurun (--filter "ancestor=test:latest")  
  • Etikete göre konteynerleri durdurun (--filter "label=env=dev")

Konteynerleri durdurmadan önce docker ps çıktısının köken imaj adına göre filtrelenmesi.

docker ps --filter kullanımının terminal ekran görüntüsü

Docker Compose ile otomatik temizleme

docker-compose.yml dosyasında tanımlı hizmetleriniz varsa, tek bir komut ilgili tüm konteynerleri durdurur:

docker-compose stop

Bu, hizmet bağımlılıklarınıza ve yapılandırılmış zaman aşımlarına uyarak temiz bir kapatma sağlar.

Daha gelişmiş teknikler için Intermediate Docker kursunu düşünebilirsiniz.

Takma ad odaklı iş akışı optimizasyonu

Tekrarlayan görevler için kabuk takma adları yazım ve bağlam değiştirmeyi azaltır:

# Add this to ~/.bashrc or ~/.zshrc
alias ds='docker stop $(docker ps -q)'

Kabuk yeniden yüklendikten sonra ds çalıştırmak, tek tuşla tüm konteynerleri durdurur—hızlı temizlik için idealdir.

Ubuntu WSL'de çalışan tüm Docker konteynerlerini durdurmak için özel 'ds' takma adının başarıyla kullanıldığını gösteren terminal.

Ubuntu WSL’de çalışan tüm konteynerleri durdurmak için 'ds' takma adını kullanma

Operasyonel En İyi Uygulamalar

Güvenli kapatma rutinleri ve düzenli temizlik uygulayarak ortamınızı kararlı ve performanslı tutun.

  • Uygulama kodunuzda bağlantıları kapatmak ve günlükleri boşaltmak için sinyal yakalayıcıları uygulayın.  
  • docker kill’i acil müdahaleler için saklayın; veri tutarsızlıklarından kaçının.  
  • Uygulamanızın temizlik ihtiyaçlarına göre bekleme sürelerini (-t/--time) ayarlayın.  
  • Docker Prune: Uygulamalı Örneklerle Eksiksiz Kılavuz’da açıklandığı gibi docker system prune gibi komutlarla kapatma sonrası temizliği otomatikleştirin.
  • Kapatma olaylarını (zaman damgaları ve çıkış kodları) kaydedin; sonlandırma sorunlarını teşhis edin.

Yaygın Sorunların Giderilmesi

Basit görünen komutlar bile aksayabilir—işte bunları nasıl ele alacağınız.

Zombi süreçler ve sahipsiz birimler

Zorlayıcı sonlandırmalar, ana makine kaynaklarını ve disk alanını tüketen bayat süreçler veya sahipsiz birimler bırakabilir. Temizlemek için:

# Remove dangling volumes
docker volume prune

Bu, herhangi bir konteyner tarafından referans verilmeyen tüm birimleri siler.

Kalıcı Docker daemon süreçlerini kontrol edin:

ps aux | grep dockerd

Varlığını sürdürürlerse başıboş dockerd alt süreçlerini elle sonlandırın.

Gerçek dünya örneği: Bir projede, bir geçiş işlemi askıda kaldığında bir veritabanı konteynerinde docker kill kullandım. Ani öldürme, VT’nin işlem günlüklerini boşaltmasını engelledi ve InnoDB tabloları bozuldu. Yedeklerden geri yükleyip binlog’ları yeniden oynatmak zorunda kaldık; bu da 30 dakikadan fazla kesinti maliyetine yol açtı. Bunu önlemek için, uzatılmış zaman aşımlı docker stop’u tercih edin veya uygulamanıza uygun SIGTERM yakalayıcıları ekleyin.

İzin reddedildi hataları

Gerekli ayrıcalıklar olmadan Docker komutlarını çalıştırmak genellikle hataları tetikler:

  • Komutların başına sudo ekleyin veya docker grubundaki bir kullanıcı olarak çalıştırın.  
  • Kullanıcınızı docker grubuna ekleyin ve yeniden oturum açın:
sudo usermod -aG docker $USER

Oturumu kapatıp yeniden açtıktan sonra Docker komutlarını sudo olmadan çalıştırabilirsiniz. CI ortamında, hattın başarısız olmasını önlemek için çalıştırıcı kullanıcının Docker grubu üyeliğine sahip olduğundan emin olun.

Windows’a özgü hususlar

Windows PowerShell’de alt komutları paranteze alın ve Yönetici olarak çalıştırın:

docker stop (docker ps -q)

PowerShell’i yükseltilmiş haklarla başlatmak, güvenlik duvarı veya erişim denetimi sorunlarını önler. TLS el sıkışma hataları görürseniz, Docker Desktop’ın daemon yapılandırmasının PowerShell ortamınızla eşleştiğini doğrulayın.

Sonuç

Tüm Docker konteynerlerinizi verimli şekilde durdurmak zamandan tasarruf sağlar, kaynakları korur ve geliştirme iş akışınızdaki insan hatasını en aza indirir. Docker’ın sinyal işleme mantığını anlayarak, CLI filtrelerinden yararlanarak, Docker Compose kullanarak ve basit takma adlar oluşturarak temiz ve öngörülebilir bir ortam sürdürebilirsiniz. 

Docker ve Kubernetes ile Konteynerleştirme ve Sanallaştırma yolunu veya Intermediate Docker kursunu keşfederek konteynerleştirme uzmanlığınızı derinleştirin.

Keyifli konteynerleşmeler—temiz ve verimli Docker iş akışlarına!

SSS

docker stop hangi çıkış kodunu döndürür?

Başarılı olursa docker stop 0 döndürür. Sıfır olmayan bir çıkış kodu, bir veya daha fazla konteynerin durdurulamadığını gösterir.

Komutu çalıştırmadan önce hangi konteynerlerin durdurulacağını önizleyebilir miyim?

Evet—docker stop komutunu çalıştırmadan önce çalışan konteynerleri ve kimliklerini veya adlarını doğrulamak için docker ps ya da docker ps -q komutunu çalıştırın.

Yeniden başlatma ilkeleri durdurulan konteynerleri nasıl etkiler?

always gibi bir yeniden başlatma ilkesine sahip konteynerler, durdurulduktan sonra otomatik olarak yeniden başlar. Durdurulmuş kalmalarını istiyorsanız ilkeyi docker update --restart=no <container> ile kaldırın veya değiştirin.

Ağ veya birime göre konteynerleri durdurmanın bir yolu var mı?

Docker, doğrudan docker stop üzerinde ağa veya birime göre filtreleme yapmasa da, komut yerleştirmeyle docker ps --filter "network=<name>" veya docker ps --filter "volume=<name>" birleştirebilirsiniz.

docker stop komutunu bir CI/CD boru hattına nasıl entegre edebilirim?

Durdurma komutunu derleme betiklerinize veya CI işlerinize dahil edin—hedefli kapatmalar için --signal ve filtreler gibi bayrakları kullanın; ardından aynı boru hattında (docker system prune) gibi temizlik komutlarıyla devam edin.

Daha sonra durdurulan tüm konteynerleri yeniden başlatabilir miyim?

Evet, daha önce durdurulmuş olanlar da dahil tüm konteynerleri yeniden başlatmak için docker start $(docker ps -a -q) kullanın.

Tüm konteynerleri durdurmak, onları kaldırır mı?

Hayır, konteynerleri durdurmak onları silmez. docker rm ile kaldırana kadar sisteminizde kalırlar.

Konteynerleri günlük olarak durdurmayı nasıl otomatikleştirebilirim?

Günlük otomatik durdurma planlamak için docker stop $(docker ps -q) komutuyla bir cron işi kullanın.

docker stop birimleri veya ağları etkiler mi?

Hayır, bir konteyneri durdurmak bağlı birimleri veya ağları etkilemez—aynen kalırlar.

Bazı konteynerleri durdurma işleminden hariç tutabilir miyim?

Belirli konteynerleri hariç tutmak için docker ps komutunu filtrelerle kullanabilir veya komuttan belirli konteyner kimliklerini çıkarabilirsiniz.

CLI komutlarının ötesinde konteynerleri yönetmeye yardımcı olacak hangi araçlar var?

Portainer veya Docker Desktop gibi araçlar GUI tabanlı yönetim sunar ve yeni başlayanlar için konteyner kontrolünü kolaylaştırır.

Khalid Abdelaty

Yazar

Khalid Abdelaty

Veri hatları, bulut ve YZ araçları üzerinde çalışan; aynı zamanda DataCamp ve gelişmekte olan geliştiriciler için pratik, yüksek etkili eğiticiler yazan bir veri mühendisi ve topluluk inşacısıyım.

Konular

İlgili