Komutları üretim sunucusunda çalıştırmadan önce yedek alın ve mümkünse bir test ortamında deneyin. Yönetim erişiminizi (SSH, panel) kaybetmemek için ayar değişikliklerinde açık bir ikinci oturum bulundurun.
Bu rehberde ne yapacağız?
Bu rehberde Linux sunucuya resmi depodan Docker kurulumu yapacak, ardından konteynerleri daha güvenli çalıştırmak için temel ayarları uygulayacaksınız: port yayınını sınırlama, yetki düşürme, kaynak sınırları, log döndürme ve sıkça yapılan hatalardan kaçınma. Hosting veya uygulama sunucusu yöneten sistem yöneticilerine yöneliktir.
Tahmini süre: 20-30 dakika.
Gereksinimler
- Debian, Ubuntu veya AlmaLinux/Rocky gibi RHEL tabanlı 64 bit bir sunucu
- sudo yetkisine sahip bir kullanıcı ve internet erişimi
- Üretim sunucusunda deneme yapmadan önce test makinesinde komutları deneyin
- Önemli verileriniz için yedek; daemon ayarını değiştirmek konteynerleri yeniden başlatır
Adım adım Docker kurulumu ve güvenli kullanım
1. Eski paketleri kontrol edin
Dağıtımın kendi docker.io paketi veya eski paketler yüklüyse resmi paketlerle çakışabilir. RHEL tabanlı sistemlerde podman, buildah ve runc paketleri de çakışabilir. Mevcut durumu kontrol edin; paket varsa kaldırmadan önce konteyner verilerinizi yedekleyin.
dpkg -l | grep -Ei 'docker|containerd'
rpm -qa | grep -Ei 'docker|containerd'2. Resmi depoyu ekleyip kurun (Debian/Ubuntu)
Aşağıdaki örnek Ubuntu içindir. Debian kullanıyorsanız adreslerdeki ubuntu ifadesini debian olarak değiştirin.
sudo apt update
sudo apt install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin3. Resmi depoyu ekleyip kurun (AlmaLinux/Rocky)
RHEL tabanlı sistemlerde depo, dnf eklentisiyle eklenir. Depo adresi dağıtım ailesine göre farklılık gösterebilir; sorun yaşarsanız Docker’ın resmi kurulum belgesine bakın.
sudo dnf -y install dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin4. Servisi başlatın ve test edin
sudo systemctl enable --now docker
sudo docker run --rm hello-worldNot: Kullanıcıyı docker grubuna eklemek, o kullanıcıya fiilen root yetkisi vermek demektir. Güvenlik açısından günlük işlerde sudo kullanmak ya da yalnızca güvendiğiniz yöneticileri gruba eklemek daha sağlıklıdır.
5. Portları yalnızca gereken arayüze yayınlayın
Docker, -p ile yayınlanan portlar için kendi güvenlik duvarı kurallarını ekler ve bu kurallar UFW veya firewalld kurallarını atlayabilir. Yalnızca yerelde ya da ters vekil (reverse proxy) arkasında çalışacak servisleri loopback adresine bağlayın.
sudo docker run -d --name web -p 127.0.0.1:8080:80 nginx
sudo ss -tlnp | grep 80806. Konteyner yetkilerini düşürün
Mümkün olduğunda konteyneri root dışı kullanıcıyla çalıştırın, gereksiz Linux yeteneklerini kaldırın, kök dosya sistemini salt okunur yapın ve yetki yükseltmeyi engelleyin. Her uygulama bu kısıtlarla çalışmayabilir; denemeyi test ortamında yapın.
sudo docker run -d --name uygulama --user 1000:1000 --cap-drop ALL --read-only --security-opt no-new-privileges --memory 512m --cpus 1 --pids-limit 200 uygulama-imaji7. Daemon ayarlarını yapın
Log dosyalarının diski doldurmaması için döndürme ayarı ekleyin. Dosya yoksa oluşturun; JSON söz diziminin doğru olduğundan emin olun, hatalı dosya Docker’ın başlamasını engeller.
sudo tee /etc/docker/daemon.json > /dev/null <<'EOF'
{
"log-driver": "json-file",
"log-opts": { "max-size": "10m", "max-file": "3" },
"no-new-privileges": true
}
EOF
sudo systemctl restart docker8. İmajları ve gizli bilgileri yönetin
Yalnızca güvendiğiniz kaynaklardan ve mümkünse resmi imajları kullanın, sürüm etiketi belirtin ve imajları düzenli yeniden oluşturun. Parolaları imaj içine veya komut satırına yazmayın; ortam dosyası veya Docker secrets kullanın. İmaj güvenlik taraması için Trivy gibi araçları değerlendirebilirsiniz.
Doğrulama
sudo docker version
sudo docker info | grep -Ei 'logging driver|cgroup|security'
sudo docker ps
sudo ss -tlnp | grep docker-proxy- docker version hem istemci hem sunucu bilgisini göstermeli
- hello-world konteyneri karşılama mesajını yazmalı
- Dışarıya açmak istemediğiniz portlar docker-proxy çıktısında 127.0.0.1 ile görünmeli
- Başka bir bilgisayardan dışarı açık olmaması gereken porta bağlanma denemesi başarısız olmalı
Sık karşılaşılan sorunlar
- permission denied while trying to connect to the Docker daemon: Komutu sudo ile çalıştırın; gruba eklediyseniz oturumu kapatıp yeniden açın.
- UFW kuralı koydum ama port hâlâ açık: Yayınlanan Docker portları UFW’yi atlar; portu 127.0.0.1 ile yayınlayın veya Docker belgesindeki DOCKER-USER zinciri yöntemini uygulayın.
- Docker başlamıyor: daemon.json içindeki JSON hatasıdır; journalctl -u docker ile mesajı okuyup dosyayı düzeltin.
- Disk doluyor: docker system df ile kullanımı görün; kullanılmayan imajları docker image prune ile temizleyin ve log döndürmeyi açın.
- Konteyner bellek yetersizliğiyle sürekli kapanıyor: --memory sınırını uygulamanın gereksinimine göre artırın.
Güvenlik ve bakım notları
- /var/run/docker.sock dosyasını konteynere bağlamayın; bağlanan konteyner sunucunun tamamını ele geçirebilir
- Docker daemon uzak TCP portunu (2375) kimlik doğrulamasız asla açmayın
- İmajları ve Docker paketlerini düzenli güncelleyin, eski imajları temizleyin
- Veri tutan konteynerlerde birimleri (volume) yedekleyin
- Konteynerleri ayrı kullanıcı ve ayrı ağlarla bölümlendirin; gereksiz --privileged kullanmayın
- Üretimde SELinux veya AppArmor profillerini kapatmayın
Sık sorulan sorular
Docker Compose ayrı kurulmalı mı?
Hayır. Yukarıdaki kurulumda gelen docker-compose-plugin ile docker compose komutu kullanılır. Eski tek dosyalı docker-compose sürümüne ihtiyaç yoktur.
Rootless Docker kullanmalı mıyım?
Rootless mod, daemon’u normal kullanıcı olarak çalıştırarak riski azaltır ancak bazı ağ ve depolama özelliklerinde kısıtlar getirir. Güvenlik önceliğiniz yüksekse resmi belgeyi okuyup uygulamanızla uyumluluğu test edin.
Docker konteyneri sanal makine kadar yalıtılmış mıdır?
Hayır. Konteynerler çekirdeği paylaşır; bu nedenle sanal makineye göre daha zayıf yalıtım sağlar. Farklı müşterilerin iş yüklerini aynı çekirdekte çalıştırırken ek önlemler almanız gerekir.
İlgili sözlük terimleri
Bu kategorideki diğer rehberler
- Docker Compose ile uygulamayı güvenli yayınlama (ağlar, gizli bilgiler, kaynak limitleri)Docker Compose ile uygulamayı güvenli yayınlayın: iç ağlar, secrets ile gizli bilgi yönetimi, bellek ve CPU limitleri, salt okunur dosya sistemi ve sağlık kontrolü.
- Proxmox VE’de LXC konteyner oluşturma ve yönetme (pct)Proxmox VE’de LXC konteyneri pct komutuyla oluşturun, başlatın ve yönetin: şablon indirme, kaynak ayarı, anlık görüntü, yedek ve ayrıcalıksız konteyner güvenliği.
- Proxmox VE’de cloud-init ile sanal makine şablonlarıProxmox VE’de bir cloud-init sanal makine şablonu hazırlayın; qm ile şablondan klonlayıp kullanıcı, SSH anahtarı ve IP ayarlarını saniyeler içinde tanımlayın.
- Proxmox VE küme (cluster) kurulumu: gereksinimler, pvecm, quorum ve dikkat edileceklerProxmox VE küme (cluster) kurulumunu pvecm ile adım adım yapın: ağ ve gereksinimler, düğüm ekleme, quorum mantığı, QDevice ve kümeye girerken dikkat edilecekler.