Öne Çıkanlar
- Docker ile uygulama, bağımlılıkları ve çalışma ortamını tek paket halinde taşınabilir konteynerlere koyarak “bende çalışıyor” sorununu ortadan kaldırırsınız.
- Konteynerler işletim sistemi çekirdeğini paylaşır; bu yüzden hafif ve hızlıdır, ancak kaynaklar (CPU, RAM, disk I/O) yine kritik rol oynar.
- Kaynak limitleri, firewall/port politikaı ve verilerin volume üzerinde tutulması gibi yapılandırmalar esastır; yanlış konfigürasyonlar büyük sorunlara yol açabilir.
- Docker Compose/Dockerfile ile tekrar üretilebilir kurulumlar ve kolay migration mümkündür; imaj yönetimi, log/volume temizlik ve DNS/network ayarları sık karşılaşılan bakım noktalarıdır.
Docker Nedir? Konteyner Teknolojisine Giriş Hakkında Bilmeniz Gerekenler
“Docker Nedir? Konteyner Teknolojisine Giriş” sorusunun arkasında aslında çok tanıdık bir dert var: Geliştirme ortamında sorunsuz çalışan uygulamanın, canlı sunucuda saç baş yoldurması. Bir makinede PHP 8.2 ile uçan proje, diğerinde bağımlılık hatalarıyla çöküyor. İşte Docker tam burada devreye giriyor; “nerede çalıştığının önemi yok, aynı şekilde çalış” diyen bir konteyner mantığı sunuyor. İster yerelde kod yazan bir backend geliştirici ol, ister geceleri “top” komutuna bakan bir sistem yöneticisi… Konteyner teknolojisi, işini hem daha öngörülebilir hem de daha taşınabilir hale getiriyor. Aslında olay şu: Uygulamanı, bağımlılıklarını ve çalıştığı ortamı tek bir paket haline getiriyorsun; bu paket, Docker yüklü her makinede aynı davranışı gösteriyor. Klasik “bende çalışıyor” bahanesini burada gömmüş oluyorsun.
| Özellik | Açıklama |
|---|---|
| Hizmet Türü | Cloud / VDS / Geliştirici Ortamı |
| Hedef Kitle | Geliştirici, DevOps, Sysadmin |
| Zorluk Seviyesi | Orta (Temel Linux bilgisi faydalı) |
| Öne Çıkan Özellik | Taşınabilirlik, Hızlı Dağıtım, İzolasyon |
Şöyle düşün: Bir sunucuda aynı anda onlarca farklı uygulama var. Her biri farklı PHP, Node, Python sürümü istiyor, farklı kütüphanelere ihtiyaç duyuyor. Bunları tek bir işletim sistemi üzerinde “geleneksel” şekilde kurmaya çalıştığında, bir yerden sonra paket sürümleri birbirine giriyor. İşte Docker ve konteyner teknolojisi tam bu karmaşayı çözmek için var. Amaç, her uygulamayı kendi küçük izole kutusuna (konteynerine) koymak ve bu kutuların ana işletim sistemini paylaşarak ama birbirine karışmadan çalışmasını sağlamak.
Aslında durum tam olarak şöyle: Sanal sunucular (VDS / VPS) birer “mini bilgisayar” gibi, üzerinde tam işletim sistemiyle gelir. Docker konteynerleri ise işletim sistemini paylaşır, sadece uygulamayı ve ihtiyaç duyduğu bağımlılıkları paketler. Bu yüzden çok daha hafif, çok daha hızlı açılırlar. Bir WordPress kurulumunu klasik anlamda LAMP stack ile kurmak ile, hazır bir WordPress Docker imajını ayağa kaldırmak arasında ciddi hız ve yönetilebilirlik farkı var.
Burada sık duyduğumuz bir efsane var: “Docker her şeyi hızlandırır.” Hayır, her zaman değil. Evet, dağıtımı ve yönetimi hızlandırır; ama uygulamanın kendisi kötü yazılmışsa, 10 konteyner de kursan uçmaz. Konteyner teknolojisi performans mucizesi değil; tutarlı ortam ve kolay yönetim aracıdır. Aynı şekilde, “Docker varsa artık sunucu yönetimine gerek yok” diyenler de yanılıyor. CPU, RAM, disk I/O hâlâ işin kalbi; konteyner sadece bu kaynakların nasıl paylaştırıldığını değiştiriyor.
Dürüst olmak gerekirse, özellikle cloud sunucu veya VDS üzerinde çoklu proje yönetirken Docker neredeyse vazgeçilmez hale geliyor. Çünkü her proje için ayrı ayrı paket yönetimiyle uğraşmak yerine, her projeyi birer imaj ve konteyner mantığıyla izole edip yönetmek çok daha temiz.
Yapılandırma ve Yönetim: Adım Adım
Kaynak Yönetimi – Limitleri Zorlamayın
Docker Nedir? Konteyner Teknolojisine Giriş deyince çoğu kişi yalnızca “docker run” komutunu öğreniyor, sonra da iş bitti sanıyor. İşin püf noktası şurada: Konteynerler sihirli varlıklar değil, arka planda aynı CPU’yu, aynı RAM’i, aynı diski paylaşıyorlar. Eğer bir konteynerin kaynaklarını sınırlamazsan, tek bir yanlış konfigürasyon bütün sunucuyu kilitleyebilir.
Özellikle küçük VDS veya cloud sunucu kullanıyorsan, her konteyner için CPU ve bellek limitleri koymak gerekiyor. Docker’da --cpus ve -m gibi parametrelerle bu sınırları belirlemek mümkün. Tıpkı paylaşımlı hostingde aşırı kaynak kullanan bir sitenin diğer siteleri yavaşlatması gibi, burada da “tek agresif konteyner” diğerlerini boğabilir.
Genelde kullanıcılarımızdan gelen panik cümlesi şudur: “Sunucuya giremiyorum, SSH bile açılmıyor!” Eğer sunucunda Docker kullanıyorsan ve “aşırı kaynak kullanımı” uyarısı aldıysan, panik yapmadan önce bakacağın ilk yer genelde şu dosya ve komutlar olur:
docker statsçıktısı – hangi konteyner ne kadar CPU / RAM kullanıyor?- Disk için
df -hve özellikle Docker’ın veri dizini (/var/lib/docker) - Yoğun log yazan servisler için konteyner logları:
docker logs <konteyner_adı>
Çoğu zaman sorun, tek bir konteynerin loglarının kontrolsüz büyümesi veya yanlış yapılandırılmış bir servis yüzünden CPU’nun %100’e vurması oluyor. Kaynak limitlerini baştan koymak, sonradan yangın söndürmekten çok daha kolay.
Güvenlik Duvarı ve Port Ayarları
Docker ile çalışan her servis, dış dünyaya açtığın her port kadar güvenli. Dış dünyaya açık her port, gerçekten de açık bir pencere. Bu yüzden docker run -p 80:80 -p 3306:3306 … gibi her şeyi açmak yerine, işine yarayan minimum portları açmalısın.
İşin kritik noktası şu: Docker’ın kendi network yapısı var ve bunu sunucunun firewall (iptables / ufw / firewalld) kurallarıyla uyumlu hale getirmek gerekiyor. Örneğin yalnızca HTTP/HTTPS için 80 ve 443 portlarını açıp, veritabanını sadece Docker ağı içinde erişilebilir bırakmak, dışarıya hiçbir zaman 3306 açmaktan çok daha güvenli.
SSH tarafında da klasik öneri hâlâ geçerli: Varsayılan 22 portunu değiştirmek, şifre ile giriş yerine mümkünse anahtar (key) tabanlı giriş kullanmak. Docker konteyner içinde SSH servisleri çalıştırmak genelde gereksiz; konteyner mantığı zaten “kısa ömürlü” ve “tekrar üretilebilir”. Yönetimi host üzerinden yapmak daha temiz bir yaklaşım.
FTP ise çoğu modern Docker tabanlı mimaride devreden çıkmış durumda. Kod dağıtımı için Git veya CI/CD kullanmak, FTP açmaktan hem daha güvenli hem daha izlenebilir. Eğer klasik web hosting tarafında FTP kullanmak zorundaysan, Docker tarafında en azından bu alışkanlığı azaltmaya çalışmak uzun vadede sana fayda sağlar.
Yazılım Uyumluluğu ve PHP/Veritabanı Seçimi
Docker Nedir? Konteyner Teknolojisine Giriş başlığının en güzel yanlarından biri de şu: Farklı PHP veya veritabanı sürümlerini yan yana, çakıştırmadan çalıştırabiliyorsun. Bir projede PHP 7.4, diğerinde PHP 8.2 mi gerekiyor? Her biri için ayrı imaj kullanırsın, çatışma yaşamazsın.
Peki “En güncel sürüm her zaman en iyisi mi?” sorusuna gelelim. Cevap: Hayır. Özellikle üretim (production) ortamında “en güncel” yerine “en stabil ve desteklenen” sürümü tercih etmek daha mantıklı. Örneğin PHP’de resmi destek sürelerine bakmadan versiyon yükseltmek, Docker imajını güncelledikten sonra uygulamanın bazı fonksiyonlarının patlamasına neden olabilir.
Veritabanı tarafında altın kural şu: Ne kadar az sorgu, ne kadar basit sorgu, o kadar mutlu sunucu. Güçlü bir MySQL/MariaDB veya PostgreSQL sürümü kullanman güzel; ama asıl kazanç indeksleri doğru kullanmak, gereksiz JOIN’lerden kaçınmak, sık kullanılan verileri önbelleğe almak. İyi tasarlanmamış bir veritabanını en güncel imaja koysan da, sorun imajda değil mimaridedir.
Ek olarak, veritabanını konteyner içinde çalıştırıyorsan, verilerin mutlaka harici bir volume üzerinde tutulması gerekir. Aksi halde konteyneri sildiğinde verilerin de gider. “Nasıl olsa Docker her şeyi çözüyor” diye düşünmek burada en tehlikeli yanılgı.
Uygulama: Kurulum ve Yayına Alma
Terminali açın, şu komutu girin demiyorum ama mantık şu: Önce sunucunda Docker ve gerekliyse Docker Compose kurulu mu, onu kontrol ediyorsun. Ardından proje için bir Dockerfile ve gerekiyorsa bir docker-compose.yml dosyası hazırlıyorsun. Bu dosyalarda hangi imajı kullanacağını, hangi portları açacağını, hangi volume’leri bağlayacağını tanımlıyorsun.
Sonrasında imajı bir kere build ediyorsun (veya hazır bir imaj kullanıyorsun), konteyneri ayağa kaldırıyorsun. Ayarlar genelde şu adımları takip ediyor:
- Bağımlılıkların tanımı (örn. PHP eklentileri, Node paketleri, OS paketleri).
- Uygulama dosyalarının imaja kopyalanması.
- Gerekli environment değişkenlerinin (.env) ayarlanması.
- Giriş komutunun (entrypoint / CMD) belirlenmesi.
Genelde 5 dakikadan fazla sürmez; sorun çıktığında ise güzelliği şu: Aynı adımları tekrar tekrar, birebir aynı şekilde çalıştırabilirsin. Bir sunucudan diğerine migration yapmak, klasik “PHP, MySQL, Nginx sürümleri tutacak mı?” stresinden çok daha az sancılı olur.
Bu arada, performansınızı artırmak için Geliştirici Araçları sayfamızdaki diğer çözümlere de bakabilirsiniz. Docker tek araç değil, ama modern geliştirme zincirinin önemli halkalarından biri.
Sık Karşılaşılan Sorunlar ve Pratik Çözümler
| Sorun | Muhtemel Neden | Çözüm |
|---|---|---|
| Site Yavaş Açılıyor | Zayıf önbellekleme veya yüksek sorgu sayısı | Redis/Litespeed Cache kurulumu yapın |
| Bağlantı Zaman Aşımı | Firewall engeli veya hatalı DNS | Port izinlerini kontrol edin |
Docker dünyasında bunlara ekstra olarak şunlar ekleniyor:
- Konteyner sık sık çöküyor: Çoğunlukla yanlış environment değişkeni, eksik bağımlılık veya hatalı entrypoint komutu. Logları okuyup imajı güncellemek gerekir.
- Disk hızla doluyor: Eski imajlar, kullanılmayan volume’ler ve log dosyaları.
docker system pruneile temizlik yapmak iyi bir başlangıçtır ama neyi sildiğini bilerek kullan. - DNS çözümleme sorunları: Özellikle compose ile kurulan servislerin birbirini bulamaması. Servis isimlerini doğru kullanmak ve network tanımlarını net yapmak gerekiyor.
Sıkça Sorulan Sorular
Docker güvenli mi?
Doğru yapılandırıldığında evet, gayet güvenli. Ama konteyner içinde de sonuçta Linux çalışıyor; root olarak koşan, gereksiz port açan, veritabanını dış dünyaya bırakan bir konteyner, klasik bir yanlış yapılandırılmış sunucudan farksız. Ek önlem olarak:
- Gereksiz root haklarından kaçınmak (mümkünse non-root user kullanmak),
- Sadece ihtiyaç duyulan portları yayınlamak,
- İmajları düzenli olarak güncellemek ve güvenilir kaynaklardan almak,
- Verileri her zaman volume üzerinde tutup düzenli yedeklemek,
güvenlik açısından ciddi fark yaratır. SSL sertifikası ile trafiği şifrelemek için de klasik yöntem aynen geçerli; özellikle canlı sistemlerde SSL sertifikası kullanmak artık lüks değil, zorunluluk.
Fiyat/Performans dengesi nasıl kurulur?
Konteyner kullandığın için “daha düşük donanım yeter” yanılgısına düşmemek gerekiyor. Fiyat/performans dengesinin temel formülü şöyle:
- Üzerinde kaç konteyner çalışacağını kabaca hesapla.
- Her biri için tahmini CPU/RAM ihtiyacını belirle (örneğin, her web konteyneri için 256–512 MB RAM gibi).
- Toplam kaynağın %70’ini planla, %30’unu ani trafik artışları için boş bırak.
Buna göre bir VDS veya cloud sunucu planı seçmek genelde en sağlıklısı. En ucuz sunucu her zaman en iyi tercih değil; özellikle I/O performansı konteyner yoğun ortamlarda çok kritik.
Taşıma (Migration) işlemi zor mu?
Klasik sunucu kurulumlarına göre çok daha kolay. Çünkü Docker’da asıl taşıdığın şey, imaj ve volume’ler. Aynı Docker Compose dosyasını yeni sunucuya kopyalayıp volume’leri aktardığında, mimari neredeyse birebir aynı şekilde ayağa kalkıyor. Biz Bilhost tarafında, Docker tabanlı projelerde de sunucu taşıma sürecini olabildiğince basit tutmaya çalışıyoruz; ister geleneksel hosting, ister konteyner tabanlı yapı olsun, kaynakları analiz edip minimum kesintiyle migration planı çıkarıyoruz. İhtiyaç olursa teknik ekibimizle birlikte adım adım bu süreci yönetmek mümkün.
Sonuç
İşin özü şu: Docker Nedir? Konteyner Teknolojisine Giriş sadece bir kavram değil, günlük operasyonu rahatlatan çok pratik bir yaklaşım. Uygulamaların her ortamda aynı şekilde çalışması, artık lüks değil, neredeyse gereklilik. Konteyner teknolojisi, doğru kullanıldığında hem geliştiriciye hem sistem yöneticisine nefes aldırıyor; ama hâlâ CPU, RAM, disk ve ağ gibi temel kaynaklar oyunun kuralını belirliyor. Teknoloji ne kadar karmaşık görünürse görünsün, doğru yapılandırma hayat kurtarır. Eğer bir yerde takılırsan biz buradayız, yorumlarda sorularını bekliyorum.
