Docker etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Docker etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

10 Haziran 2026 Çarşamba

Kubernetes ve Docker Swarm: Konteyner Yönetimi için En İyi Seçenek

Konteynerleştirme teknolojisi, modern yazılım geliştirme ve dağıtımı için temel bir bileşen haline geldi. Kubernetes ve Docker Swarm, konteyner yönetimi için iki popüler çözüm olarak karşımıza çıkıyor. Bu rehberde, her iki çözümün avantajları, dezavantajları ve teknik özellikleri karşılaştırılacak.

Kubernetes

Kubernetes, açık kaynaklı bir konteyner yönetim platformudur. Google tarafından geliştirilen ve Container Orchestration olarak bilinen bu teknoloji, konteynerlerin dağıtımı, ölçeklenmesi ve yönetimi için tasarlanmıştır. Kubernetes, Pod, ReplicaSet, Deployment ve Service gibi bileşenleri kullanarak konteynerlerin yaşam döngüsünü yönetir.

Docker Swarm

Docker Swarm, Docker tarafından geliştirilen bir konteyner yönetim platformudur. Docker Swarm, konteynerlerin dağıtımı, ölçeklenmesi ve yönetimi için tasarlanmıştır. Docker Swarm, Node, Service ve Task gibi bileşenleri kullanarak konteynerlerin yaşam döngüsünü yönetir.

Karşılaştırma

Kubernetes ve Docker Swarm, her ikisi de konteyner yönetimi için güçlü çözümler sunar. Ancak, bazı önemli farklılıklar vardır. Kubernetes, daha fazla esneklik ve yapılandırma seçeneği sunarken, Docker Swarm, daha basit ve kolay kullanılır bir arayüze sahiptir. Scalability açısından, Kubernetes, daha büyük ölçekli dağıtımlar için daha uygunken, Docker Swarm, daha küçük ölçekli dağıtımlar için daha uygun olabilir.

Güvenlik açısından, her iki çözüm de güvenlik özellikleri sunar. Ancak, Kubernetes, daha gelişmiş güvenlik özellikleri sunar, such as Network Policies ve Secrets Management. Docker Swarm, daha basit güvenlik özellikleri sunar, such as Swarm Mode ve Node Encryption.

Sonuç olarak, Kubernetes ve Docker Swarm, her ikisi de konteyner yönetimi için güçlü çözümler sunar. Seçim, dağıtımın ölçeği, güvenlik gereksinimleri ve yönetim kolaylığı gibi faktörlere bağlı olarak yapılmalıdır.

24 Mayıs 2026 Pazar

Kubernetes ve Docker Swarm Arasındaki Rekabet: 2026 Perspective

2026 yılında, konteynerleştirme ve orkestrasyon teknolojileri daha da olgunlaştı. Bu bağlamda, Kubernetes ve Docker Swarm arasındaki rekabet hala devam ediyor. Bu makalede, bu iki popüler konteyner orkestrasyon aracının karşılaştırmasını yapacağız.

Kubernetes, Google tarafından geliştirilen ve open-source bir platformdur. Containerd, CRI-O gibi konteyner runtime environment'lerini destekler. Kubernetes, yüksek ölçeklenebilirlik ve esneklik sunar, ancak karmaşıklığı nedeniyle öğrenme eğrisi daha yüksektir.

Kubernetes Avantajları

Kubernetes, otomatik yük dengeleme, otomatik ölçekleme ve self-healing gibi özellikleri sunar. Ayrıca, etcd gibi dağıtılmış veri depolama sistemlerini destekler. Kubernetes, güvenlik açısından da güçlü bir seçenek sunar, çünkü Network Policies ve Secrets gibi özellikleri içerir.

Docker Swarm Avantajları

Docker Swarm, Docker tarafından geliştirilen ve konteynerleştirme için tasarlanan bir orkestrasyon aracıdır. Docker Swarm, basitlik ve kolaylık sunar, çünkü Docker ile yakın entegrasyonu vardır. Docker Swarm, geliştirme ve test ortamları için ideal bir seçimdir.

Karşılaştırma

Kubernetes ve Docker Swarm arasındaki seçim, proje ve ihtiyaçlara bağlıdır. Kubernetes, büyük ölçekli ve karmaşık projeler için daha uygunken, Docker Swarm, küçük ölçekli ve basit projeler için daha uygundur. Güvenlik ve ölçeklenebilirlik açısından Kubernetes daha güçlü bir seçenek sunar.

Sonuç olarak, Kubernetes ve Docker Swarm arasındaki rekabet, konteynerleştirme ve orkestrasyon teknolojilerinin gelişmesine katkıda bulunmuştur. Her iki araç da avantaj ve dezavantajlara sahiptir, ancak proje ve ihtiyaçlara bağlı olarak seçim yapılabilir.

9 Mayıs 2026 Cumartesi

Jenkins ve GitLab ile Güçlü DevSecOps Pipelines Oluşturma Rehberi

DevSecOps, geliştirme, güvenlik ve operasyon ekiplerini bir araya getirerek, yazılım teslimatını hızlandırırken güvenlik ve kaliteyi artırma amacını taşır. Bu amaçla, Jenkins ve GitLab gibi araçlar, DevSecOps pipelines oluşturmak için sıklıkla kullanılır. Bu rehberde, Jenkins ve GitLab kullanarak güçlü DevSecOps pipelines oluşturmanın teknik adımlarını inceleyeceğiz.

Temel Bileşenler

DevSecOps pipelines oluştururken, aşağıdaki bileşenleri dikkate almak önemlidir:

  • Jenkins: Otomasyon sunan bir CI/CD aracıdır. Kod değişikliklerinin derlenmesi, test edilmesi ve dağıtılması için kullanılır.
  • GitLab: Kaynak kodu yönetiminde kullanılan bir platformdur. Ayrıca, CI/CD pipeline'larını yönetmek için de kullanılır.
  • Docker: Uygulamaları konteynırlar içinde çalıştırmak için kullanılan bir teknolojidir. Bu, uygulamaların farklı ortamlarda tutarlı bir şekilde çalışmasını sağlar.

Pipeline Oluşturma Adımları

Aşağıdaki adımları takip ederek, Jenkins ve GitLab ile güçlü bir DevSecOps pipeline oluşturabilirsiniz:

  1. Kaynak Kodunu Hazırlama: Uygulamanızın kaynak kodunu GitLab'da bir depoda tutun.
  2. Jenkins Projesini Ayarlama: Jenkins'de bir proje oluşturun ve GitLab deposunu bağlayın.
  3. CI/CD Pipeline'ını Tanımlama: Jenkins'de bir pipeline oluşturun ve derleme, test ve dağıtım aşamalarını tanımlayın.
  4. Güvenlik Kontrollerini Entegre Etme: Pipeline'a güvenlik kontrollerini entegre edin. Örneğin, OWASP ZAP gibi araçları kullanarak güvenlik taramaları gerçekleştirebilirsiniz.
  5. Dağıtım: Uygulamayı Docker konteynırları içinde dağıtın.

DevSecOps pipelines oluştururken, güvenlik ve kaliteyi önceliklendirmek önemlidir. Jenkins ve GitLab kullanarak güçlü bir pipeline oluşturarak, uygulamanızın güvenlik ve kalitesini artırabilirsiniz.

19 Mart 2026 Perşembe

Kubernetes ve Docker Swarm Arasındaki Rekabet: 2026 Perspektifinden Konteyner Orkestrasyonu

Konteyner orkestrasyonu, modern yazılım geliştirme ve dağıtım süreçlerinin temel bir bileşenidir. Kubernetes ve Docker Swarm, bu alanda öne çıkan iki popüler çözüm olarak dikkat çekmektedir. 2026 yılına girerken, bu iki teknolojinin karşılaştırılması, geliştiricilerin ve sistem yöneticilerinin doğru kararlar almasına yardımcı olacaktır.

Kubernetes

Kubernetes, açık kaynaklı bir konteyner orkestrasyon sistemidir. Google tarafından geliştirilmiş ve Cloud Native Computing Foundation (CNCF) tarafından sürdürülmektedir. Kubernetes, yüksek düzeyde esneklik, ölçeklenebilirlik ve güvenilirlik sunar. Pod olarak adlandırılan konteyner gruplarını yöneterek, dağıtım, ölçekleme ve self-healing gibi özellikleri sağlar.

Docker Swarm

Docker Swarm, Docker tarafından geliştirilen bir konteyner orkestrasyon aracıdır. Docker ekosisteminin bir parçası olarak, konteynerlerin kolayca dağıtılabilmesi ve yönetilebilmesi için tasarlanmıştır. Docker Swarm, service olarak adlandırılan konteyner gruplarını yöneterek, dağıtım, ölçekleme ve yük dengeleme gibi özellikleri sağlar.

Karşılaştırma

Kubernetes ve Docker Swarm arasındaki temel farklar, komplexite, esneklik ve ölçeklenebilirlik açısından ortaya çıkmaktadır. Kubernetes, daha kompleks ve esnek bir sistem olarak, büyük ölçekli dağıtımlar için daha uygunken, Docker Swarm, daha basit ve leicht bir çözüm olarak, küçük ve orta ölçekli projeler için daha uygundur.

Ölçeklenebilirlik açısından, Kubernetes, daha yüksek bir seviyede ölçeklenebilirlik sunar. Cluster olarak adlandırılan nods gruplarını yöneterek, binlerce konteynerin dağıtılabilmesine olanak sağlar. Docker Swarm ise, daha küçük ölçekli dağıtımlar için daha uygun olup, yüzlerce konteynerin yönetilebilmesine olanak sağlar.

Güvenlik açısından, her iki çözüm de, network policies ve secret management gibi özellikleri sağlar. Ancak, Kubernetes, daha gelişmiş bir güvenlik sistemi sunar, role-based access control (RBAC) ve network policies gibi özellikleri içerir.

Sonuç olarak, Kubernetes ve Docker Swarm arasındaki seçim, projenin özel gereksinimlerine ve ölçeklenebilirlik ihtiyaçlarına bağlıdır. Kubernetes, büyük ölçekli dağıtımlar için daha uygunken, Docker Swarm, küçük ve orta ölçekli projeler için daha uygundur.

10 Şubat 2026 Salı

Docker ile Lokal Geliştirmede Gelişmiş Hızlandırma: BuildKit, Cache ve Multi-Stage Build Rehberi

Docker ile “Neden Bu Kadar Yavaş?” Sorununu Kökten Çözmek

Docker kullanarak geliştirme yapmak artık standart hâline geldi; ancak birçok ekip, konteyner imajı alırken “her seferinde her şeyi baştan indiriyor” hissiyle boğuşuyor. Özellikle Node.js, Python, Go veya Java tabanlı projelerde bağımlılıkların kurulumu ve katmanların tekrar tekrar oluşması, CI süreçlerini ve yerel geliştirmeyi ciddi biçimde yavaşlatabiliyor. Bu yazıda, Docker’ın modern derleme altyapısı olan BuildKit ile daha hızlı build alma, doğru cache stratejisi kurma ve multi-stage derlemelerle daha küçük imaj üretme konusunu ileri seviye ama uygulanabilir bir şekilde ele alacağım.

1) BuildKit Nedir ve Neden Önemli?

BuildKit, Docker build sürecini daha akıllı hâle getiren yeni nesil derleme motorudur. Paralel adım çalıştırma, gelişmiş cache yönetimi ve “secret” gibi güvenlik odaklı özellikler sunar. En önemli etkisi, doğru yazılmış bir Dockerfile ile build sürelerini gözle görülür şekilde azaltmasıdır. Ayrıca BuildKit, “cache’i dışarı aktar, başka makinede kullan” gibi senaryolara da kapı açar; bu da özellikle CI/CD ortamlarında altın değerindedir.

BuildKit’i etkinleştirmek için genellikle ekstra kurulum gerekmez. Terminalde tek seferlik şu şekilde kullanabilirsiniz: DOCKER_BUILDKIT=1 docker build .. Docker Desktop kullananlarda çoğu zaman varsayılan olarak açıktır. BuildKit ile birlikte buildx komutu da devreye girer ve cache ihracı/ithali gibi gelişmiş işlevler pratikleşir.

2) Dockerfile’da Katman Mantığını Doğru Kullanmak

Docker build hızının temelinde katman (layer) cache’i vardır. Basit kural şudur: Sık değişen dosyaları (uygulama kodu) daha sona, nadir değişenleri (bağımlılık tanımları) daha başa koyun. Örneğin Node.js için package.json ve package-lock.json dosyaları bağımlılık değişmediği sürece sabit kalır. Bu dosyaları önce kopyalayıp bağımlılıkları kurarsanız, uygulama kodu değişse bile bağımlılık katmanı cache’ten gelir.

Örnek mantık: Önce COPY package*.json, sonra RUN npm ci, en son COPY . .. Python tarafında benzer şekilde requirements.txt önce kopyalanır, pip install sonra çalışır. Bu yaklaşım “her değişiklikte yeniden bağımlılık kurma” hatasını ortadan kaldırır.

3) BuildKit Cache Mount ile Bağımlılık Kurulumunu Hızlandırmak

BuildKit’in en güçlü taraflarından biri, belirli dizinleri build sırasında cache olarak bağlayabilmesidir. Böylece paket yöneticileri (npm, pip, apt) her seferinde internetten indirmek yerine yerel/BuildKit cache’inden yararlanır. Bu özellik klasik layer cache’inden farklıdır; layer bozulsa bile cache mount sayesinde indirme havuzu korunabilir.

Örneğin Debian/Ubuntu tabanlı imajlarda apt için: RUN --mount=type=cache,target=/var/cache/apt gibi bir yaklaşım mümkündür. Node.js için npm cache dizinini, Python için pip cache dizinini cache mount ile tanımlamak özellikle CI’da büyük hız kazandırır. Buradaki kritik nokta, bu yöntemin BuildKit gerektirmesidir; yani eski “docker build” davranışına göre daha moderndir.

4) Multi-Stage Build ile Küçük ve Güvenli İmaj

Performans sadece build süresi değildir; imaj boyutu ve saldırı yüzeyi de önemlidir. Multi-stage build yaklaşımıyla, derleme için gereken araçları (ör. derleyiciler, dev bağımlılıklar) bir “builder” aşamasında tutup, çalıştırma aşamasına sadece gerekli çıktıları taşıyabilirsiniz. Bu sayede imaj küçülür, deploy hızlanır, container açılış süreleri kısalır ve olası güvenlik açıkları azalır.

Örneğin Go projelerinde ilk aşamada binary derlenir, ikinci aşamada ise “scratch” veya minimal bir base imaj üzerinde yalnızca binary çalıştırılır. Node.js tarafında ise build aşamasında webpack/tsc gibi araçlar kullanılırken, runtime aşamasında sadece derlenmiş çıktı ve üretim bağımlılıkları tutulur. Bu ayrım, üretim ortamında “devDependencies” taşıma hatasını da engeller.

5) .dockerignore: Sessiz Kahraman

Bir başka sık yapılan hata, build context’in gereksiz şişmesidir. Docker, build ederken bulunduğunuz dizini (context) daemon’a gönderir. Eğer node_modules, dist, log dosyaları, test çıktıları gibi klasörler context’e giriyorsa hem gönderim süresi uzar hem de cache beklenmedik şekilde bozulur. Burada .dockerignore dosyası devreye girer.

Temel öneri: node_modules, .git, dist, coverage, *.log gibi öğeleri .dockerignore ile hariç tutun. Bu, özellikle monorepo yapılarda ve büyük projelerde build hızını dramatik biçimde etkiler.

6) CI/CD İçin Cache İhracı: buildx ile Bir Üst Seviye

Yerelde cache iyi çalışsa bile CI ortamında “her şey baştan” problemi devam edebilir. BuildKit ve buildx ile cache’i registry’ye veya bir dosya deposuna dışa aktarabilirsiniz. Böylece farklı CI koşucularında bile cache yeniden kullanılabilir. Mantık olarak, bir build’in ürettiği cache metadata’sı sonraki build’e beslenir ve özellikle bağımlılık kurulumları ile derleme adımları hızlanır.

Bu yaklaşım, sık deploy eden ekiplerde maliyeti de azaltır: daha kısa çalışan pipeline, daha az kaynak tüketimi demektir. Buradaki püf nokta; cache stratejisini proje yapısına göre doğru kurgulamak ve Dockerfile katmanlarını mantıklı sıralamaktır. Aksi hâlde cache ihracı yapsanız bile, küçük bir değişiklik her şeyi geçersiz kılabilir.

Sonuç: Hız, Doğru Alışkanlıkların Yan Ürünü

Docker build sürelerini kısaltmak için tek bir “sihirli komut” yok; ama BuildKit’i etkin kullanmak, Dockerfile katmanlarını doğru düzenlemek, cache mount ile paket indirimi tekrarını azaltmak ve multi-stage build ile imajı inceltmek birlikte güçlü bir etki yaratır. Eğer her commit’te dakikalarca build bekliyorsanız, sorunun kaynağı genellikle yanlış katmanlama veya şişkin build context’tir. Bugün küçük bir Dockerfile refaktörü yaparak hem yerelde hem CI’da daha akıcı bir geliştirme deneyimi yakalayabilirsiniz.

9 Şubat 2026 Pazartesi

Docker ile Lokal Yapay Zekâ Modeli Çalıştırma: Ollama Kurulumu ve Open WebUI ile Web Arayüzü

Giriş: Bulutta Değil, Kendi Bilgisayarında Yapay Zekâ

Yapay zekâ modellerini denemek için çoğu kişi web servislerine yöneliyor. Ancak hem gizlilik hem de maliyet açısından, modeli kendi bilgisayarında çalıştırmak ciddi avantaj sağlayabiliyor. Bu rehberde güncel ve pratik bir yaklaşımı ele alacağım: Ollama ile yerel (local) LLM çalıştırmak ve bunu Docker üzerinden Open WebUI ile şık bir web arayüzüne bağlamak. Sonuçta tarayıcıdan sohbet edebileceğiniz, API erişimi sunan ve tamamen sizin kontrolünüzde bir kurulum elde edeceksiniz.

Ön Gereksinimler

Kuruluma başlamadan önce şunlara ihtiyacınız var: Docker (Docker Desktop ya da Linux üzerinde Docker Engine), temel terminal kullanımı, en az 8 GB RAM (tercihen 16 GB ve üzeri) ve yeterli disk alanı. Modeller boyuta göre 2–10+ GB arası yer kaplayabiliyor. GPU şart değil; CPU ile de çalışır ama performans beklentinizi buna göre ayarlamanız gerekir.

Adım 1: Ollama Kurulumu (Host Üzerinde)

Ollama, popüler açık kaynak modelleri yerel ortamda kolayca indirip çalıştırmanızı sağlayan bir araç. Windows ve macOS için yükleyicisi var; Linux tarafında ise resmi kurulum komutu ile hızlıca kurulabiliyor. Kurulumdan sonra Ollama varsayılan olarak 11434 portunda bir servis gibi çalışır ve API sağlar.

Kurulumun doğru yapıldığını test etmek için terminalden bir model çalıştırabilirsiniz. Örneğin: ollama run llama3.1. İlk çalıştırmada model indirileceği için bekleme süresi internet hızınıza bağlı olarak değişir. İndirme tamamlandığında komut satırında doğrudan sohbet edebildiğinizi görürsünüz.

Adım 2: Docker ile Open WebUI Kurulumu

Komut satırından sohbet etmek iş görse de çoğu kullanıcı için tarayıcı tabanlı bir arayüz daha konforlu. Open WebUI bu noktada devreye giriyor: modern bir arayüz, sohbet geçmişi ve model seçimi gibi özellikleri tek yerde topluyor. Open WebUI’yi Docker ile çalıştırmak hem güncellemeyi kolaylaştırır hem de sisteminizi “temiz” tutar.

Aşağıdaki örnek komut, Open WebUI konteynerini ayağa kaldırır. Buradaki kritik nokta, Open WebUI’nin Ollama API’sine erişebilmesi. Eğer Ollama host üzerinde çalışıyorsa, Docker konteynerinden host’a erişim yöntemi işletim sistemine göre değişebilir. Docker Desktop (Windows/macOS) için genellikle host.docker.internal kullanılabilir.

Örnek Docker komutu:
docker run -d --name open-webui -p 3000:8080 -e OLLAMA_BASE_URL=http://host.docker.internal:11434 -v open-webui:/app/backend/data --restart unless-stopped ghcr.io/open-webui/open-webui:main

Adım 3: Linux Kullanıcıları İçin Host Erişimi

Linux’ta host.docker.internal her zaman otomatik gelmeyebilir. Bu durumda iki pratik seçenek var: (1) Ollama’yı da Docker içinde çalıştırmak, (2) konteynerin host ağına erişimini ayarlamak. En basit yaklaşım çoğu senaryoda Ollama’yı da Docker’a almak olur; fakat rehberin amacında “host üzerinde Ollama + Docker’da arayüz” olduğu için, Linux’ta genellikle host IP’sini ya da ağ yapılandırmasını kullanmak gerekir. Örneğin host’un yerel IP’si 192.168.1.10 ise OLLAMA_BASE_URL değeri http://192.168.1.10:11434 olabilir.

Diğer bir yöntem, bazı Docker sürümlerinde ekstra parametreyle host ismini çözümletmektir. Ancak ağ yapılandırmaları sistemden sisteme değiştiği için, en stabil yöntem çoğu kullanıcı için host IP’sini kullanmaktır.

Adım 4: Open WebUI Üzerinden Model Yönetimi

Konteyner çalıştıktan sonra tarayıcıdan http://localhost:3000 adresine gidin. İlk açılışta bir kullanıcı oluşturmanız istenir. Ardından ayarlarda Ollama bağlantısını doğrulayabilir, indirdiğiniz modelleri listede görebilirsiniz. Eğer listede model görünmüyorsa genellikle iki sebep olur: OLLAMA_BASE_URL yanlış girilmiştir ya da Ollama servisi çalışmıyordur.

Model seçerken donanımınıza uygun boyutta kalmak önemli. Daha küçük modeller (ör. 7B civarı) günlük kullanımda daha akıcı yanıt verir. Daha büyük modeller daha iyi muhakeme sağlayabilir ama RAM ve işlemciye yük bindirir. Open WebUI, aynı anda birden fazla sohbet oturumu açmanıza da izin verir; bu da farklı “denemeleri” yan yana götürmek için kullanışlıdır.

Performans ve Güvenlik İpuçları

Yerel yapay zekâ kurulumunda performansı etkileyen en büyük faktör, modelin boyutu ve sistem kaynaklarıdır. Arka planda gereksiz uygulamaları kapatmak, modeli ilk kez çalıştırdıktan sonra sistemin “ısınmasına” izin vermek ve mümkünse SSD üzerinde çalışmak hız kazandırır. Ayrıca bu kurulumun güzel tarafı, verilerinizin dışarı çıkmamasıdır; ancak yine de Open WebUI’yi internetten erişilebilir hale getirecekseniz güçlü parola, ters proxy ve HTTPS gibi temel önlemleri almalısınız.

Son olarak, Docker ile çalıştığınız için güncelleme oldukça basit: yeni imajı çekip konteyneri yeniden oluşturabilirsiniz. Veri kaybı yaşamamak için volume kullanımını (örnekte open-webui:/app/backend/data) ihmal etmeyin.

Sonuç

Ollama + Open WebUI ikilisi, yerel yapay zekâ deneyimini “kur, çalıştır ve yönet” seviyesine taşıyor. Bulut maliyetlerine girmeden, API ve web arayüzü rahatlığını aynı anda elde etmek mümkün. Eğer geliştirme yapıyorsanız, Ollama’nın sunduğu yerel API ile uygulamalarınıza hızlıca entegrasyon da ekleyebilirsiniz. Kendi bilgisayarınızda, kendi kurallarınızla çalışan bir LLM kurulumu için bu yaklaşım güncel ve oldukça pratik bir seçenek.

7 Şubat 2026 Cumartesi

Cloudflare Tunnel ile Evdeki Sunucunuza Statik IP Olmadan Güvenli Erişim (Adım Adım Kurulum)

Cloudflare Tunnel nedir ve neden tercih edilmeli?

Evde NAS, Raspberry Pi, mini PC ya da bir Docker sunucusu çalıştırıyorsanız, dışarıdan güvenli erişim genellikle iki seçeneğe sıkışır: port yönlendirme (NAT) veya VPN. Port yönlendirme pratik görünse de güvenlik riskleri ve dinamik IP gibi sorunlar doğurabilir. Cloudflare Tunnel (eski adıyla Argo Tunnel) ise statik IP’ye ihtiyaç duymadan, router’da port açmadan ve servislerinizi doğrudan internete maruz bırakmadan dış erişim sağlayan modern bir yöntemdir.

Tunnel mantığı basittir: Yerel ağınızdaki bir “connector” (cloudflared) Cloudflare’a doğru dışarıya bir bağlantı başlatır. Dışarıdan gelen istekler Cloudflare üzerinden bu tünel aracılığıyla içerdeki servise iletilir. Böylece ev IP’niz ifşa olmaz, saldırı yüzeyiniz küçülür ve Cloudflare’ın WAF/Rate Limiting gibi korumalarıyla entegre olursunuz.

Ön koşullar

Bu öğreticide örnek olarak yerel ağda çalışan bir web servisini (ör. http://localhost:8080) yayınlayacağız. İhtiyacınız olanlar: Cloudflare hesabı, Cloudflare’a eklenmiş bir alan adı (ör. example.com), tüneli çalıştıracağınız bir makine (Linux önerilir; Docker da olur) ve yayınlanacak servis.

Not: Cloudflare Tunnel ile yalnızca web uygulamaları değil, uygun yapılandırma ile çeşitli TCP servisleri de yönetilebilir. Ancak en temiz ve güvenli senaryo, HTTP/HTTPS tabanlı servisleri Cloudflare Access ile kimlik doğrulama ekleyerek yayınlamaktır.

1) Cloudflare’da Tunnel oluşturma

Cloudflare paneline girin ve ilgili domaini seçin. Sol menüde Zero Trust (veya “Access/Zero Trust”) bölümüne geçin. Buradan Networks > Tunnels menüsünü açıp Create a tunnel ile yeni bir tünel oluşturun. Tünele anlaşılır bir ad verin (ör. “ev-sunucu”).

Cloudflare size kurulum adımlarını gösterecek. Bu aşamada iki yol var: doğrudan binary kurmak ya da Docker ile çalıştırmak. İleri seviye kullanıcılar için Docker, otomasyon ve taşınabilirlik açısından daha rahattır.

2) Docker ile cloudflared çalıştırma

Cloudflare panelinde “Run the connector” adımında bir token üretilir. Bu token tünelin kimliğidir. Token’ı kopyalayın ve tüneli çalıştıracağınız makinede aşağıdaki komutu kullanın:

docker run -d --name cloudflared --restart unless-stopped cloudflare/cloudflared:latest tunnel --no-autoupdate run --token YOUR_TOKEN

Bu komut, cloudflared’ı arka planda başlatır ve makine yeniden başladığında otomatik ayağa kaldırır. Sorun yaşarsanız logları görmek için:

docker logs -f cloudflared

Burada “connected” benzeri bir ifade görüyorsanız tüneliniz Cloudflare’a başarıyla bağlanmıştır.

3) Public hostname tanımlama (subdomain yönlendirme)

Şimdi dış dünyadan erişilecek adresi belirleyeceğiz. Yine Zero Trust panelinde ilgili tünelin içine girin ve Public Hostnames bölümünden yeni kayıt ekleyin. Örneğin:

Subdomain: panel
Domain: example.com
Path: (boş bırakabilirsiniz)
Service: http://localhost:8080

Bu ayarla https://panel.example.com isteği Cloudflare üzerinden tünelinize gelir ve yereldeki 8080 portuna yönlenir. Router’da port açmadığınız için servisiniz “internete açık” hale gelmez; yalnızca Cloudflare tüneli üzerinden erişilebilir olur.

4) Güvenliği bir üst seviyeye taşıma: Cloudflare Access

Tünel çalışsa bile erişimi herkese açık bırakmak istemezsiniz. Cloudflare’ın en büyük artısı burada başlar: Access policy ile kimlerin gireceğini belirleyebilirsiniz. Zero Trust panelinde Access > Applications bölümüne gidip “Self-hosted” uygulama ekleyin ve aynı hostname’i (panel.example.com) seçin.

Ardından bir politika tanımlayın. Örneğin yalnızca belirli e-posta adreslerine izin verin (Google/Microsoft ile SSO da mümkün). Bu sayede URL’yi bilen herkes değil, sadece yetkili kullanıcılar giriş yapabilir. Bu yaklaşım klasik Basic Auth’tan daha esnek ve denetlenebilir bir güvenlik katmanı sunar.

5) Sık yapılan hatalar ve ipuçları

Servis “Bad Gateway” veriyor: Genellikle yereldeki servis yanlış portta çalışıyordur veya yalnızca 127.0.0.1 yerine belirli bir arayüze bağlıdır. Docker içinden başka bir konteynıra yönlendiriyorsanız ağ ayarlarınızı kontrol edin.

HTTPS/sertifika konusu: Cloudflare dışarıya HTTPS sunar. İçerideki servisiniz HTTP olabilir; bu yaygın bir kullanımdır. Ancak içeride de TLS istiyorsanız origin sertifikası gibi seçenekler mevcut.

Performans ve gecikme: Tunnel trafiği Cloudflare POP’ları üzerinden geçer. Çoğu ev senaryosunda gecikme farkı ihmal edilebilir düzeydedir; asıl sınır genellikle ev internetinizin upload hızıdır.

Log ve izleme: Zero Trust üzerinden bağlantı denemelerini ve Access loglarını inceleyin. Şüpheli denemelerde rate limiting veya ek erişim kısıtları uygulayabilirsiniz.

Sonuç

Cloudflare Tunnel, evde barındırdığınız servisleri statik IP olmadan, port açmadan ve daha kontrollü şekilde yayınlamak için güncel ve güçlü bir çözümdür. Özellikle Cloudflare Access ile birlikte kullanıldığında, “herkese açık admin paneli” gibi riskli senaryoları neredeyse tamamen ortadan kaldırır. Eğer self-hosted uygulamalarınız var ve güvenliği ciddiye alıyorsanız, bu yaklaşım modern bir varsayılan haline gelmeye başladı.

6 Şubat 2026 Cuma

Siber Güvenlikte Otomasyon: Docker ve Proxmox ile Sanal Ortamların Güvenli Yapılandırılması

Siber güvenlik, günümüzde teknolojinin her alanına nüfuz ettiği için kritik bir öneme sahip. Siber güvenlik measuresının etkili bir şekilde uygulanması, veri güvenliği ve sanal ortamların korunması için çok önemlidir. Bu makalede, Docker ve Proxmox gibi araçların kullanımı ile sanal ortamların güvenli bir şekilde yapılandırılmasının nasıl möglich olduğunu inceleyeceğiz.

Amaç

Sanal ortamların güvenli yapılandırılması, siber tehditlere karşı korunmak için çok önemlidir. Bu amaçla, sanal makinelerin ve konteynırların güvenli bir şekilde oluşturulması ve yönetilmesi için otomasyon araçları kullanılmaktadır. Bu makalede, Docker ve Proxmox gibi araçların kullanımı ile sanal ortamların güvenli yapılandırılmasının nasıl mümkün olduğunu inceleyeceğiz.

TEKNİK MANTIGI

Docker ve Proxmox, sanal ortamların oluşturulması ve yönetilmesi için kullanılan popüler araçlardır. Docker, konteynır tabanlı bir sistemdir ve uygulamaların bağımsız olarak çalışmasını sağlar. Proxmox, sanal makinelerin oluşturulması ve yönetilmesi için kullanılan bir diğer araçtır.

Ön Koşullar

Bu makalede anlatılan adımları takip edebilmek için, aşağıdaki ön koşullara sahip olmak gerekir: - Linux işletim sistemi hakkında temel bilgi sahibi olmak - Docker ve Proxmox hakkında temel bilgi sahibi olmak - Sanal makineler ve konteynırlar hakkında temel bilgi sahibi olmak

Adım Adım Anlatım

Aşağıdaki adımları takip ederek, Docker ve Proxmox kullanarak sanal ortamların güvenli bir şekilde yapılandırılmasını sağlayabilirsiniz:

Adım 1: Docker ve Proxmox kurulumu

İlk adım, Docker ve Proxmox araçlarını kurmaktır. Docker ve Proxmox resmi sitelerinden indirerek kurulumu gerçekleştirebilirsiniz.

Adım 2: Sanal makinelerin oluşturulması

Proxmox kullanarak sanal makineler oluşturabilirsiniz. Sanal makineler, uygulamaların bağımsız olarak çalışmasını sağlar.

Adım 3: Konteynırların oluşturulması

Docker kullanarak konteynırlar oluşturabilirsiniz. Konteynırlar, uygulamaların bağımsız olarak çalışmasını sağlar.

Adım 4: Güvenlik ayarlarının yapılandırılması

Güvenlik ayarları, siber tehditlere karşı korunmak için çok önemlidir. Docker ve Proxmox kullanarak güvenlik ayarlarını yapılandırabilirsiniz.

SONUÇ

Bu makalede, Docker ve Proxmox kullanarak sanal ortamların güvenli bir şekilde yapılandırılmasının nasıl mümkün olduğunu inceledik. Siber güvenlik measuresının etkili bir şekilde uygulanması için, sanal ortamların güvenli bir şekilde yapılandırılması çok önemlidir. Docker ve Proxmox gibi araçlar, sanal ortamların güvenli bir şekilde oluşturulması ve yönetilmesi için kullanılır.

5 Şubat 2026 Perşembe

Docker + Podman ile Rootless Container Kurulumu: Güvenli ve Güncel Bir Geliştirici Rehberi

Rootless container nedir, neden gündemde?

Container dünyası uzun süre “Docker kur, daemon root çalışsın, bitti” kolaylığıyla yürüdü. Ancak güvenlik tarafında bu yaklaşımın maliyeti var: root yetkisiyle çalışan bir servis, yanlış yapılandırma veya zafiyet durumunda sistemin tamamını riske atabilir. Rootless container yaklaşımı ise container’ları ve ilgili süreçleri root olmayan kullanıcıyla çalıştırarak saldırı yüzeyini ciddi biçimde küçültür. Son yıllarda Podman’ın popülerleşmesi ve Docker’ın rootless modunun olgunlaşmasıyla bu yaklaşım masaüstünde ve sunucuda daha ulaşılabilir hale geldi.

Bu yazıda, Linux üzerinde hem Docker Rootless hem de Podman ile rootless çalışmayı kurup günlük kullanım için pratik hale getireceğiz. Hedefimiz “kurulum bitti” demek değil; ağ, port, volume ve servis yönetimi gibi gerçek hayatta takılınan noktaları da ele almak.

Ön koşullar ve temel kavramlar

Rootless çalışmanın temelinde Linux’un user namespace kabiliyeti yatar. Kısaca, container içindeki “root” kullanıcı kimliği, host üzerinde normal bir kullanıcıya eşlenir. Bu sayede container içi root yetkileri host’a taşınmaz. Rootless kurulumlarda ayrıca genellikle slirp4netns (kullanıcı modunda ağ), fuse-overlayfs (overlay dosya sistemi) ve uid/gid map yapılandırması gibi parçalar devreye girer.

Kontrol etmeniz gereken ilk şey, sistemde yeterli kullanıcı ID aralığının tanımlı olmasıdır. Aşağıdaki dosyalarda kullanıcı adınıza ait satırların olması idealdir: /etc/subuid ve /etc/subgid. Örnek bir satır şu şekildedir: kullanici:100000:65536. Bu, rootless container’ların içerideki kullanıcılarını host üzerinde izole bir ID aralığına eşlemeyi sağlar.

Seçenek 1: Docker Rootless kurulumu ve kullanımı

Docker’ı rootless kullanmak istiyorsanız, dağıtımınızın paketleriyle Docker Engine kurulu olmalı ve ardından rootless “setup tool” çalıştırılmalıdır. Kurulum mantığı şudur: root yetkisiyle çalışan sistem servisi yerine, kullanıcı oturumunuz altında çalışan bir Docker daemon devreye girer. Bu sayede docker komutları da root olmadan çalışır.

Kurulumdan sonra iki kritik nokta vardır: Birincisi, Docker istemcisinin hangi sockete bağlanacağını bilmesi. Rootless modda genellikle socket yolu kullanıcı dizini altındadır. Bu yüzden DOCKER_HOST değişkenini ayarlamak gerekebilir. İkincisi, rootless ağ sürücüsü nedeniyle bazı port yönlendirmelerinde farklı davranışlar görülebilir.

Günlük kullanımda en çok karşılaşılan konu 80/443 gibi düşük portlardır. Root olmayan bir süreç bu portları doğrudan açamaz. Çözüm olarak 8080/8443 gibi portlar kullanılabilir veya sistemde düşük portlara izin veren bir ayar yapılabilir. Alternatif olarak ters proxy (Nginx/Caddy) root yetkisiyle değil, yetkili bir servis olarak konumlandırılıp backend’e yüksek porttan bağlanabilir.

Volume tarafında ise rootless modda dosya izinleri daha görünür hale gelir. Host’taki dosya sahipliği, container içi kullanıcı eşleşmesine göre yorumlanır. Eğer “container yazamıyor” gibi bir durum yaşıyorsanız, çoğu zaman mesele uygulamanın container içindeki kullanıcı UID’si ile host’taki dizin izinlerinin uyuşmamasıdır. Çözüm, uygulamayı uygun kullanıcıyla çalıştırmak veya host dizin sahipliğini/izinlerini düzenlemektir.

Seçenek 2: Podman ile daemon’suz rootless deneyim

Podman’ın en güçlü tarafı, daemon gerektirmeden çalışmasıdır. Rootless senaryoda bu avantaj daha da anlam kazanır: kullanıcı oturumunuz altında, her şey “normal bir süreç” gibi çalışır. Podman ayrıca Docker’a benzer bir CLI sunduğu için geçiş bariyeri düşüktür. Birçok komut birebir aynıdır; hatta isterseniz “docker” alışkanlıklarınızı sürdürmek için uyumluluk katmanları kullanabilirsiniz.

Podman ile rootless kullanımda ağ genellikle slirp4netns ile sağlanır. Bu, performans olarak kernel seviyesindeki bridge çözümlerinden bir miktar geride olabilir; ama masaüstü geliştirme, CI işleri ve çok sayıda servis çalıştırmayan senaryolarda gayet yeterlidir. Eğer daha ileri seviye ağ ihtiyaçlarınız varsa, Podman ekosisteminde farklı ağ sürücüleri ve sistem entegrasyon seçenekleri bulunur.

Podman’ın pratik bir artısı da podman generate systemd yaklaşımıdır. Rootless container’larınızı bir systemd user servisi gibi yönetebilir, oturum açınca otomatik başlatabilirsiniz. Bu sayede “terminali kapatınca container duruyor” derdi azalır. Bunun için kullanıcı systemd biriminin etkin olduğundan emin olmak ve “linger” benzeri ayarlarla oturum kapalıyken de çalıştırmak isteyebilirsiniz (sunucu senaryosunda faydalı).

Hangisini seçmeli? Karar matrisi

Docker Rootless, Docker ekosistemiyle sıkı bağlı ekipler için mantıklıdır. Compose dosyaları, üçüncü parti araçlar ve CI şablonları Docker merkezliyse, rootless moda geçiş görece kolay olur. Öte yandan rootless kısıtlarıyla uyumlu hale getirmek için port, volume ve ağ tarafında biraz disiplin gerekir.

Podman ise “daemon istemiyorum, kullanıcı oturumumda yalın çalışsın” diyenler için güçlü bir alternatiftir. Ayrıca systemd entegrasyonu ve rootless felsefesi daha doğal bir çizgide ilerler. Eğer yeni bir proje başlatıyor, yerel geliştirmede güvenliği varsayılan yapmak istiyorsanız Podman ciddi bir adaydır.

İleri seviye ipuçları: Güvenlik ve bakım

Rootless kullanıyorsanız yine de bazı iyi pratikleri uygulamak gerekir. Öncelikle container’larda minimum yetki yaklaşımını sürdürün: gereksiz capability’leri kapatın, “privileged” moddan kaçının. İkinci olarak imaj kaynağına dikkat edin; resmi veya güvenilir registry’lerden çekin ve imajları düzenli güncelleyin. Üçüncü olarak log ve veri dizinlerini kontrol altında tutun; kullanıcı dizini altında büyüyen loglar zamanla disk sorunlarına yol açabilir.

Son olarak, rootless container’lar her derde deva değildir. Örneğin çok düşük port gereksinimi, kernel modülleriyle etkileşim, özel ağ topolojileri veya yüksek performanslı network senaryolarında rootful kurulum daha uygun olabilir. Ancak modern geliştirme akışlarının büyük çoğunluğu için rootless yaklaşım, güvenlik-kullanışlılık dengesinde çok iyi bir noktaya oturur.

Özet: Rootless container, “güvenliği sonradan eklemek” yerine varsayılan yapmak isteyenler için güncel ve güçlü bir yaklaşım. Docker Rootless daha tanıdık bir ekosistem sunarken, Podman daha yalın ve daemon’suz bir deneyim vadediyor. İkisini de denedikten sonra kendi iş akışınıza en iyi uyanı seçmeniz, uzun vadede daha az sürpriz ve daha güvenli bir çalışma ortamı anlamına gelir.

30 Ocak 2026 Cuma

Windows 11’de WSL2 ile Docker Desktop Kullanmadan Docker Kurulumu ve İnce Ayar Rehberi

Docker Desktop olmadan neden Docker?

Windows 11 kullanırken Docker ile çalışmanın en popüler yolu Docker Desktop kurmak. Ancak kurumsal lisans kısıtları, kaynak tüketimi veya “arka planda sürekli servis” yaklaşımını sevmeme gibi sebeplerle daha hafif ve kontrol edilebilir bir seçenek arayanların sayısı artıyor. Bu yazıda, WSL2 üzerinde Docker Engine kurarak Docker Desktop olmadan konteyner çalıştırmayı adım adım anlatacağım. Ayrıca performans, ağ erişimi ve sık görülen hatalar için pratik ince ayarları da ekleyeceğim.

Ön koşullar

Bu rehber Windows 11 ve WSL2 mantığını temel alır. İhtiyacınız olanlar: Windows 11, yönetici yetkisi, WSL2 etkinleştirilmiş bir Linux dağıtımı (Ubuntu önerilir) ve PowerShell/Windows Terminal. WSL sürümünüzü kontrol etmek için PowerShell’de wsl -l -v komutunu kullanabilirsiniz. Dağıtımınızın “VERSION” değeri 2 değilse, wsl --set-version Ubuntu 2 ile dönüştürebilirsiniz.

1) WSL2 üzerinde Docker Engine kurulumu

Ubuntu’yu açın ve önce sistem paketlerini güncelleyin:

sudo apt update && sudo apt upgrade -y

Docker’ın resmi deposunu eklemek için gerekli paketleri kurun:

sudo apt install -y ca-certificates curl gnupg

Docker GPG anahtarını ekleyin ve depo kaydını oluşturun:

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo $VERSION_CODENAME) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Ardından Docker Engine ve temel bileşenleri kurun:

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

2) Servis yönetimi: systemd ve Docker’ın başlatılması

Güncel WSL sürümlerinde systemd desteği mevcut. Etkinleştirirseniz Docker’ı normal Linux gibi servis olarak yönetebilirsiniz. Ubuntu içinde şu dosyayı düzenleyin:

sudo nano /etc/wsl.conf

İçine şunu ekleyin:

[boot]
systemd=true

Sonra Windows tarafında WSL’i yeniden başlatın (PowerShell):

wsl --shutdown

Ubuntu’yu tekrar açınca Docker servisini başlatın:

sudo systemctl enable --now docker

Kontrol:

docker version
docker info

3) sudo yazmadan Docker kullanmak (güvenli kullanım notuyla)

Sürekli sudo yazmak istemiyorsanız kullanıcıyı docker grubuna ekleyebilirsiniz:

sudo usermod -aG docker $USER

Oturumu kapatıp açın veya WSL’i yeniden başlatın. Not: Docker grubu pratik ama güçlü yetkilere sahiptir; paylaşımlı makinelerde dikkatli olun.

4) Hızlı test: nginx konteyneri çalıştırma

Kurulumun doğru olduğunu görmek için küçük bir test iyi olur:

docker run --rm -d --name web -p 8080:80 nginx:alpine

Ardından tarayıcıda http://localhost:8080 adresini açın. WSL2 ağ katmanı sayesinde port yönlendirme genellikle sorunsuz çalışır. İşiniz bitince durdurun:

docker stop web

5) İnce ayar: disk performansı ve proje konumu

WSL2 + Docker kullanımında en kritik konu dosya sistemi performansıdır. Projenizi Windows dosya sisteminde (ör. /mnt/c/...) tutup konteyner içinde bind mount yaparsanız, yoğun I/O işlemlerinde yavaşlık görebilirsiniz. Daha iyi performans için kaynak kodunu WSL Linux dosya sisteminde (ör. /home/kullanici/proje) konumlandırın. Editör olarak VS Code kullanıyorsanız Remote - WSL eklentisiyle bu akış oldukça rahattır.

6) Sık karşılaşılan sorunlar ve çözümler

“Cannot connect to the Docker daemon” hatası alıyorsanız çoğunlukla servis çalışmıyordur: sudo systemctl status docker ile kontrol edin, gerekirse sudo systemctl restart docker deneyin. Systemd aktif değilse, önce /etc/wsl.conf ayarını doğrulayın ve wsl --shutdown ile tamamen kapatıp açın.

Port çakışması yaşarsanız (ör. 8080 doluysa) farklı bir port seçin: -p 8081:80. Ayrıca bazı güvenlik yazılımları veya şirket VPN’leri localhost portlarını etkileyebilir; sorun yaşarsanız geçici olarak kapatıp test etmek mantıklı olur.

Kaynak tüketimi için WSL’e limit koyabilirsiniz. Windows kullanıcı dizininizde .wslconfig dosyası oluşturup bellek/CPU sınırı vermek, özellikle uzun süre açık kalan geliştirme makinelerinde sistemi rahatlatır. Örneğin 4 GB RAM ve 4 çekirdek sınırı çoğu orta ölçekli iş için yeterlidir.

Sonuç

Docker Desktop olmadan Docker kullanmak, özellikle “hafif ve kontrol edilebilir” bir geliştirme ortamı isteyenler için güçlü bir alternatif. WSL2 üzerinde Docker Engine kurduğunuzda hem Linux ekosisteminin doğallığını korur hem de Windows tarafındaki iş akışınızı bozmadan konteynerlerle çalışabilirsiniz. Doğru proje konumu seçimi ve systemd ile servis yönetimi gibi küçük dokunuşlar, deneyimi ciddi biçimde iyileştirir.

28 Ocak 2026 Çarşamba

Docker ile Yerel LLM Çalıştırma: Ollama Kurulumu, Model Yönetimi ve API ile Entegrasyon

Yerelde yapay zekâ neden bu kadar popüler oldu?

Bulut tabanlı yapay zekâ servisleri hızlı ve pratik; ancak maliyet, gecikme, veri gizliliği ve entegrasyon esnekliği gibi başlıklarda her zaman ideal değiller. Özellikle hassas verilerle çalışan ekipler için yerelde (lokalde) çalışan büyük dil modelleri (LLM) ciddi bir avantaj sağlıyor. Son dönemde bu ihtiyacı en pratik şekilde karşılayan araçlardan biri de Ollama. Bu yazıda, Ollama’yı Docker ile kurup yerelde model çalıştırmayı, model yönetimini ve basit bir API kullanımını adım adım ele alıyorum.

Ollama nedir, ne işimize yarar?

Ollama, LLM’leri bilgisayarınızda çalıştırmayı kolaylaştıran bir çalışma zamanı ve model yönetim katmanı gibi düşünebilirsiniz. “Modeli indir, çalıştır, API üzerinden çağır” akışını sadeleştirir. Birçok model ailesini desteklemesi ve komut satırı üzerinden hızlı bir deneyim sunması sayesinde geliştiriciler arasında hızla yayıldı. Ayrıca yerel bir HTTP API sunduğu için, kendi uygulamanızdan bu modeli sanki bir servis gibi tüketebilirsiniz.

Kurulum ön koşulları

Bu rehberde Docker tabanlı bir kurulum anlatacağım. İhtiyacınız olanlar: Docker (ve mümkünse Docker Compose), yeterli disk alanı (model boyutuna göre 5–20 GB+), ve tercihen güçlü bir CPU/GPU. GPU hızlandırma her sistemde aynı kolaylıkta olmasa da, CPU ile de temel denemeler yapılabilir. Komutlar Linux/macOS için uygundur; Windows’ta WSL2 ile benzer şekilde ilerleyebilirsiniz.

Docker ile Ollama’yı çalıştırma

Önce kalıcı bir veri dizini kullanmak iyi bir fikirdir; çünkü modeller indirildiğinde container silinse bile tekrar indirmek zorunda kalmazsınız. Aşağıdaki komut, Ollama’yı arka planda ayağa kaldırır ve varsayılan API portunu (11434) dışarı açar:

Komut:

docker run -d --name ollama \ -p 11434:11434 \ -v ollama:/root/.ollama \ ollama/ollama

Bu noktada servis çalışır durumdadır. Kontrol etmek için:

docker logs -f ollama

İlk modelinizi indirme ve çalıştırma

Ollama, model yönetimini komut satırından çok kolaylaştırır. Container içine girip bir model çekebilir veya doğrudan “exec” ile komut çalıştırabilirsiniz. Örneğin küçük ve hızlı bir modelle başlamak mantıklıdır. Aşağıdaki örnekte bir modeli indirip interaktif şekilde çalıştırıyoruz:

docker exec -it ollama ollama run llama3

İlk çalıştırmada model indirileceği için biraz bekleyebilirsiniz. İndirme bittiğinde sohbet ekranı açılır; Türkçe istem (prompt) verip yanıt alabilirsiniz. Daha iyi yanıtlar için isteminizi net tutun: amaç, bağlam, çıktı formatı gibi detayları belirtin.

Model yönetimi: listeleme, silme, güncelleme

Disk alanı yerel LLM dünyasında hızlı tükenir. Bu yüzden indirilen modelleri düzenli yönetmek önemli. Yüklü modelleri listelemek için:

docker exec -it ollama ollama list

Kullanmadığınız bir modeli silmek için:

docker exec -it ollama ollama rm llama3

Modeli tekrar çekmek/güncellemek için aynı “run” komutu ya da ilgili pull akışı kullanılabilir. Ayrıca aynı modelin farklı varyantları (ör. boyut, quantization) performans ve kaliteyi ciddi etkiler. Daha küçük quantization daha hızlıdır ama doğruluk ve akıcılık düşebilir. Bu dengeyi kendi kullanım senaryonuza göre test ederek bulmanız gerekir.

HTTP API ile entegrasyon: uygulamaya bağlamak

Ollama’nın en büyük artılarından biri, yerelde bir servis gibi davranmasıdır. Böylece herhangi bir dille HTTP isteği atarak yanıt alabilirsiniz. Basit bir “prompt gönder, yanıt al” testi için terminalde şu isteği deneyin:

curl http://localhost:11434/api/generate -d '{ "model": "llama3", "prompt": "Bana 5 maddede SEO uyumlu blog yazısı ipucu ver.", "stream": false }'

Yanıtta genellikle modelin ürettiği metin ve bazı ek alanlar döner. Uygulama tarafında JSON parse edip “response” benzeri alanı kullanıcıya gösterebilirsiniz. stream seçeneğini açtığınızda token token akış alarak daha hızlı bir kullanıcı deneyimi sağlayabilirsiniz.

Performans ipuçları ve güvenlik notları

Yerel LLM çalıştırırken performans iki şeye bakar: donanım ve model seçimi. Eğer yalnızca metin özetleme, e-posta taslağı, basit kod yardımı gibi işler yapacaksanız daha küçük modeller yeterli olabilir. Daha karmaşık muhakeme ve uzun bağlam ihtiyaçlarında ise daha büyük modeller gerekebilir; bu da RAM/VRAM ve disk tüketimini artırır. Ayrıca Ollama’yı yalnızca kendi makinenizde kullanacaksanız portu dış dünyaya açmamak iyi bir güvenlik alışkanlığıdır. Sunucuda kullanıyorsanız, ters proxy ve erişim kontrolü (ör. yalnızca VPN içinden erişim) planlayın.

Sonuç: Yerelde LLM denemek artık zor değil

Docker ile Ollama kurulumunu yaptıktan sonra model indirmek, çalıştırmak ve API üzerinden uygulamaya bağlamak oldukça akıcı bir süreç. Bu yaklaşım; kişisel projeler, kurum içi araçlar, gizlilik odaklı metin işleme senaryoları ve düşük gecikme isteyen otomasyonlar için iyi bir seçenek. Bir sonraki adım olarak farklı model varyantlarını test edebilir, istem mühendisliğiyle çıktıları standardize edebilir ve kendi uygulamanızda bir “yerel yapay zekâ asistanı” deneyimi oluşturabilirsiniz.

23 Ocak 2026 Cuma

Windows 11’de WSL2 ile Docker Desktop Kullanmadan Docker Kurulumu ve İleri Seviye Ayarlar

Docker Desktop’sız Docker: Neden ve Ne Kazandırır?

Windows 11 üzerinde Docker kullanmanın en popüler yolu Docker Desktop kurmaktır. Ancak kurumsal lisans politikaları, kaynak tüketimi, arka planda çalışan servislerin fazlalığı veya daha “Linux’a yakın” bir Docker deneyimi isteği, birçok geliştiriciyi alternatif arayışına itiyor. İyi haber şu: WSL2 sayesinde Docker Engine’i doğrudan Linux tarafında kurup, Windows’tan komut satırı ile yönetmek mümkün. Bu yöntem genellikle daha hafif çalışır, daha kontrol edilebilir bir yapı sunar ve özellikle terminal odaklı geliştiriciler için oldukça rahattır.

Bu yazıda, Windows 11’de WSL2 (Ubuntu örneğiyle) kullanarak Docker Engine kurulumunu, Windows terminalinden Docker komutlarını çalıştırmayı ve performans/depoma/ ağ ayarları gibi birkaç ileri seviye noktayı adım adım ele alacağım. Sonuçta Docker Desktop olmadan da modern konteyner geliştirme akışını sürdürebileceksiniz.

Ön Koşullar: WSL2 ve Ubuntu Kurulumu

Öncelikle sisteminizde WSL2 aktif olmalı. Windows Terminal veya PowerShell’i yönetici olarak açıp aşağıdaki komutu çalıştırabilirsiniz:

wsl --install

Kurulum tamamlandıktan sonra Microsoft Store üzerinden Ubuntu yükleyebilir ya da komutla kurabilirsiniz. Ardından Ubuntu’yu açıp kullanıcı adı/parola belirleyin. WSL sürümünü kontrol etmek için:

wsl -l -v

Ubuntu’nun VERSION sütununda 2 yazdığından emin olun. Değilse:

wsl --set-version Ubuntu 2

Adım 1: Ubuntu’da Docker Engine Kurulumu (Resmi Depo)

WSL içindeki Ubuntu terminalinde önce paketleri güncelleyin:

sudo apt update && sudo apt upgrade -y

Gerekli paketleri yükleyin:

sudo apt install -y ca-certificates curl gnupg

Docker’ın resmi GPG anahtarını ekleyin ve depo kaynağını tanımlayın:

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Sonra Docker paketlerini kurun:

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Adım 2: Docker Servisini WSL’de Çalıştırma

WSL2’de systemd artık destekleniyor; en temiz yöntem systemd’yi açmaktır. Ubuntu içinde /etc/wsl.conf dosyasını düzenleyin:

sudo nano /etc/wsl.conf

İçeriğe şunu ekleyin:

[boot]
systemd=true

Ardından Windows tarafında WSL’i kapatıp yeniden başlatın:

wsl --shutdown

Ubuntu’yu tekrar açınca Docker servisini başlatın ve durumunu kontrol edin:

sudo systemctl enable docker
sudo systemctl start docker
sudo systemctl status docker

Adım 3: Sudo’suz Docker Kullanımı (Geliştirici Konforu)

Her komutta sudo yazmamak için kullanıcıyı docker grubuna ekleyin:

sudo usermod -aG docker $USER

Değişikliğin uygulanması için oturumu kapatıp açın ya da Ubuntu terminalini kapatıp yeniden başlatın. Test:

docker run --rm hello-world

Windows Terminal’den Docker Komutlarını Yönetmek

Docker Engine WSL içinde çalıştığı için en basit yönetim biçimi, Windows Terminal’de doğrudan Ubuntu profilini kullanmaktır. Yani komutları Ubuntu sekmesinde çalıştırdığınızda her şey doğal şekilde ilerler. Eğer PowerShell’den tek satırla çalıştırmak isterseniz:

wsl -d Ubuntu -- docker ps

Bu yaklaşım, CI benzeri yerel script’lerde veya kısa kontrollerde oldukça işe yarar.

İleri Seviye Ayar 1: WSL Kaynak Sınırları (RAM/CPU)

WSL, varsayılan olarak sistem kaynaklarını dinamik kullanır. Docker build süreçleri ağırlaştığında RAM tüketimi artabilir. Bunu sınırlamak için Windows kullanıcı dizininize .wslconfig dosyası oluşturup örnek bir sınır koyabilirsiniz:

[wsl2]
memory=6GB
processors=4

Değişiklikten sonra wsl --shutdown yaparak yeniden başlatın. Bu ayar, özellikle dizüstü bilgisayarlarda fan ve pil performansını belirgin şekilde iyileştirir.

İleri Seviye Ayar 2: Dosya Performansı ve Proje Konumu

Kritik nokta şu: Docker konteynerleri WSL içindeki Linux dosya sisteminde daha hızlı çalışır. Projeyi /home/kullanici/proje altında tutmak genelde, projeyi /mnt/c üzerinden Windows dosya sisteminde tutmaktan daha performanslıdır. Özellikle Node.js bağımlılıkları, PHP vendor dizinleri veya çok sayıda küçük dosya içeren projelerde fark gözle görülür hale gelir.

İleri Seviye Ayar 3: Docker Compose v2 ve Buildx

Kurulumda gelen docker compose (v2) ve buildx eklentileri, modern geliştirme akışının temel parçaları. Örneğin çoklu servisli bir projeyi ayağa kaldırmak için:

docker compose up -d

Daha hızlı ve tekrar kullanılabilir build işlemleri için build cache’i etkin kullanan bir Dockerfile tasarlamak, WSL ortamında da doğrudan avantaj sağlar. Ayrıca buildx ile farklı platformlar için build almak (ör. linux/amd64 ve linux/arm64) ileri seviye senaryolarda elinizi güçlendirir.

Sık Karşılaşılan Sorunlar ve Hızlı Çözümler

Docker daemon çalışmıyor: systemd açık mı kontrol edin. cat /etc/wsl.conf ile doğrulayın, ardından wsl --shutdown ile yeniden başlatın.

Permission denied: Kullanıcınız docker grubunda olmayabilir. groups komutuyla kontrol edin, gerekirse usermod -aG docker adımını tekrarlayın.

Disk şişmesi: Konteyner ve imajlar büyüdükçe WSL sanal diski genişler. Düzenli olarak docker system prune kullanmak ve gereksiz imajları temizlemek iyi bir alışkanlıktır.

Sonuç

Docker Desktop kullanmadan, WSL2 üzerinde Docker Engine çalıştırmak Windows 11’de hem pratik hem de “Linux’a yakın” bir geliştirme ortamı sunuyor. Kurulum bir kez oturduğunda günlük kullanımda fark edilir bir hafiflik sağlıyor; kaynak yönetimi daha esnek oluyor ve terminal odaklı iş akışları daha akıcı ilerliyor. Eğer konteyner geliştirmeyi daha kontrollü ve minimal bir kurulumla sürdürmek istiyorsanız, bu yöntem kesinlikle değerlendirilmeye değer.

19 Ocak 2026 Pazartesi

Docker ile Yerel LLM Çalıştırma: Ollama + Open WebUI Kurulumu ve İnce Ayarları

Yerelde Yapay Zekâ: Neden Ollama?

Bulut tabanlı yapay zekâ servisleri pratik olsa da her proje için ideal değil. Gizlilik, maliyet, gecikme ve internet bağımlılığı gibi konular devreye girdiğinde yerel (local) LLM çalıştırmak çok daha mantıklı hale geliyor. Bu yazıda, güncel ve popüler bir yöntemle Ollama üzerinden bir dil modelini yerelde çalıştırmayı, ardından da Open WebUI ile web arayüzü ekleyerek kullanımı “ChatGPT benzeri” bir seviyeye taşımayı adım adım anlatacağım. Kurulumun odağı Docker olacak; böylece sisteminizi kirletmeden, taşınabilir bir kurulum elde edeceksiniz.

Gereksinimler ve Kısa Hazırlık

Bu rehber, Windows 11 + WSL2, macOS veya Linux üzerinde uygulanabilir. Docker yaklaşımı sayesinde dağıtım farklılıkları minimuma iner. İhtiyacınız olanlar: Docker (Docker Desktop veya Engine), en az 8 GB RAM (14B ve üzeri modellerde 16–32 GB daha rahat), yeterli disk alanı (model boyutuna göre 5–20 GB arası) ve tercihen modern bir CPU. NVIDIA GPU’nuz varsa hız artışı mümkün, ancak bu yazı CPU odaklı ve genel bir kurulum sunuyor.

1) Docker ile Ollama Kurulumu

Önce Ollama’yı bir konteyner olarak ayağa kaldıralım. Aşağıdaki komut, Ollama servisini 11434 portunda yayınlar ve model verisini kalıcı tutmak için volume kullanır:

Komut:

docker run -d --name ollama -p 11434:11434 -v ollama:/root/.ollama ollama/ollama

Kurulum tamamlandıktan sonra çalıştığını doğrulamak için:

docker logs -f ollama

Log akışı sorunsuzsa bir sonraki adım modele karar vermek. Ollama’nın güçlü yanı, modeli tek satır komutla indirip çalıştırabilmesi. Örneğin hafif ve hızlı bir başlangıç için:

docker exec -it ollama ollama run llama3.1

Bu komut, model yoksa indirir ve ardından etkileşimli sohbet başlatır. İndirme süresi internet hızınıza ve model boyutuna bağlıdır.

2) Open WebUI ile Web Arayüzü Eklemek

Terminalde konuşmak tamam, ama günlük kullanımda web arayüzü büyük rahatlık. Open WebUI, Ollama ile çok iyi çalışan modern bir arayüz sunuyor. Aynı makinede çalışacak şekilde şu komutu kullanabilirsiniz:

docker run -d --name open-webui -p 3000:8080 -e OLLAMA_BASE_URL=http://host.docker.internal:11434 -v open-webui:/app/backend/data ghcr.io/open-webui/open-webui:main

Linux üzerinde host.docker.internal her zaman hazır gelmeyebilir. Böyle bir durumda iki pratik seçenek var: (1) Ollama ve Open WebUI’yi aynı Docker ağına almak, (2) Ollama’yı doğrudan makinenin IP’si üzerinden çağırmak. En temiz yöntem, iki servisi aynı ağda koşturmaktır. Örneğin:

docker network create llm-net

docker network connect llm-net ollama

docker rm -f open-webui

docker run -d --name open-webui --network llm-net -p 3000:8080 -e OLLAMA_BASE_URL=http://ollama:11434 -v open-webui:/app/backend/data ghcr.io/open-webui/open-webui:main

Ardından tarayıcıdan http://localhost:3000 adresine giderek arayüzü açın. İlk girişte kullanıcı oluşturmanız istenir. Sonrasında “Models” bölümünden Ollama’da hazır olan modeli seçerek sohbet edebilirsiniz.

3) Performans ve Kalite İçin İnce Ayarlar

Yerel LLM deneyimini iyi yapan şey sadece kurulum değil; doğru model ve doğru ayarlar. Öncelikle model seçimi: Hafif kullanım için 7B–8B sınıfı modeller, kod üretimi için “code” odaklı varyantlar, daha yüksek kalite için 14B ve üzeri tercih edilebilir. RAM sınırlıysa daha küçük modelle başlayın; aksi halde sistem “swap” kullanmaya başlar ve hız dramatik biçimde düşer.

İkinci kritik konu: context (bağlam) uzunluğu. Daha uzun bağlam daha iyi “hatırlama” sağlar, fakat RAM tüketimini artırır. Open WebUI tarafında model ayarlarından bağlam ve üretim parametrelerini (örneğin temperature) dengeli seçmek önemli. Örneğin teknik dokümantasyon, özetleme gibi işlerde daha düşük temperature daha tutarlı sonuç verir.

Üçüncü konu: veri kalıcılığı. Burada hem Ollama hem Open WebUI için volume kullandığımızdan, konteyneri silseniz bile modeller ve sohbet geçmişi (kurulumunuza bağlı olarak) korunur. Bu, Blogger okurları için pratik bir detay: “kur-düşür-kur” senaryolarında zaman kaybetmezsiniz.

4) Basit Bir Sorun Giderme Listesi

Port çakışması: 11434 veya 3000 doluysa, komutlarda host portunu değiştirin (ör. 3001:8080). Model inmiyor: Docker’ın internet erişimini ve disk alanını kontrol edin. Open WebUI model görmüyor: OLLAMA_BASE_URL değerinin doğru olduğundan emin olun; aynı ağdaysa “http://ollama:11434” kullanın. Performans düşük: Daha küçük modele geçin, bağlam uzunluğunu azaltın veya arka planda ağır uygulamaları kapatın.

Sonuç: Yerel LLM ile Kontrol Sizde

Ollama + Open WebUI kombinasyonu, yerelde LLM çalıştırmayı şaşırtıcı derecede erişilebilir hale getiriyor. Docker ile kurulum hem temiz hem de taşınabilir; üstelik gizlilik ve maliyet avantajları da cabası. İster kişisel notlarınızı özetlemek, ister kod fikirleri almak, ister kapalı ağda çalışan bir asistan kurmak isteyin, bu yapı sağlam bir temel sunuyor. Bir sonraki adım olarak farklı modelleri deneyip, Open WebUI’de sistem yönergeleri (system prompt) ve şablonlarla kendi kullanım senaryonuza göre ince ayar yapabilirsiniz.

13 Ocak 2026 Salı

Windows 11’de WSL2 ile Docker Kurulumu: Yerel Geliştirmede Hızlı ve Temiz Bir Linux Ortamı

WSL2 + Docker neden bu kadar popüler?

Windows üzerinde yazılım geliştirirken bir yandan da “Linux gibi” çalışmak isteyenlerin sayısı arttı. Eskiden bunun için sanal makine kurmak, ayrı bir disk imajı yönetmek veya çift işletim sistemi kullanmak gerekiyordu. Windows 11 ile birlikte WSL2 (Windows Subsystem for Linux) olgunlaştı ve Docker’ı da bu altyapı üstünden kullanmak oldukça pratik hale geldi. Sonuç: daha az kaynak tüketen, daha hızlı açılan ve proje bağımlılıklarını daha tutarlı yöneten bir geliştirme ortamı.

Bu yazıda, Windows 11 üzerinde WSL2’yi etkinleştirip Ubuntu kuracak, ardından Docker’ı WSL2 motoruyla çalıştıracak şekilde yapılandıracağız. Amacımız “kuruluyor mu?” seviyesini geçip, günlük kullanımda sorun çıkaran detayları da doğru ayarlamak.

Ön koşullar ve kısa kontrol listesi

Başlamadan önce Windows 11’in güncel olduğundan emin olun. Ayrıca sisteminizde sanallaştırma (Virtualization) açık olmalı. Bunu görev yöneticisinde Performans > CPU bölümünde “Sanallaştırma: Etkin” şeklinde görebilirsiniz. Kapalıysa BIOS/UEFI üzerinden açmanız gerekebilir.

Kurulum için yönetici yetkisi olan bir Windows hesabı ve en az 8 GB RAM önerilir. Docker konteynerleri çalıştıracağımız için disk tarafında da rahat etmek adına en az 20 GB boş alan iyi olur.

1) WSL2’yi etkinleştirme ve Ubuntu kurulumu

Windows Terminal’i (PowerShell) yönetici olarak açın ve aşağıdaki komutu çalıştırın:

wsl --install

Bu komut WSL bileşenlerini yükler, varsayılan Linux dağıtımını (genellikle Ubuntu) kurar ve gerekli özellikleri aktif eder. Kurulumdan sonra sistem yeniden başlatma isteyebilir.

Kurulum tamamlanınca Ubuntu ilk açılışta sizden bir kullanıcı adı ve parola belirlemenizi ister. Bu parola Windows parolanız değildir; Linux içi yönetici işlemlerinde kullanılacak.

WSL sürümünüzü kontrol etmek için şu komutu kullanın:

wsl -l -v

Burada Ubuntu’nun “Version” sütununda 2 görünmesini hedefliyoruz. Eğer 1 görünüyorsa şu komutla WSL2’ye çevirebilirsiniz:

wsl --set-version Ubuntu 2

2) Docker Desktop kurulumu ve WSL2 entegrasyonu

Docker’ı Windows üzerinde en sorunsuz şekilde kullanmanın yolu çoğu senaryoda Docker Desktop kurmaktır. Kurulum sırasında “Use WSL 2 instead of Hyper-V” benzeri bir seçenek görürseniz WSL2’yi tercih edin. Kurulum tamamlandıktan sonra Docker Desktop’ı açın.

Docker Desktop içinde Settings bölümüne girin ve şu kontrolleri yapın:

General altında WSL2 tabanlı motorun açık olduğundan emin olun.

Resources > WSL Integration altında Ubuntu dağıtımınız için entegrasyonu etkinleştirin. Burada sadece kurduğunuz dağıtımı seçmeniz yeterli.

Bu noktadan sonra Docker komutlarını doğrudan Ubuntu terminalinde kullanabilirsiniz. Ubuntu içinde doğrulamak için:

docker version

Eğer sürüm bilgileri geliyorsa entegrasyon tamamdır.

3) Hızlı test: Basit bir konteyner çalıştırma

Kurulumun sağlıklı olduğundan emin olmak için klasik test imajını çalıştırın:

docker run --rm hello-world

Bu komut imajı indirir ve bir mesaj basıp çıkar. “Hello from Docker!” benzeri bir çıktı görmeniz gerekir. Bu aşamada hata alırsanız, Docker Desktop’ın çalıştığını ve Ubuntu entegrasyonunun açık olduğunu yeniden kontrol edin.

4) Geliştiriciler için kritik ayarlar: Dosya sistemi ve performans

WSL2 ile Docker kullanırken performansı en çok etkileyen konu proje dosyalarının nerede durduğudur. En iyi performans için kodlarınızı Windows tarafındaki C:\ altında değil, Ubuntu’nun kendi dosya sistemi içinde tutun. Örneğin Ubuntu terminalinde bir proje klasörü oluşturup burada çalışmak genellikle daha akıcı olur:

mkdir -p ~/projelerim/ornek

Windows dosyalarına Ubuntu’dan /mnt/c üzerinden erişebilirsiniz; ancak çok sayıda küçük dosyaya sahip Node.js, PHP Composer veya Python paketlerinde bu yol daha yavaş hissedilebilir.

5) İleri seviye ipuçları: Kaynak yönetimi ve ağ davranışı

WSL2, Linux çekirdeğini hafif bir sanallaştırma katmanında çalıştırır ve RAM kullanımını dinamik yönetir. Yine de yoğun konteyner kullanımında kaynak sınırlarını ayarlamak isteyebilirsiniz. Bunun için Windows kullanıcı dizininizde .wslconfig dosyası oluşturup örneğin RAM ve CPU limitleri belirlemek mümkün olur. Bu sayede “Docker çalışınca bilgisayar yavaşlıyor” şikâyetlerini azaltabilirsiniz.

Ağ tarafında ise konteyner portlarını Windows’a yönlendirmek genelde sorunsuzdur. Örneğin bir web servisini 8080 portunda ayağa kaldırdıysanız tarayıcıdan http://localhost:8080 ile erişebilirsiniz. Kurumsal ağlarda VPN veya güvenlik yazılımları bazen yerel port erişiminde sorun çıkarabilir; böyle bir durumda Windows güvenlik duvarı ve VPN bölünmüş tünelleme ayarları kontrol edilmelidir.

Sonuç: Windows üzerinde “temiz” Linux geliştirme deneyimi

WSL2 ile Docker’ı bir araya getirdiğinizde, Windows’un konforundan vazgeçmeden Linux araç zincirini neredeyse yerel hızda kullanabilirsiniz. Üstelik proje bağımlılıklarını konteynerlere taşıyarak “bende çalışıyor” tartışmalarını ciddi ölçüde azaltırsınız. Doğru dosya konumlandırması, WSL entegrasyonu ve temel kaynak ayarlarıyla bu kurulum uzun süre sorunsuz şekilde günlük iş akışınıza hizmet eder.

8 Ocak 2026 Perşembe

Evde DNS Üzerinden Reklam ve İzleyici Engelleme: Pi-hole’u Docker ile 30 Dakikada Kurma Rehberi

Pi-hole Nedir ve Neden DNS Seviyesinde Engelleme?

Reklam engelleyiciler genellikle tarayıcı eklentisi olarak çalışır ve sadece o tarayıcıyı etkiler. Pi-hole ise DNS seviyesinde filtreleme yaparak ev ağınızdaki telefon, tablet, akıllı TV, oyun konsolu gibi tüm cihazlarda reklam ve takip alanlarını engelleyebilir. Yani bir uygulamanın içine gömülü reklam çağrıları da, tarayıcı dışındaki izleme servisleri de büyük ölçüde kesilir. Bu yaklaşım, özellikle “her cihazda tek tek eklenti kurmakla uğraşmak istemiyorum” diyenler için oldukça temiz bir çözümdür.

Bu rehberde Pi-hole’u bir Raspberry Pi zorunluluğu olmadan, herhangi bir Linux makinede (mini PC, NAS, eski laptop veya bir VPS değil; tercihen ev içi cihaz) Docker ile kuracağız. Docker sayesinde güncelleme, yedekleme ve taşınabilirlik daha kolay olur. Ayrıca sistemi bozma riskini de azaltır.

Kurulum Öncesi Gereksinimler

Başlamadan önce aşağıdakilere sahip olmanız işinizi kolaylaştırır: Docker ve Docker Compose kurulu bir Linux cihazı, yerel ağda sabit IP (ya router’dan DHCP rezervasyonu ya da cihazda statik IP), ve modem/router arayüzüne erişim. Pi-hole’un stabil çalışması için cihazın mümkün olduğunca 7/24 açık kalması önerilir. Eğer sık kapatıyorsanız, DNS çözümleme sorunları yaşamamak için router’da ikinci bir DNS (örneğin 1.1.1.1) yedek olarak tanımlanabilir; fakat bu, bazı istemcilerin engeli aşmasına neden olabilir.

Docker Compose ile Pi-hole Kurulumu

Önce Pi-hole için bir klasör oluşturun ve içine bir docker-compose.yml dosyası hazırlayın. Klasör yapısı olarak yapılandırma ve DNS servisinin kalıcı verisini saklayacağız. Örnek bir yaklaşım: /opt/pihole altında çalışmak.

1) Klasörleri oluşturun (örnek):

/opt/pihole/etc-pihole ve /opt/pihole/etc-dnsmasq.d klasörlerini oluşturun. Bu klasörler Pi-hole ayarlarının yeniden başlatmalarda kaybolmamasını sağlar.

2) docker-compose.yml içeriği (kendi ağınıza göre uyarlayın):

Önemli: Aşağıdaki ayarlarda TZ zaman dilimi, WEBPASSWORD yönetim paneli şifresi ve volume yolları kritik. Router’ınızın DNS portu 53’ü engellemediğinden emin olun.

services:
  pihole:
    container_name: pihole
    image: pihole/pihole:latest
    hostname: pihole
    ports:
      - "53:53/tcp"
      - "53:53/udp"
      - "80:80/tcp"
    environment:
      - TZ=Europe/Istanbul
      - WEBPASSWORD=GucluBirSifreBelirleyin
    volumes:
      - "/opt/pihole/etc-pihole:/etc/pihole"
      - "/opt/pihole/etc-dnsmasq.d:/etc/dnsmasq.d"
    restart: unless-stopped

3) Servisi ayağa kaldırın:

Klasörün içinde docker compose up -d komutunu çalıştırın. Ardından tarayıcıdan http://CIHAZ_IP_ADRESI/admin adresine giderek yönetim panelini açın. Şifrenizi compose dosyasındaki WEBPASSWORD ile belirlediyseniz doğrudan giriş yapabilirsiniz.

Router’da DNS Ayarı: Tüm Ağı Pi-hole’a Yönlendirme

Pi-hole’u “gerçekten etkili” yapan adım, DNS’i cihaz bazında değil ağ genelinde yönlendirmektir. Bunun için modem/router arayüzünde DHCP DNS alanına Pi-hole’un IP adresini girin. Bazı modemlerde “Primary DNS” ve “Secondary DNS” alanları vardır. Maksimum engelleme için ikisini de Pi-hole yapmak ideal olsa da, kesinti toleransı istiyorsanız ikincil DNS’i farklı bir sağlayıcıya vermek zorunda kalabilirsiniz. Bu durumda bazı istemciler ikinci DNS’i kullanarak reklamları çözümleyebilir; bunu azaltmanın yolu router’da dış DNS isteklerini kural ile engelleyip sadece Pi-hole’a izin vermektir (gelişmiş cihazlarda mümkün).

Performans, Gizlilik ve İnce Ayar Önerileri

Kurulumdan sonra yönetim panelinde Query Log bölümünü inceleyin. Burada hangi alan adlarının en çok istek aldığını görürsünüz. Bazı uygulamalar beklenmedik şekilde çok sayıda izleme domain’ine istek atar; Pi-hole bunları görünür kıldığı için aynı zamanda iyi bir “ağ sağlığı” aracıdır.

Engelleme listeleri (adlist) Pi-hole’un bel kemiğidir. Varsayılan listeler çoğu kullanıcı için yeterli olur; fakat daha agresif listeler eklerseniz bazı sitelerde giriş, video oynatma veya yorum bölümleri bozulabilir. Bu noktada Whitelist kullanmak gerekir. Tavsiyem, önce birkaç gün standart ayarlarla izleyip sorun yaşadığınız domain’leri tek tek beyaz listeye almaktır. Böylece “her şeyi engelleyeyim” yaklaşımının getirdiği kırılmaları minimize edersiniz.

İleri seviye bir adım olarak Pi-hole’un yukarı akış DNS’ini (Upstream DNS) seçerken DoH/DoT düşünebilirsiniz. Pi-hole tek başına DoH sunmaz; ancak Unbound gibi yerel bir recursive resolver ile birleştirildiğinde hem gizlilik hem de hız tarafında kazanımlar elde edilir. Yine de başlangıç için Cloudflare, Quad9 veya Google DNS gibi sağlayıcılar yeterli olabilir; önemli olan trafik ve log kontrolünün Pi-hole panelinde toplanmasıdır.

Artılar, Eksiler ve Sonuç

Artılar: Tüm cihazlarda tek noktadan reklam/izleyici engelleme, düşük kaynak tüketimi, kolay yönetim paneli, ağ trafiğine dair görünürlük. Eksiler: DNS altyapınız Pi-hole’a bağımlı hale gelir; cihaz kapanırsa ağda çözümleme sorunları yaşanabilir. Ayrıca bazı bankacılık veya medya servisleri zaman zaman engellemeye takılabilir ve beyaz liste gerekebilir.

Genel olarak Pi-hole’u Docker ile kurmak, ev ağında “sessizce” büyük fark yaratan modern bir iyileştirme. Doğru IP planlaması ve router ayarıyla, 30 dakikada kurulup uzun süre dokunmadan çalışabilen bir çözüm elde edersiniz. Eğer evde çok sayıda cihaz varsa ve özellikle mobil uygulamalardaki izleyiciler can sıkıyorsa, Pi-hole kesinlikle denemeye değer.

4 Ocak 2026 Pazar

Windows 11’de WSL 2 + Docker ile Yerel Geliştirme Ortamı Kurulumu (Adım Adım)

Giriş: Neden WSL 2 + Docker?

Windows üzerinde yazılım geliştirenlerin en büyük şikâyetlerinden biri, Linux tabanlı araçlarla uyumlu ve hızlı bir ortamı stabil şekilde kurmanın zor olmasıydı. Windows Subsystem for Linux (WSL) 2 bu tabloyu ciddi şekilde değiştirdi. WSL 2, gerçek bir Linux çekirdeğiyle çalıştığı için performans ve uyumluluk açısından eski yöntemlere göre çok daha iyi. Buna Docker’ı eklediğinizde; Node.js, Python, Go, PostgreSQL, Redis gibi bileşenleri “makinenizi kirletmeden” konteynerlerle yönetebilir, projeleri daha taşınabilir hale getirebilirsiniz. Bu yazıda Windows 11 üzerinde WSL 2 + Docker ile modern bir yerel geliştirme ortamını adım adım kuracağız.

Ön Koşullar

Kuruluma başlamadan önce Windows 11’in güncel olduğundan emin olun. Ayrıca BIOS/UEFI tarafında sanallaştırma (Intel VT-x / AMD-V) açık olmalı. Eğer daha önce sanallaştırma tabanlı bir yazılım (eski VirtualBox yapılandırmaları gibi) sorun çıkardıysa, kurulum sırasında çakışma ihtimalini göz önünde bulundurun.

1) WSL 2 Kurulumu (Tek Komutla)

En pratik yöntem, Windows Terminal veya PowerShell’i Yönetici olarak açıp şu komutu çalıştırmaktır:

wsl --install

Bu komut WSL bileşenlerini kurar, varsayılan Linux dağıtımını indirir ve gerekli ayarları yapar. İşlem sonrası yeniden başlatma istenirse mutlaka yeniden başlatın. Kurulum tamamlandığında dağıtım ilk açılışta sizden bir Linux kullanıcı adı ve parola belirlemenizi isteyecek.

2) Varsayılan Dağıtımı ve Sürümü Kontrol Etme

Kurulumdan sonra WSL dağıtımlarını ve hangi sürümde çalıştıklarını görmek için:

wsl -l -v

Burada dağıtımınızın sürümü 2 görünmelidir. Eğer 1 görünüyorsa (bazı eski sistemlerden yükseltmelerde olabiliyor), şu komutla WSL 2’ye dönüştürebilirsiniz:

wsl --set-version Ubuntu 2

“Ubuntu” yerine listede gördüğünüz dağıtım adını yazın.

3) Docker Kurulumu: Docker Desktop + WSL Entegrasyonu

Windows 11 üzerinde en sorunsuz seçenek genellikle Docker Desktop kullanmaktır. Docker Desktop’ı kurduktan sonra ayarlarda WSL entegrasyonunu açmanız gerekir. Docker Desktop içinde:

Settings > Resources > WSL Integration bölümüne gidin ve kullandığınız Linux dağıtımı için entegrasyonu etkinleştirin.

Bu sayede Docker komutlarını doğrudan WSL terminalinden çalıştırabilir, Linux ortamında konteyner yönetimini çok daha doğal bir şekilde yapabilirsiniz.

4) WSL İçinde Gerekli Paketleri Güncelleme

Ubuntu (veya kullandığınız dağıtım) terminalini açın ve paketleri güncelleyin:

sudo apt update && sudo apt upgrade -y

Geliştirme araçlarını sıklıkla kullanacaksanız temel araç seti de işinize yarar:

sudo apt install -y build-essential git curl

5) Test: Docker WSL İçinde Çalışıyor mu?

WSL terminalinde şu komutla Docker’ın doğru çalıştığını doğrulayın:

docker version

Ardından basit bir konteyner test edebilirsiniz:

docker run --rm hello-world

Bu komut, Docker’ın imaj çekme ve çalıştırma adımlarının sorunsuz olduğunu gösterir.

6) Örnek Proje: docker-compose ile PostgreSQL + Redis

Gerçek bir geliştirme senaryosunda genelde veritabanı ve önbellek servislerini konteynerle yönetmek istersiniz. Proje klasörünüzde docker-compose.yml dosyası oluşturup aşağıdaki yapıyı kullanabilirsiniz (örnek):

services:
postgres:
image: postgres:16
environment:
POSTGRES_PASSWORD: example
ports:
- "5432:5432"
redis:
image: redis:7
ports:
- "6379:6379"

Konteynerleri ayağa kaldırmak için:

docker compose up -d

Durdurmak için:

docker compose down

Bu yaklaşımın en güzel tarafı, proje klasörünü başka bir makineye taşıdığınızda aynı servislerin neredeyse aynı komutlarla ayağa kalkmasıdır.

7) Performans İpucu: Projeyi WSL Dosya Sisteminde Tutun

WSL ile çalışırken en kritik performans noktalarından biri proje dosyalarının nerede durduğudur. Özellikle Node.js gibi çok fazla küçük dosya okuyan araçlar kullanıyorsanız, projeyi Windows diskinde (ör. C:\) tutmak yerine WSL tarafındaki Linux dosya sisteminde (ör. /home/kullanici/proje) tutmak ciddi hız kazandırır. Editör olarak VS Code kullanıyorsanız, “WSL” uzantısıyla projeyi WSL içinde açmak da iş akışını kolaylaştırır.

Kapanış: Daha Temiz, Daha Taşınabilir Bir Geliştirme Düzeni

Windows 11 üzerinde WSL 2 ve Docker birlikte kullanıldığında, hem Linux uyumlu araçların rahatlığını hem de Windows ekosisteminin pratikliğini bir arada alırsınız. Üstelik projeleriniz “benim bilgisayarımda çalışıyor” sorununa daha az takılır; çünkü servisleri konteynerlerle standartlaştırırsınız. Bu kurulumdan sonra CI/CD, özel ağlar, multi-container mikroservis geliştirme ve hatta Kubernetes denemeleri gibi daha ileri senaryolara geçmek çok daha kolay hale gelir.

2 Ocak 2026 Cuma

Windows 11’de WSL 2 ile Docker Desktop Kullanmadan Docker Çalıştırma (Adım Adım Rehber)

Docker Desktop olmadan neden Docker?

Windows 11’de Docker kullanmak isteyenlerin ilk karşılaştığı çözüm genellikle Docker Desktop oluyor. Ancak lisans koşulları, arka planda tükettiği kaynaklar ve zaman zaman “WMI/Hyper-V/servis” kaynaklı sorunlar nedeniyle daha hafif ve kontrol edilebilir bir kurulum tercih edilebilir. Bu yazıda, WSL 2 üzerinde Ubuntu (veya benzeri bir dağıtım) kurup, Docker Engine’i doğrudan Linux tarafında çalıştırarak Windows’ta Docker deneyimini nasıl elde edeceğinizi anlatıyorum. Sonuçta konteynerlar Linux çekirdeği üzerinde, daha “doğal” bir şekilde çalışır; siz de Windows’tan terminal ve IDE ile yönetirsiniz.

Ön koşullar

Bu rehber Windows 11 içindir ve WSL 2 gerektirir. Yönetici yetkisi olan bir Windows hesabı işinizi kolaylaştırır. Ayrıca sanallaştırmanın BIOS/UEFI tarafında açık olması (Intel VT-x/AMD-V) önemlidir. Adımlara başlamadan önce, Windows Update’in güncel olması da olası WSL hatalarını azaltır.

1) WSL 2 ve Ubuntu kurulumu

Windows Terminal veya PowerShell’i Yönetici olarak açın ve aşağıdaki komutu çalıştırın:

wsl --install

Bu komut genellikle WSL’yi etkinleştirir ve varsayılan bir Linux dağıtımı kurar. Eğer dağıtım seçmek isterseniz, mevcut dağıtımları listeleyebilirsiniz:

wsl --list --online

Ardından örneğin Ubuntu kurmak için:

wsl --install -d Ubuntu

Kurulum sonrası Ubuntu ilk kez açıldığında sizden bir Linux kullanıcı adı ve parola belirlemeniz istenir. Bu kullanıcı, Docker komutlarını daha sonra “sudo” ile çalıştırmanız gereken temel kullanıcı olacaktır.

2) Docker Engine’i WSL içinde kurma

Ubuntu terminali açıldıktan sonra önce paket listesini güncelleyin:

sudo apt update && sudo apt upgrade -y

Docker’ın resmi deposunu eklemek en sorunsuz yoldur. Gerekli paketleri kurun:

sudo apt install -y ca-certificates curl gnupg

Ardından Docker GPG anahtarını ve repo bilgisini ekleyin (Ubuntu sürümünüze göre uyumlu şekilde):

sudo install -m 0755 -d /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

sudo chmod a+r /etc/apt/keyrings/docker.gpg

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Şimdi Docker Engine ve gerekli bileşenleri kurun:

sudo apt update

sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

3) WSL’de Docker servisinin çalıştırılması

WSL, klasik Linux dağıtımları gibi her zaman systemd ile başlamayabilir. Güncel Windows 11 ve WSL sürümlerinde systemd desteği var; bunu etkinleştirmek için Ubuntu içinde şu dosyayı oluşturun/düzenleyin:

sudo nano /etc/wsl.conf

İçine şunu ekleyin:

[boot]
systemd=true

Kaydedip çıkın. Sonra Windows tarafında WSL’yi yeniden başlatın:

wsl --shutdown

Ubuntu’yu tekrar açtıktan sonra Docker servisini başlatın ve durumunu kontrol edin:

sudo systemctl enable docker

sudo systemctl start docker

sudo systemctl status docker

4) Sudo’suz Docker kullanmak (opsiyonel ama pratik)

Her seferinde “sudo” yazmamak için kullanıcıyı docker grubuna ekleyebilirsiniz:

sudo usermod -aG docker $USER

Değişikliğin geçerli olması için Ubuntu oturumunu kapatıp açın. Ardından test edin:

docker run --rm hello-world

Bu komut başarıyla çalışıyorsa Docker Engine WSL içinde hazır demektir.

5) Docker Compose ve örnek proje

Docker Compose artık çoğu kurulumda eklenti olarak gelir. Sürümü kontrol edin:

docker compose version

Hızlı bir örnek olarak Nginx ayağa kaldırabilirsiniz:

docker run --rm -p 8080:80 nginx

Windows’ta tarayıcıdan http://localhost:8080 açtığınızda Nginx sayfasını görmeniz gerekir. Bu, WSL-Linux konteyner ağının Windows’a düzgün biçimde köprülenebildiğini de doğrular.

Performans ve dosya sistemi ipuçları

WSL 2 ile Docker kullanırken en kritik noktalardan biri proje dosyalarının nerede tutulduğudur. Yoğun dosya erişimi yapan Node.js, Python veya PHP projelerinde, kaynak kodunu WSL dosya sistemi içinde (ör. /home/kullanici/proje) tutmak genellikle çok daha hızlıdır. Windows sürücülerine (ör. /mnt/c) yerleştirilmiş projeler bazı senaryolarda belirgin yavaşlayabilir. IDE kullanıyorsanız Visual Studio Code’un Remote - WSL eklentisiyle projeyi WSL içinde açmak hem hız hem de araç uyumluluğu açısından iyi bir çözümdür.

Sık karşılaşılan sorunlar

“Cannot connect to the Docker daemon” hatası alırsanız önce Docker servisinin çalıştığını doğrulayın: systemctl status docker. systemd etkin değilse /etc/wsl.conf ayarını kontrol edin ve wsl --shutdown ile WSL’yi tamamen kapatıp açın.

Port çakışması durumunda (ör. 8080 doluysa) farklı bir port seçin: -p 8081:80. Ayrıca Windows güvenlik duvarı ve kurumsal ağ politikaları bazı port erişimlerini kısıtlayabilir.

Sonuç

Bu yöntemle Windows 11 üzerinde Docker Desktop kurmadan, daha minimal bir kurulumla Docker Engine’i WSL 2 içinde çalıştırabilirsiniz. Özellikle geliştirici makinesinde kaynak tüketimini azaltmak, lisans tartışmalarına takılmamak ve Linux’a daha yakın bir çalışma ortamı elde etmek isteyenler için oldukça mantıklı bir seçenek. Kurulum tamamlandığında hem docker hem de docker compose komutlarıyla modern konteyner iş akışınızı rahatça sürdürebilirsiniz.

29 Aralık 2025 Pazartesi

Windows 11’de WSL 2 ile Docker’ı Kurmak ve Performanslı Bir Geliştirme Ortamı Hazırlamak

WSL 2 + Docker neden bu kadar popüler oldu?

Windows üzerinde Linux tabanlı bir geliştirme ortamı kurmanın en pratik yollarından biri WSL 2 (Windows Subsystem for Linux). Üzerine bir de Docker eklediğinizde, hem Linux ekosistemindeki araçları kullanabilir hem de container tabanlı projeleri Windows’ta zahmetsizce çalıştırabilirsiniz. Bu yazıda, Windows 11’de WSL 2 kurulumundan Docker entegrasyonuna, performans ayarlarından sık yapılan hatalara kadar uçtan uca bir “how-to” rehberi bulacaksınız.

Ön koşullar ve kısa kontrol listesi

Başlamadan önce sisteminizin sanallaştırma desteğinin açık olduğundan emin olun. Görev Yöneticisi > Performans > CPU bölümünde “Sanallaştırma: Etkin” görmelisiniz. Değilse BIOS/UEFI üzerinden Intel VT-x ya da AMD-V etkinleştirilmelidir. Ayrıca Windows 11’in güncel sürümünü kullanmanız (özellikle WSL tarafında) daha az sürpriz çıkarır.

1) WSL 2’yi kurma ve varsayılanı WSL 2 yapma

En hızlı yöntem, PowerShell’i yönetici olarak açıp aşağıdaki komutu çalıştırmaktır. Bu komut WSL bileşenlerini kurar, çekirdeği indirir ve bir Linux dağıtımı yüklemenize yardımcı olur:

Komut: wsl --install

Kurulumdan sonra sistemi yeniden başlatın. Ardından WSL sürümünüzü ve dağıtımlarınızı kontrol edin:

Komut: wsl -l -v

Varsayılan sürümü WSL 2 yapmak için:

Komut: wsl --set-default-version 2

2) Dağıtım seçimi: Ubuntu ile başlamak

Yeni başlayanlar ve geniş topluluk desteği nedeniyle çoğu geliştirici WSL üzerinde Ubuntu tercih ediyor. Microsoft Store üzerinden “Ubuntu” kurabilir ya da komutla listeleyip yükleyebilirsiniz:

Komut: wsl --list --online

Komut: wsl --install -d Ubuntu

İlk açılışta Linux kullanıcı adı ve şifre belirleyeceksiniz. Burada seçtiğiniz kullanıcı, geliştirme süreçlerinde sürekli kullanılacağı için basit ama anlamlı bir isim seçmek işinizi kolaylaştırır.

3) Docker Desktop kurulumu ve WSL entegrasyonu

Windows 11 üzerinde en sorunsuz yol genellikle Docker Desktop kurmaktır. Kurulum sırasında “Use WSL 2 instead of Hyper-V” benzeri bir seçenek görürseniz WSL 2’yi tercih edin. Kurulum tamamlandıktan sonra Docker Desktop’ı açın ve şu ayarları kontrol edin:

Settings > General: WSL 2 tabanlı motor etkin olmalı.

Settings > Resources > WSL Integration: Kurduğunuz Ubuntu dağıtımı için entegrasyonu aktif edin.

Bu noktadan sonra Ubuntu terminalinde docker version ve docker ps komutlarını çalıştırarak her şeyin düzgün bağlandığını doğrulayabilirsiniz.

4) Performans için kritik öneri: Projeyi Linux dosya sisteminde tutun

WSL 2 ile en sık yapılan performans hatası, projeyi Windows dosya sisteminde (ör. C:\) tutup WSL içinden işlemektir. Bu, özellikle Node.js, PHP Composer veya büyük Git depolarında dramatik yavaşlamaya neden olur. Bunun yerine projenizi Ubuntu tarafında, örneğin /home/kullaniciadi/proje altında konumlandırın. Windows’tan erişmek isterseniz Dosya Gezgini’ne \\wsl$ yazarak WSL dosya sistemine girebilirsiniz.

5) Kaynak yönetimi: .wslconfig ile RAM/CPU sınırı koyma

Docker container’ları ve WSL 2 birlikte çalışırken bazen sistem RAM’ini gereğinden fazla tüketebilir. Bu durumda Windows kullanıcı profiliniz altına .wslconfig dosyası oluşturup kaynak sınırı koyabilirsiniz. Dosya yolu genellikle C:\Users\KullaniciAdiniz\.wslconfig şeklindedir. İçeriği örnek olarak şu mantıkta olabilir: RAM limit, CPU çekirdeği, swap boyutu. Değişiklik sonrası WSL’yi kapatıp açmanız gerekir:

Komut: wsl --shutdown

Bu ayar, özellikle aynı anda IDE, tarayıcı ve container’lar açıkken sistemin nefes almasını sağlar.

6) Port yönlendirme ve yerel geliştirme

Docker ile ayağa kaldırdığınız servisleri (ör. 3000, 8080, 5432) Windows üzerinden de kullanmak isteyeceksiniz. Genel senaryoda container portlarını -p ile publish ettiğinizde Windows tarafında localhost üzerinden erişebilirsiniz. Yine de bazı ağ senaryolarında güvenlik yazılımları veya kurumsal politikalar trafiği engelleyebilir. Sorun yaşarsanız ilk kontrol noktası Windows Güvenlik Duvarı ve Docker Desktop’ın network ayarları olmalıdır.

7) Sık karşılaşılan sorunlar ve hızlı çözümler

Docker çalışmıyor / daemon’a bağlanamıyor: Docker Desktop’ın açık olduğundan ve ilgili dağıtımda WSL entegrasyonunun aktif edildiğinden emin olun. Ardından Ubuntu terminalinde yeniden deneyin.

Disk şişmesi: Uzun süre kullanılan Docker ortamlarında image ve volume birikir. Düzenli aralıklarla gereksiz kaynakları temizlemek için docker system prune (dikkatli kullanın) faydalı olabilir.

Git performansı düşük: Proje konumu çoğu zaman sebep olur. Repo’yu Windows yerine Linux dosya sistemine taşıyın.

Sonuç: Windows’ta Linux konforu, Docker ile taşınabilirlik

WSL 2 + Docker ikilisi, Windows 11 üzerinde modern geliştirme akışlarının neredeyse tamamını kapsayan güçlü bir kombinasyon sunuyor. Doğru kurulum ve birkaç performans ayarıyla; container tabanlı projeleri daha hızlı çalıştırabilir, bağımlılık karmaşasını azaltabilir ve ekip içinde tutarlı bir ortam sağlayabilirsiniz. Özellikle projelerinizi WSL dosya sisteminde tutmak ve kaynak yönetimini doğru yapmak, bu kurulumdan alacağınız verimi belirgin biçimde artırır.

28 Aralık 2025 Pazar

Windows 11’de WSL2 ile Docker Desktop’sız Geliştirici Ortamı Kurulumu (Adım Adım)

Docker Desktop olmadan neden Docker?

Windows 11’de Docker kullanmanın en popüler yolu Docker Desktop. Ancak özellikle kurumsal cihazlarda lisans politikaları, performans beklentisi veya daha “hafif” bir kurulum isteği nedeniyle alternatif arayan çok kişi var. Bu yazıda, WSL2 (Windows Subsystem for Linux) üzerinde Docker Engine kurarak, Docker Desktop’a ihtiyaç duymadan konteyner tabanlı bir geliştirme ortamını nasıl oluşturabileceğinizi adım adım anlatacağım. Hedefimiz: Windows’ta terminalden yönetilen, güncel ve performanslı bir Docker deneyimi.

Ön koşullar: Neler gerekli?

Bu rehber için Windows 11 kullanmanız önerilir (Windows 10’da da çalışır). Yönetici yetkisine sahip olmanız, PowerShell’i açabilmeniz ve Microsoft Store’dan bir Linux dağıtımı kurabilmeniz yeterli. Ayrıca BIOS/UEFI’de sanallaştırmanın açık olması gerekir. Kurulum sırasında komutları kopyalayıp yapıştırmanız işleri hızlandırır.

1) WSL2’yi etkinleştirme ve Ubuntu kurma

Önce WSL2’yi açalım. PowerShell’i Yönetici olarak çalıştırın ve şu komutu girin:

wsl --install

Bu komut genellikle WSL bileşenlerini etkinleştirir ve varsayılan dağıtım olarak Ubuntu’yu kurar. Eğer sisteminizde WSL zaten kuruluysa, sürümü kontrol etmek için:

wsl -l -v

Listede dağıtımınızın sürümü 2 görünmelidir. Değilse şu komutla yükseltebilirsiniz:

wsl --set-version Ubuntu 2

2) Ubuntu içinde temel güncellemeler

Başlat menüsünden Ubuntu’yu açın ve paket listesini güncelleyin:

sudo apt update && sudo apt upgrade -y

Bu adım, Docker kurulumu sırasında bağımlılık sorunlarını azaltır. Ardından gerekli yardımcı paketleri yükleyelim:

sudo apt install -y ca-certificates curl gnupg lsb-release

3) Docker Engine kurulumu (Ubuntu/WSL2)

WSL2 üzerinde en sağlıklı yöntem, Docker’ı Docker’ın resmi deposundan kurmaktır. Önce anahtar ve depo ekleyelim:

sudo install -m 0755 -d /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

sudo chmod a+r /etc/apt/keyrings/docker.gpg

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Şimdi Docker paketlerini kuralım:

sudo apt update

sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

4) Docker’ı root’suz (daha rahat) kullanma

Varsayılan olarak Docker komutları root yetkisi ister. Sürekli sudo yazmamak için kullanıcıyı docker grubuna ekleyin:

sudo usermod -aG docker $USER

Ardından Ubuntu oturumunu kapatıp tekrar açın (WSL penceresini kapatmak yeterli). Not: Bazı sistemlerde değişikliğin etkinleşmesi için Windows tarafında şu komutla WSL’yi yeniden başlatmak gerekebilir:

wsl --shutdown

5) Docker servisinin WSL2’de başlatılması

WSL dağıtımlarında systemd her zaman varsayılan olmayabilir. Windows 11’de güncel WSL sürümleri systemd desteği sunuyor. Eğer kullanmak isterseniz Ubuntu içinde /etc/wsl.conf dosyasını oluşturup şu satırları ekleyin:

[boot]
systemd=true

Sonra Windows’ta wsl --shutdown çalıştırıp Ubuntu’yu yeniden açın. Ardından Docker servis durumunu kontrol edin:

systemctl status docker

Aktif değilse başlatın:

sudo systemctl enable --now docker

6) Kurulum testi: İlk konteynerinizi çalıştırın

Şimdi her şeyin çalıştığını doğrulamak için klasik testi yapalım:

docker run --rm hello-world

Çıktıda Docker’ın başarıyla çalıştığını belirten bir mesaj görmelisiniz. Ardından Compose eklentisini test etmek için sürüme bakabilirsiniz:

docker compose version

7) Windows ile dosya performansı: Küçük ama kritik bir ipucu

WSL2 ile Docker kullanırken en çok performans kaybı, proje dosyalarını /mnt/c altında (Windows dosya sistemi) tutunca yaşanır. Özellikle Node.js, PHP veya Python gibi çok sayıda küçük dosya okuyan projelerde fark dramatiktir. En iyi pratik: projeyi Ubuntu dosya sisteminde (ör. /home/kullanici/proje) tutmak ve editörü (VS Code gibi) WSL eklentisiyle oradan açmak. Böylece I/O gecikmeleri düşer, konteyner build süreleri kısalır.

Sonuç: Hafif, hızlı ve kontrol sizde

Bu yöntemle Docker Desktop kullanmadan, WSL2 üzerinde güncel bir Docker Engine kurmuş oldunuz. Avantajları net: daha az arka plan servisi, daha yalın bir kurulum ve Linux’a daha yakın bir çalışma ortamı. Dezavantaj olarak ise bazı GUI odaklı Desktop özellikleri (tek tıkla Kubernetes, bazı entegrasyonlar) sizden ek kurulum isteyebilir. Yine de terminal seven geliştiriciler için bu kurulum, Windows 11 üzerinde konteyner tabanlı geliştirme yapmanın en pratik yollarından biri.