Last chance! 50% off DataCamp Premium
Sale ends in
Debian’a Docker kurmak, sisteminizi bozmayacak yöntemi tahmin etmeyi gerektirmemeli.
Çoğu rehber, her birinin ne zaman kullanılacağını açıklamadan birden fazla kurulum seçeneği sunar. Sonuçta Debian deposundan güncel olmayan paketlerle ya da daha da kötüsü, kendi konteynerlerinize erişmenizi engelleyen yetki hatalarıyla kalırsınız. Netice? Uygulamaları dağıtmak yerine saatlerinizi sorun gidermeye harcarsınız.
Debian’ın öngörülebilir sürüm döngüsü ve sarsılmaz kararlılığı, onu üretim Docker dağıtımları için mükemmel kılar. Sürpriz sistem güncellemelerinin kurulumunuzu bozmadığı, tutarlı konteyner performansı elde edersiniz. Teoride, zor kısım olan kurulumdan sonra sorun yaşamamanız gerekir.
Bu eğitimde, dört kurulum yöntemini, temel güvenlik sıkılaştırmasını, depolama yapılandırmasını ve Docker’ı Debian üzerinde güvenilir şekilde çalıştırmak için sorun giderme adımlarını anlatacağım.
Docker’a tamamen yeni misiniz? Kuruluma geçmeden önce Docker’ın temelleriyle başlayın.
Docker çoğu modern Debian sisteminde çalışır, ancak önce bazı gereksinimleri kontrol etmeniz gerekir. Bu bölümde, kuruluma başlamadan önce ihtiyaç duyacağınız sistem gereksinimlerini net şekilde göstereceğim.
Debian 10 (Buster) veya daha yeni sürümler, güncel Docker sürümleri için gereklidir. Debian 9 gibi eski sürümler, yeni Docker Engine yapılarıyla çalışmaz. Çekirdek sürümünüzün 3.10 veya üzeri olması gerekir — son birkaç yılda yapılan çoğu Debian kurulumları bu gereksinimi otomatik olarak karşılar.
Docker paketlerini kurmak ve sistemi yapılandırmak için root erişimi veya sudo ayrıcalıkları gerekir. Docker ayrıca şu temel paketleri ister: apt-transport-https, ca-certificates, curl ve gnupg. Çoğu Debian sisteminde bunlar kurulu gelir, ancak bu süreci ileride doğrulayacaksınız.
Donanım gereksinimleri asgari düzeydedir:
GNOME masaüstü ortamını kullanıyorsanız, gnome-terminal paketinin kurulu olduğundan emin olun. Bazı Docker yönetim araçları, etkileşimli konteyner oturumları için bunu bekler.
Başlamadan önce eski Docker kurulumlarını kaldırın. docker, docker.io veya docker-engine gibi eski paketler, güncel Docker Engine ile çakışabilir. Eski sürümleri temizlemek için şu komutu çalıştırın:
sudo apt remove docker docker-engine docker.io containerd runc
Güvenlik duvarı ve ağ kurulumunuz, konteyner ağ iletişimini etkileyebilir. Docker kendi ağ arayüzlerini ve iptables kurallarını oluşturur. UFW veya özel güvenlik duvarı kuralları kullanıyorsanız, kurulumdan sonra konteyner trafiğine izin vermek için ayarlama yapmanız gerekebilir.
Bu gereksinimleri şimdi kontrol edin — ileride sorun giderme süresinden tasarruf edersiniz.
Debian’a Docker kurmanın dört yolu vardır ve her birinin farklı artı/eksi yönleri bulunur. Ortamınıza ve güvenlik gereksinimlerinize uyan yöntemi seçmenize yardımcı olacağım.
Bunun yerine Ubuntu kurulum talimatlarını mı arıyorsunuz? Ubuntu’da Docker kurulumuna ilişkin adım adım bir rehberimiz var.
Bu yöntem, düzenli güvenlik güncellemeleriyle en yeni Docker sürümünü edinmenizi sağlar.
Docker’ın resmi deposu her zaman en yeni kararlı sürümleri içerir ve paket yöneticiniz üzerinden otomatik güncellemeler alırsınız. Önemli güvenlik yamalarını veya yeni özellikleri kaçıran eski sürümlere takılı kalmazsınız.
Önce sisteminizi güncelleyin ve Docker’ın ihtiyaç duyduğu paketleri kurun:
sudo apt update
sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release
Ardından, paketlerin doğruluğunu sağlamak için Docker’ın resmi GPG anahtarını ekleyin:
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
Depoyu kaynak listenize ekleyerek yapılandırın:
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Son olarak Docker Engine, CLI ve Compose’u kurun:
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
Bu, üretim Docker dağıtımları için ihtiyaç duyduğunuz her şeyi sağlar.
Bu yaklaşım, tek komutla Docker kurar, ancak daha eski bir sürüm elde edersiniz.
Debian’ın varsayılan deposu kurulumu basitleştirir — sadece sudo apt install docker.io komutunu çalıştırın. Ama bir sorun var: Genellikle güncel sürümün aylarca hatta yıllarca gerisinde kalan Docker sürümleri gelir.
sudo apt update
sudo apt install docker.io
Bu yöntem, temel testler için veya uyumluluk amacıyla belirli eski bir sürüme ihtiyaç duyduğunuzda iş görür. Ancak yeni Docker sürümlerinin getirdiği güvenlik güncellemelerini, performans iyileştirmelerini ve yeni özellikleri kaçırırsınız.
Resmi depo bir seçenek olmadığında yalnızca bu yöntemi kullanın.
Depolara erişemediğinizde paketleri doğrudan indirip kurmayı göstereceğim.
Bu yöntem; internet erişimi kısıtlı (air-gapped) sistemler, kurumsal ağlar veya aynı Docker sürümünü birden çok makineye tekrar tekrar indirmeden kurmanız gerektiğinde işe yarar.
DEB paketlerini Docker’ın web sitesinden indirin:
https://download.docker.com/linux/debian/dists/ adresine gidin
Debian sürümünüzü seçin (bullseye, bookworm, vb.)
pool/stable/amd64/ dizinine gidin
Şu paketleri indirin: docker-ce_*.deb, docker-ce-cli_*.deb ve containerd.io_*.deb
Paketleri sırayla kurun:
sudo dpkg -i containerd.io_*.deb
sudo dpkg -i docker-ce-cli_*.deb
sudo dpkg -i docker-ce_*.deb
Bağımlılık hataları alırsanız, düzeltmek için sudo apt-get install -f çalıştırın.
Bu yöntem güncellemeler için daha fazla manuel işlem gerektirir, ancak hangi sürümün kurulacağı üzerinde tam kontrol sağlar.
Anlatacağım son yöntem, test ortamları için hızlı kurulum sunar; ancak önce script’i denetlemelisiniz.
Docker, sisteminizi algılayıp otomatik kurulum yapan script’ler sağlar. Test ortamlarını hızla ayağa kaldırmak ya da birden çok sistemi kurarken kullanışlıdırlar.
curl -fsSL https://get.docker.com -o get-docker.sh
Çalıştırmadan önce script’i mutlaka inceleyin:
cat get-docker.sh
Şüpheli veya beklenmedik bir şey olup olmadığına bakın. Script sistem yapılandırmanızı değiştirecek; bu yüzden ne yaptığını bilmek istersiniz.
İnceledikten sonra script’i çalıştırın:
sudo sh get-docker.sh
Kolaylık script’lerini üretimde kullanmayın. Hızlı kurulum için tasarlanmışlardır; güvenli ve tekrarlanabilir dağıtımlar için değil. Kritik sistemlerde resmi depo yöntemine bağlı kalın.
Özel kısıtlar farklı bir yaklaşım gerektirmedikçe resmi depo yöntemini seçmenizi öneririm.
Kurulum sadece ilk adımdır — bir şey dağıtmadan önce Docker’ın gerçekten çalıştığını doğrulamanız gerekir. Bu hızlı testler, Docker kurulumunuzun gerçek iş yüklerine hazır olup olmadığını gösterir.
Docker sürümünüzü kontrol edin ve kurulumun tamamlandığını doğrulayın:
docker --version
Çıktı olarak Docker version xx.x.x, build x benzeri bir şey görmelisiniz. "command not found" hatası alırsanız, Docker doğru kurulmamış veya PATH’inizde değildir.
Çalışan bileşenleri görmek için ayrıntılı derleme bilgilerini alın:
docker version
Bu komut, istemci ve sunucu sürümlerini ayrı ayrı ve mimari ayrıntıları gösterir. Sunucu bölümü, Docker daemon’unun çalıştığını ve erişilebilir olduğunu doğrular.
Bir test konteyneri çalıştırın ve uçtan uca her şeyin çalıştığını doğrulayın:
docker run hello-world
Docker, hello-world imajını indirip çalıştıracaktır. Her şey doğruysa, Docker konteynerlerinin nasıl çalıştığını açıklayan bir mesaj görürsünüz. Bu test, Docker’ın imaj çekebildiğini, konteyner oluşturup komutları çalıştırabildiğini doğrular.
Ayrıca Docker Compose’un kurulu ve çalışır durumda olduğunu doğrulayabilirsiniz:
docker compose version
Çıktı olarak Docker Compose version vX.xx.x benzeri bir değer görmelisiniz. Yeni Docker kurulumları, eski docker-compose komutu yerine docker compose (boşluklu) kullanır.
Bu komutların tümü hatasız çalışıyorsa, Docker kurulumunuz üretim kullanımı için hazır demektir.
İlk gerçek konteinerinizi çalıştırmaya hazır mısınız? Docker imajlarını adım adım nasıl çalıştıracağınızı öğrenin.
Docker kutudan çıktığı gibi çalışır, ancak günlük kullanım için birkaç ayar yapmak isteyeceksiniz. Bu bölümde, Docker’ı daha kullanışlı ve güvenli kılan servis yönetimi ve kullanıcı izinlerini ele alacağım.
Docker’ın ne zaman çalışacağını şu systemd komutlarıyla kontrol edebilirsiniz:
sudo systemctl start docker # Docker'ı başlat
sudo systemctl stop docker # Docker'ı durdur
sudo systemctl restart docker # Docker servisini yeniden başlat
Sisteminizi başlattığınızda Docker’ın otomatik olarak başlamasını etkinleştirmek için şunu çalıştırın:
sudo systemctl enable docker
Bu, sunucunuzu her yeniden başlattığınızda Docker’ın çalışmasını sağlar; üretim sistemlerinde istediğiniz budur.
Docker’ın çalışıp çalışmadığını ve mevcut durumunu kontrol etmek için şu komutu çalıştırın:
sudo systemctl status docker
Servisin etkin olup olmadığını, ne kadar süredir çalıştığını ve son günlük mesajlarını görürsünüz. Docker çalışmıyorsa, genellikle nedeni de burada görünür.
Servis sorunlarını gidermek için loglara bakın:
sudo journalctl -u docker.service
Bu komut, başlatma sorunları, izin hataları veya yapılandırma problemlerini teşhis etmeye yardımcı olan ayrıntılı Docker daemon günlüklerini gösterir.
Docker komutlarını sudo olmadan çalıştırmak için kullanıcınızı docker grubuna eklemeniz gerekiyorsa:
sudo usermod -aG docker $USER
Bu, mevcut kullanıcınızı docker grubuna ekler ve Docker daemon’u ile iletişim izni verir.
Grup değişikliğinin etkili olması için oturumu kapatıp yeniden açmanız gerekir:
logout
Alternatif olarak, terminal oturumunuzu yeniden başlatın. Oturumdan çıkmadan mevcut oturumda grubu etkinleştirmek için newgrp docker da çalıştırabilirsiniz.
Son olarak, root olmayan erişimi test etmek için şu Docker komutunu çalıştırın:
docker run hello-world
Bu komut sudo olmadan çalışıyorsa, her şey hazır.
Ancak güvenlik açısından şu ödün vardır: docker grubundaki kullanıcıların sisteminizde root’a eşdeğer erişimi olur. Ana makine dizinlerini bağlayabilir, hassas dosyalara erişebilir ve potansiyel olarak konteynerlerden kaçarak ana sistemi tehlikeye atabilirler.
Yalnızca güvendiğiniz kullanıcıları docker grubuna ekleyin ve tüm kullanıcıları kontrol etmediğiniz paylaşımlı sistemlerde bunu asla yapmayın.
Bu ayarları bir kez yapılandırdığınızda, Docker günlük kullanımda çok daha kolay hale gelir.
Docker’ın depolama sürücüsü, konteyner imajlarının ve verilerin sisteminizde nasıl saklanacağını yönetir. Çoğu kullanıcı bunu değiştirmek zorunda kalmaz, ancak seçenekleri anlamak belirli iş yükleri için performansı optimize etmeye yardımcı olur.
Docker, kurulum sırasında sisteminiz için en iyi depolama sürücüsünü otomatik olarak seçer. Debian’da bu genellikle overlay2’dir ve çoğu kullanım durumu için mükemmel performans ve kararlılık sunar.
Geçerli depolama sürücünüzü şu komutla kontrol edin:
docker info | grep "Storage Driver"
overlay2 sürücüsü şu nedenlerle iyi çalışır:
Özel iş yükleri çalıştırıyorsanız veya belirli dosya sistemi gereksinimleriniz varsa farklı bir depolama sürücüsüne ihtiyaç duyabilirsiniz.
Örneğin, bazı kurumsal depolama sistemleri devicemapper ile daha iyi çalışır veya konteyner dosya sistemi sorunlarını hata ayıklamak için vfs’e ihtiyaç duyabilirsiniz.
Depolama sürücüsünü değiştirmek için Docker’ın daemon yapılandırmasını düzenleyin:
sudo nano /etc/docker/daemon.json
Buraya, storage-driver ayarını ekleyin veya değiştirin:
{
"storage-driver": "devicemapper"
}
Değişikliğin uygulanması için Docker’ı yeniden başlatmayı unutmayın:
sudo systemctl restart docker
Uyarı: Depolama sürücüsünü değiştirmek, mevcut konteyner ve imajlarınızı erişilemez hale getirir. Önce önemli verileri yedekleyin veya saklamak istediğiniz konteynerleri dışa aktarın.
Yeni sürücüyü, bir imaj çekip konteyner çalıştırarak test edebilirsiniz:
docker pull hello-world
docker run hello-world
Uzun lafın kısası, belirli gereksinimleriniz farklı bir sürücüyü zorunlu kılmıyorsa overlay2 ile devam edin.
Varsayılan Docker kurulumları geliştirme için uygundur; ancak üretim ortamları ek güvenlik katmanlarına ihtiyaç duyar. Bu yapılandırmalar, ana sisteminizi konteyner kaçışlarına ve kaynak tüketimi saldırılarına karşı korur.
Zorunlu erişim kontrolü, konteynerler ele geçirilse bile neler yapabileceklerini sınırlayan bir güvenlik katmanı ekler. Bu kontroller olmadan, root olarak çalışan bir konteyner, dokunmaması gereken ana kaynaklara erişebilir.
Debian’ın varsayılan güvenlik çerçevesi olan AppArmor’u, şu komutlarla Docker için etkinleştirebilirsiniz:
sudo apt install apparmor-utils
sudo systemctl enable apparmor
sudo systemctl start apparmor
AppArmor çalıştıktan sonra Docker’ın güvenlik profilini yükleyin:
sudo apparmor_parser -r /etc/apparmor.d/docker
Artık AppArmor koruması etkin şekilde konteynerleri çalıştırabilirsiniz:
docker run --security-opt apparmor=docker-default nginx
docker-default profili; dosya sistemi bağlama, ham ağ arayüzlerine erişim ve çekirdek modülü yükleme gibi yetenekleri sınırlar.
SELinux sistemleri için (AppArmor yerine bunu kullanıyorsanız) önce konteyner yönetimini etkinleştirin:
sudo setsebool -P container_manage_cgroup on
Ardından konteynerleri SELinux etiketleriyle çalıştırın:
docker run --security-opt label=type:container_t nginx
Bu kontroller, yaygın konteyner kaçış tekniklerinin çoğunu engeller ve ele geçirilen konteynerlerin verebileceği zararı sınırlar.
Saldırı yüzeyini azaltmak ve güvenlik duruşunu iyileştirmek için Docker daemon ayarlarını özelleştirebilirsiniz (ve etmelisiniz). /etc/docker/daemon.json dosyasını oluşturun veya düzenleyin:
{
"live-restore": true,
"userland-proxy": false,
"no-new-privileges": true,
"icc": false,
"disable-legacy-registry": true
}
Her ayarın yaptığı şudur:
live-restore: true Docker daemon’u çökse bile konteynerleri çalışır halde tutar
userland-proxy: false daha iyi performans için kullanıcı alanı proxy’si yerine doğrudan iptables kullanır
no-new-privileges: true konteynerlerin yeni ayrıcalıklar kazanmasını engeller
icc: false varsayılan olarak konteynerler arası iletişimi devre dışı bırakır disable-legacy-registry: true eski, güvensiz kayıt defteri protokollerine erişimi engeller
Bu değişikliklerden sonra, uygulamak için Docker’ı yeniden başlatın:
sudo systemctl restart docker
Mümkün olduğunda konteynerleri root olmayan kullanıcılarla çalıştırmalısınız:
docker run --user 1000:1000 nginx
Bu, ele geçirilen konteynerlerin sisteminizde yapabileceklerini sınırlar.
Kaynak sınırları olmayan konteynerler, mevcut tüm CPU, bellek ve I/O’yu tüketip sonuçta ana sisteminizi çökertebilir. Kontrol grupları (cgroups), kaynak kullanımına katı sınırlar koyarak bunu engeller.
Aşırı RAM kullanımını önlemek için bellek sınırlarıyla başlayın:
docker run --memory=512m nginx
Tek bir konteynerin işlem gücünü tekeline almasını önlemek için CPU kullanımını da sınırlayabilirsiniz:
docker run --cpus=1.5 nginx
Disk I/O’su yüksek sistemlerde okuma/yazma hızlarını kontrol edin:
docker run --device-read-bps /dev/sda:1mb nginx
Tam kaynak kontrolü için birden fazla sınırı birleştirebilirsiniz:
docker run \
--memory=1g \
--cpus=2 \
--pids-limit=100 \
nginx
Tüm konteynerlerde tutarlı sınırlar için, varsayılanları daemon.json’da yapılandırın:
{
"default-ulimits": {
"nofile": {
"Hard": 64000,
"Name": "nofile",
"Soft": 64000
}
}
}
Bu sınırlar, kaynak tüketimi saldırılarını engeller ve konteynerler arasında adil kaynak paylaşımını sağlar.
Bu güvenlik önlemlerini bir kez yapılandırın; Docker ortamınız çok daha zor ele geçirilebilir hale gelir.
Günlük yönetim için Docker komutlarına hâkim olmanız mı gerekiyor? Bu 18 temel Docker komutu verimliliğinizi artıracak.
Doğru kurulumla bile Docker, konteynerlerin düzgün çalışmasını engelleyen aksaklıklarla karşılaşabilir. İşte en yaygın problemler ve hızlı çözümleri.
Docker izin sorunlarının çoğu, kullanıcınızın Docker’ın soket dosyasına doğru erişime sahip olmamasından kaynaklanır. Got permission denied while trying to connect to the Docker daemon socket gördüğünüzde, henüz docker grubunda olmadığınız anlamına gelir.
Bunun nedeni Docker’ın root olarak çalışması, ancak docker grubundaki üyelerin erişebileceği bir soket oluşturmasıdır. Kendinizi gruba ekleyin:
sudo usermod -aG docker $USER
Değişikliğin etkili olması için oturumu kapatıp yeniden açmanız gerekir. Şimdi çıkmak istemiyorsanız, mevcut oturumda grubu etkinleştirebilirsiniz:
newgrp docker
Konteyner içindeki dosya izin hataları farklıdır ama bir o kadar yaygındır. Bunlar, konteyner sürecinin ana sisteminizden bağladığınız dosyaları okuyamaması veya yazamaması durumunda ortaya çıkar. Konteyner, dosyalarınıza sahip olan kullanıcı kimliğinden farklı bir kimlikle çalışıyor olabilir.
Dosyalarınıza hangi kullanıcının sahip olduğunu kontrol edin:
ls -la /path/to/your/files
Çoğu Docker konteyneri varsayılan olarak 1000 kullanıcı kimliğiyle (UID) çalışır. Dosyalarınız root’a veya farklı bir kullanıcıya aitse, sahipliği değiştirin:
sudo chown -R 1000:1000 /path/to/your/files
AppArmor yerine SELinux kullanıyorsanız, denetim günlüklerinde görünen farklı izin reddi hataları görebilirsiniz. Bunlar daha karmaşıktır çünkü SELinux, yalnızca kullanıcı kimliklerine değil, güvenlik bağlamlarına göre de erişimi kontrol eder.
Son erişim ihlallerini arayın:
sudo ausearch -m avc -ts recent
Docker hacimlerinize doğru etiketleri geri getirerek ve konteyner yönetimini etkinleştirerek SELinux bağlamlarını düzeltin:
sudo setsebool -P container_manage_cgroup on
sudo restorecon -R /path/to/your/volume
Docker başlamadığında veya sürekli çöktüğünde, düzeltmeden önce neyin başarısız olduğunu anlamanız gerekir. systemd servis durumu size hızlı bir genel bakış sunar:
sudo systemctl status docker
Bu komut, Docker’ın çalışıp çalışmadığını ve son hata mesajlarını gösterir. Ancak ayrıntılı sorun giderme için Docker başlatılmaya çalışılırken canlı logları izlemek istersiniz:
sudo journalctl -u docker.service -f
Yaygın bir başlatma hatası, Docker düzgün kapanmadığında oluşur. "failed to start daemon: pid file found, ensure docker is not running." gibi bir hata görürsünüz. Bu, başlatma betiğini şaşırtan artık bir işlem dosyası olduğu anlamına gelir.
Eski dosyayı kaldırın ve tekrar başlatmayı deneyin:
sudo rm /var/run/docker.pid
sudo systemctl start docker
Depolama sorunları, daemon hatalarının bir diğer sık nedenidir. Docker tüm verilerini /var/lib/docker içinde saklar; bu dizinde yer kalmazsa veya bozulursa Docker düzgün başlayamaz.
Mevcut alanı kontrol edin:
df -h /var/lib/docker
Alan azsa, kullanmadığınız eski konteyner ve imajları temizleyin:
docker system prune -a
Ağ çakışmaları da Docker’ın başlamasını engelleyebilir. Bu, Docker’ın varsayılan köprü ağı (genellikle 172.17.0.0/16) mevcut ağ kurulumunuzla çakıştığında olur. Adres aralıklarının kullanılamadığına dair hatalar görürsünüz.
Çakışmayan özel bir köprü IP’si yapılandırarak düzeltin. /etc/docker/daemon.json dosyasını düzenleyin:
{
"bip": "192.168.1.1/24"
}
Değişiklikten sonra yeni ağ yapılandırmasını kullanması için Docker’ı yeniden başlatın:
sudo systemctl restart docker
Docker, konteynerleştirme, ağ ve güvenlik için Linux çekirdek özelliklerine dayanır. Çekirdeğiniz çok eskiyse, yükseltme olmadan düzeltilemeyen sorunlarla karşılaşırsınız.
Hangi çekirdek sürümünü çalıştırdığınızı şu komutla kontrol edin:
uname -r
Docker, temel işlevsellik için en az 3.10 çekirdeğe ihtiyaç duyar; ancak üretim için 4.0 veya daha yenisi tercih edilir. 3.10’dan eski herhangi bir sürüm, modern Docker sürümleriyle basitçe çalışmaz.
Debian’da çekirdeği güncellemek kolaydır; en son çekirdek paketini kurun:
sudo apt update
sudo apt install linux-image-amd64
Yeni çekirdek, sistemi yeniden başlatana kadar etkin olmaz:
sudo reboot
Bazen çekirdek yeterince yenidir ancak belirli çekirdek modülleri yüklenmemiştir. Docker, ağ ve konteyner özellikleri için belirli modüllere ihtiyaç duyar. Ağ arayüzlerinin kullanılamadığına veya konteynerlerin düzgün başlamadığına dair hatalar görebilirsiniz.
Gerekli modülleri elle yükleyin:
sudo modprobe bridge
sudo modprobe ip_tables
sudo modprobe iptable_nat
Bu modüller otomatik olarak yüklenmelidir; ancak yüklenmiyorsa sistem yapılandırmanıza ekleyerek kalıcı hale getirin:
echo "bridge" | sudo tee -a /etc/modules
echo "ip_tables" | sudo tee -a /etc/modules
echo "iptable_nat" | sudo tee -a /etc/modules
Güncel bir çekirdeğiniz olsa bile, "operation not supported" diyen konteyner çalışma zamanı hatalarıyla karşılaşabilirsiniz. Bu genellikle çekirdeğinizin Docker’ın beklediği belirli özellikler olmadan derlendiği anlamına gelir. Ne yazık ki eksik çekirdek özellikleri için geçici çözüm yoktur — düzgün yapılandırılmış bir çekirdeğe ihtiyacınız var.
Docker kurulum sorunlarının çoğu üç alana dayanır: kullanıcı izinleri, servis yapılandırması veya çekirdek uyumluluğu. Belirtileri geçiştirmek yerine altta yatan sorunu düzeltin; Docker ortamınız çok daha kararlı olacaktır.
Konteynerlarda veritabanlarıyla mı çalışıyorsunuz? Docker’da PostgreSQL yapılandırması düşündüğünüzden daha kolay.
Bazen, farklı bir konteyner çalışma zamanına geçmek veya yapılandırma sorunlarından sonra temiz bir başlangıç yapmak için Docker’ı sisteminizden tamamen kaldırmanız gerekir.
Bu süreç sadece paketleri kaldırmaktan ibaret değildir — verileri ve sistem değişikliklerini de temizlemek isteyeceksiniz.
Öncelikle sisteminizden tüm Docker paketlerini kaldırın. Kesin komut, Docker’ı başlangıçta nasıl kurduğunuza bağlıdır.
Resmi Docker deposundan kurduysanız:
sudo apt purge docker-ce docker-ce-cli containerd.io docker-compose-plugin
Debian’ın varsayılan deposundan kurduysanız:
sudo apt purge docker.io docker-compose
Bu işlem paketleri kaldırır ancak diğer paketlerin ihtiyaç duyabileceği yapılandırma dosyalarını ve bağımlılıkları bırakır. Bunları da kaldırmak için:
sudo apt autoremove --purge
Ardından, tüm imajları, konteynerleri ve hacimleri kaldırmak istiyorsanız Docker’ın veri dizinini silin. Bu adım isteğe bağlıdır fakat tam bir temizlik için önerilir.
Docker varsayılan olarak her şeyi /var/lib/docker içinde saklar. Bu dizini kaldırmak, tüm konteynerlerinizi, imajlarınızı, ağlarınızı ve hacimlerinizi kalıcı olarak siler:
sudo rm -rf /var/lib/docker
Docker’ın yapılandırma dizinini de kaldırmalısınız:
sudo rm -rf /etc/docker
Devam edin ve kurulum sırasında Docker’ın oluşturduğu sistem gruplarını ve kullanıcılarını temizleyin. Docker, sisteminize bir docker grubu ekler ve kullanıcı izinlerini değiştirmiş olabilir.
docker grubunu kaldırın:
sudo groupdel docker
Kullanıcıları docker grubuna eklediyseniz, grubu sildiğinizde üyelikler otomatik olarak temizlenir. Ancak isterseniz silmeden önce belirli kullanıcıları gruptan elle de çıkarabilirsiniz:
sudo gpasswd -d username docker
Ardından, Docker’ın systemd servis dosyalarını ve soket dosyalarını kaldırın:
sudo rm -f /lib/systemd/system/docker.service
sudo rm -f /lib/systemd/system/docker.socket
sudo systemctl daemon-reload
Son olarak, hâlâ çalışıyor olabilecek kalan Docker süreçlerini kontrol edin:
ps aux | grep docker
Varsa, elle durdurun:
sudo pkill -f docker
Bu adımlardan sonra Docker, geride dosya veya yapılandırma bırakmadan sisteminizden tamamen kaldırılmış olmalıdır.
Docker’a alternatifleri mi düşünüyorsunuz? Geçiş yapmadan önce diğer konteynerleştirme platformlarını keşfedin.
Artık Debian üzerinde Docker çalışıyor, ancak kurulum sadece başlangıçtır. Docker ortamınızı nasıl yapılandırıp yönettiğiniz, sorunsuz bir üretim deneyimi yaşayıp yaşamayacağınızı veya konteyner sorunlarını geceleri mi çözeceğinizi belirler.
Farklı mimariler için çok platformlu konteynerler mi derliyorsunuz? Docker Buildx çapraz platform derlemeleri kolaylaştırır.
Kısıtlarınıza göre kurulum yöntemini seçin. Çoğu üretim ortamı için resmi Docker deposu en iyisidir; çünkü en yeni özellikler ve güvenlik yamalarını alırsınız. Ancak internet erişimi kısıtlı ağlar veya sürüm tutarlılığı gereksinimleri, bunun yerine manuel DEB kurulumunu gerektirebilir.
Docker ortamınızı hemen güvenli hale getirin. Zorunlu erişim kontrolleri için AppArmor veya SELinux’u etkinleştirin, kısıtlayıcı daemon ayarları yapın ve cgroups ile konteyner kaynaklarını sınırlayın. Docker’ı otomatik güvenlik güncellemeleriyle güncel tutun, ancak önce staging ortamında test edin.
Çoklu konteyner uygulamalar için Docker Compose kullanın. Karmaşık docker run komutlarını yönetmek yerine uygulama yığınınızı YAML ile tanımlayın.
Disk kullanımını izleyin ve düzenli olarak temizleyin. docker system prune ile kullanılmayan imajları kaldırın ve günlük döndürme (log rotation) ayarlayarak konteynerlerin diskinizi doldurmasını önleyin.
Daha ayrıntılı bilgiye ihtiyaç duyduğunuzda, resmi dokümantasyon bu rehberin değinmediği ileri konuları kapsar. Derinlemesine ağ, depolama sürücüleri ve orkestrasyon konuları için Docker dokümantasyonunu inceleyin. Debian Docker paket dokümantasyonu paket özelinde yapılandırmaları ve bilinen sorunları açıklar.
Debian üzerinde Docker, konteynerleştirilmiş uygulamalar için istikrarlı ve güçlü bir platform sunar — ancak bunu, dikkatli yapılandırır ve tutarlı şekilde yönetirseniz.
Docker, konteynerleştirme ve bunların veri bilimi ile makine öğrenimindeki uygulamaları hakkında daha fazla bilgi edinmek ister misiniz? Şu DataCamp kursları en iyi sonraki adımınız:
Resmi Docker deposu yöntemi, üretim ortamları için en iyi seçimdir; çünkü düzenli güvenlik güncellemeleriyle en son kararlı sürümleri sunar. Bu yöntem, Debian’ın varsayılan depolarında bulunmayabilecek en yeni özellikler ve kritik yamaları almanızı sağlar. Ayrıca paket yöneticiniz üzerinden otomatik güncellemelerden yararlanır ve Docker kurulumunuzu elle müdahale olmadan güvende tutarsınız.
Evet, Docker güvenliği temel kurulumun ötesinde dikkatli bir yapılandırma gerektirir. Konteynerler ana çekirdeği paylaşır; bu nedenle ele geçirilen bir konteyner, uygun şekilde izole edilmezse ana kaynaklara potansiyel olarak erişebilir. Zorunlu erişim kontrolleri için AppArmor veya SELinux’u etkinleştirmeli, cgroups ile kaynak sınırları yapılandırmalı ve mümkün olduğunca konteynerleri root olmayan kullanıcılarla çalıştırmalısınız. Ek olarak Docker’ı güncel tutun ve docker grubuna kullanıcı eklemeyi, sistemde root’a eşdeğer erişim verdiği için, kesinlikle gerekli olmadıkça kaçının.
Docker’ın güncel Docker Engine sürümleriyle çalışması için Debian 10 (Buster) veya daha yeni bir sürüm gerekir. Debian 9 gibi eski sürümler, modern Docker’ın ihtiyaç duyduğu çekirdek özellikleri ve paket bağımlılıklarından yoksundur. Eski bir Debian sürümüne bağlıysanız, sisteminizi önce yükseltmeniz gerekir; çünkü Docker’ın konteynerleştirme ve ağ için dayandığı eksik çekirdek işlevleri için güvenilir bir geçici çözüm yoktur.
Docker daemon hataları genellikle üç ana nedenden kaynaklanır: depolama sorunları, ağ çakışmaları veya önceki kurulumlardan kalan işlem dosyaları. df -h /var/lib/docker ile /var/lib/docker dizininde yeterli disk alanı olup olmadığını kontrol edin ve gerekirse docker system prune -a ile temizleyin. Ağ çakışmaları için Docker’ın varsayılan köprü IP’si (172.17.0.0/16) mevcut ağ kurulumunuzla çakışabilir; bu durumda /etc/docker/daemon.json içinde özel bir köprü IP’si yapılandırmalısınız. "pid file found" hataları görürseniz, sudo rm /var/run/docker.pid ile eski dosyayı kaldırın ve servisi yeniden başlatın.
Docker’ı tamamen kaldırmak, sadece paketleri kaldırmaktan fazlasını gerektirir — veri dizinlerini, sistem gruplarını ve servis dosyalarını da temizlemeniz gerekir. sudo apt purge docker-ce docker-ce-cli containerd.io docker-compose-plugin ile Docker paketlerini temizleyerek başlayın; ardından sudo rm -rf /var/lib/docker ile veri dizinini silin (bu işlem tüm konteyner ve imajları kalıcı olarak siler). sudo groupdel docker ile docker grubunu kaldırın, systemd servis dosyalarını silin ve kalan Docker süreçlerini ps aux | grep docker ile kontrol edin. Bu adımlar, yeniden kurulum veya farklı bir konteyner çalışma zamanına geçiş için temiz bir başlangıç sağlar.
DataCamp ile öğrenin
Kurs
Kurs
Kurs

blog
Abid Ali Awan
14 dk.
blog
Dario Radečić
15 dk.
Eğitim
Kurtis Pykes
8 dk.
Eğitim
Adel Nehme