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.
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ışı:
SIGTERM’i konteynerin ana sürecine gönderir.
En fazla 10 saniye bekler (-t/--time ile yapılandırılabilir).
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.
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_containerdocker stop my_containerAltyapı:
Bu, my_container’a SIGTERM gönderir ve gerekirse SIGKILL vermeden önce varsayılan 10 saniye bekler.
# Stop all running containers at oncedocker stop $(dockerps-q)Altyapı:
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.
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:
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:
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.
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.
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.
Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Docker'a giriş yapın ve veri uzmanlarının araç setinde Docker'ın önemini keşfedin. Docker konteynerleri, görüntüler ve daha fazlası hakkında bilgi edinin.
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 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 stopkomutunun varsayılan davranışı:SIGTERM’i konteynerin ana sürecine gönderir.-t/--timeile yapılandırılabilir).SIGKILLgönderir.Komut satırı arayüzü (CLI) mekaniği
Varsayılan olarak,
docker stopaynı anda bir konteyneri ele alır. Kabuk özelliklerini kullanarak birden çok konteyneri durduracak şekilde genişletebilirsiniz.Bu,
my_container’a SIGTERM gönderir ve gerekirse SIGKILL vermeden önce varsayılan 10 saniye bekler.Burada,
docker ps -qçalışan tüm konteynerlerin kimliklerini listeler; bu kimliklerdocker stop’a iletilir ve konteynerler sıralı olarak kapatılır.docker ps -qçıktısınındocker 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
--signalbayrağını destekler:Yukarıdaki komut, süreçlerin özel temizlik için
SIGINT’i yakalamasına olanak tanır.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:
Yukarıdaki komut yalnızca
my_image:latesttabanlı konteynerleri durdurur; bu da çok hizmetli projelerde hedefe yönelik kontrol sağlar.Kullanım örnekleri:
--filter "ancestor=test:latest")--filter "label=env=dev")docker ps --filterkullanımının terminal ekran görüntüsüDocker Compose ile otomatik temizleme
docker-compose.ymldosyasında tanımlı hizmetleriniz varsa, tek bir komut ilgili tüm konteynerleri durdurur: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:
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 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.
docker kill’i acil müdahaleler için saklayın; veri tutarsızlıklarından kaçının.-t/--time) ayarlayın.docker system prunegibi komutlarla kapatma sonrası temizliği otomatikleştirin.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:
Bu, herhangi bir konteyner tarafından referans verilmeyen tüm birimleri siler.
Kalıcı Docker daemon süreçlerini kontrol edin:
Varlığını sürdürürlerse başıboş
dockerdalt 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 killkullandı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 uygunSIGTERMyakalayıcıları ekleyin.İzin reddedildi hataları
Gerekli ayrıcalıklar olmadan Docker komutlarını çalıştırmak genellikle hataları tetikler:
sudoekleyin veyadockergrubundaki bir kullanıcı olarak çalıştırın.dockergrubuna ekleyin ve yeniden oturum açın:Oturumu kapatıp yeniden açtıktan sonra Docker komutlarını
sudoolmadan ç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:
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!