{"id":33615,"date":"2025-11-05T04:31:18","date_gmt":"2025-11-05T01:31:18","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/wsl2-ve-docker-docker-desktop-olmadan-manuel-konfigurasyon-rehberi\/"},"modified":"2025-11-05T04:31:18","modified_gmt":"2025-11-05T01:31:18","slug":"wsl2-ve-docker-docker-desktop-olmadan-manuel-konfigurasyon-rehberi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/wsl2-ve-docker-docker-desktop-olmadan-manuel-konfigurasyon-rehberi\/","title":{"rendered":"WSL2 ve Docker: Docker Desktop Olmadan Manuel Konfig\u00fcrasyon Rehberi"},"content":{"rendered":"<p><body><\/p>\n<p>\n    Docker Desktop&#8217;\u0131n sundu\u011fu kolayl\u0131klar tart\u0131\u015f\u0131lmaz olsa da, bazen lisanslama k\u0131s\u0131tlamalar\u0131, kaynak t\u00fcketimi veya daha fazla kontrol iste\u011fi gibi nedenlerle alternatif \u00e7\u00f6z\u00fcmlere y\u00f6nelmek gerekebilir. Bu makale, Windows Subsystem for Linux (WSL2) kullanarak Docker Desktop&#8217;a ba\u011f\u0131ml\u0131 kalmadan, tamamen manuel y\u00f6ntemlerle Docker&#8217;\u0131 kurmay\u0131, NAT a\u011f\u0131n\u0131 yap\u0131land\u0131rmay\u0131 ve uygulamalar\u0131n\u0131za yerel makinenizden sorunsuz bir \u015fekilde eri\u015fmeyi ad\u0131m ad\u0131m a\u00e7\u0131klamaktad\u0131r.\n  <\/p>\n<p>\n    G\u00fcn\u00fcm\u00fcz yaz\u0131l\u0131m geli\u015ftirme d\u00fcnyas\u0131nda konteynerizasyon, uygulamalar\u0131n da\u011f\u0131t\u0131m\u0131 ve y\u00f6netimi i\u00e7in vazge\u00e7ilmez bir yakla\u015f\u0131m haline gelmi\u015ftir. Docker, bu alandaki en pop\u00fcler ara\u00e7lardan biri olup, geli\u015ftiricilere izole edilmi\u015f, ta\u015f\u0131nabilir ve tutarl\u0131 ortamlar sunar. Windows \u00fczerinde Docker kullanmak istedi\u011finizde, genellikle ilk akla gelen \u00e7\u00f6z\u00fcm Docker Desktop&#8217;t\u0131r. Ancak Docker Desktop, \u00f6zellikle ticari kullan\u0131mda getirdi\u011fi lisanslama k\u0131s\u0131tlamalar\u0131 ve sistem kaynaklar\u0131 \u00fczerindeki kayda de\u011fer y\u00fck\u00fc nedeniyle baz\u0131 kullan\u0131c\u0131lar i\u00e7in ideal bir se\u00e7enek olmaktan \u00e7\u0131kabilmektedir. \u0130\u015fte tam bu noktada, Windows Subsystem for Linux (WSL2) ve manuel Docker Engine kurulumu devreye giriyor.\n  <\/p>\n<p>\n    Bu y\u00f6ntemi tercih etmenin birden fazla \u00f6nemli nedeni bulunmaktad\u0131r. Birincisi, maliyet. Docker Desktop&#8217;\u0131n \u00fccretli lisans modeline ge\u00e7mesi, \u00f6zellikle k\u00fc\u00e7\u00fck i\u015fletmeler ve ba\u011f\u0131ms\u0131z geli\u015ftiriciler i\u00e7in \u00f6nemli bir gider kalemi olu\u015fturabilir. Manuel kurulum ile bu maliyetten ka\u00e7\u0131nmak m\u00fcmk\u00fcnd\u00fcr. \u0130kincisi, performans ve kaynak t\u00fcketimi. Docker Desktop, arka planda \u00e7al\u0131\u015fan sanal makine (VM) ve \u00e7e\u015fitli entegrasyon servisleri nedeniyle sistem belle\u011fini ve i\u015flemci kaynaklar\u0131n\u0131 yo\u011fun bir \u015fekilde kullanabilir. WSL2 \u00fczerinde direkt Docker Engine \u00e7al\u0131\u015ft\u0131rmak, genellikle daha hafif ve h\u0131zl\u0131 bir deneyim sunar. WSL2&#8217;nin Hyper-V tabanl\u0131 sanalla\u015ft\u0131rma teknolojisi sayesinde, Linux \u00e7ekirde\u011fi do\u011frudan Windows ile entegre bir \u015fekilde \u00e7al\u0131\u015f\u0131r ve Docker konteynerleri i\u00e7in neredeyse yerel Linux performans\u0131 sa\u011flar. \u00dc\u00e7\u00fcnc\u00fcs\u00fc, kontrol. Manuel kurulum, kullan\u0131c\u0131lara Docker ortamlar\u0131 \u00fczerinde daha fazla esneklik ve kontrol imkan\u0131 tan\u0131r. A\u011f yap\u0131land\u0131rmas\u0131ndan g\u00fcvenlik ayarlar\u0131na kadar her detay\u0131 kendi ihtiya\u00e7lar\u0131n\u0131za g\u00f6re optimize edebilirsiniz. Bu kontrol, \u00f6zellikle karma\u015f\u0131k a\u011f yap\u0131lar\u0131na sahip veya \u00f6zel g\u00fcvenlik gereksinimleri olan projelerde kritik \u00f6neme sahiptir.\n  <\/p>\n<p>\n    Bu makale boyunca, Docker Desktop&#8217;\u0131n sundu\u011fu &#8220;tek t\u0131kla&#8221; kolayl\u0131klardan feragat ederek, daha derinlemesine bir anlay\u0131\u015f ve daha fazla kontrolle kendi WSL2-Docker ortam\u0131n\u0131z\u0131 nas\u0131l kuraca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m ke\u015ffedece\u011fiz. NAT (Network Address Translation) ve localhost eri\u015fiminin el ile nas\u0131l yap\u0131land\u0131r\u0131laca\u011f\u0131 gibi konulara \u00f6zellikle odaklanaca\u011f\u0131z. Amac\u0131m\u0131z, sadece teknik ad\u0131mlar\u0131 sunmakla kalmay\u0131p, ayn\u0131 zamanda bu ad\u0131mlar\u0131n arkas\u0131ndaki mant\u0131\u011f\u0131 da anla\u015f\u0131l\u0131r bir dille a\u00e7\u0131klamakt\u0131r. B\u00f6ylece, hem ba\u015flang\u0131\u00e7 seviyesindeki kullan\u0131c\u0131lar i\u00e7in temel bir rehber sunacak, hem de deneyimli geli\u015ftiricilerin mevcut bilgilerini peki\u015ftirmelerine yard\u0131mc\u0131 olaca\u011f\u0131z. Bu yolculu\u011fun sonunda, tamamen \u00f6zelle\u015ftirilmi\u015f, hafif ve g\u00fc\u00e7l\u00fc bir Docker geli\u015ftirme ortam\u0131na sahip olacaks\u0131n\u0131z.\n  <\/p>\n<h2>Temel Kavramlar: WSL2, Docker ve A\u011f Yap\u0131lar\u0131 Nelerdir?<\/h2>\n<p>\n    Manuel Docker kurulumuna ge\u00e7meden \u00f6nce, \u00fczerinde \u00e7al\u0131\u015faca\u011f\u0131m\u0131z temel teknolojileri ve a\u011f kavramlar\u0131n\u0131 anlamak \u00f6nemlidir. Bu b\u00f6l\u00fcm, konuya yabanc\u0131 olan okuyucular i\u00e7in bir temel olu\u015fturacak ve ilerleyen ad\u0131mlar\u0131 daha anlaml\u0131 k\u0131lacakt\u0131r.\n  <\/p>\n<p>\n    <strong>WSL2 (Windows Subsystem for Linux 2):<\/strong> WSL2, Windows i\u015fletim sistemi \u00fczerinde tam te\u015fekk\u00fcll\u00fc bir Linux \u00e7ekirde\u011fi \u00e7al\u0131\u015ft\u0131rman\u0131za olanak tan\u0131yan devrim niteli\u011finde bir \u00f6zelliktir. \u0130lk s\u00fcr\u00fcm\u00fc olan WSL1, Linux sistem \u00e7a\u011fr\u0131lar\u0131n\u0131 Windows sistem \u00e7a\u011fr\u0131lar\u0131na \u00e7eviren bir katman kullan\u0131rken, WSL2 ger\u00e7ek bir Hyper-V tabanl\u0131 sanal makine (VM) i\u00e7inde ger\u00e7ek bir Linux \u00e7ekirde\u011fi \u00e7al\u0131\u015ft\u0131r\u0131r. Bu, WSL2&#8217;ye \u00f6nemli performans avantajlar\u0131, tam sistem \u00e7a\u011fr\u0131s\u0131 uyumlulu\u011fu ve \u00f6zellikle disk G\/\u00c7 (I\/O) ve a\u011f performans\u0131 a\u00e7\u0131s\u0131ndan b\u00fcy\u00fck iyile\u015ftirmeler getirmi\u015ftir. Docker gibi uygulamalar, bu ger\u00e7ek Linux \u00e7ekirde\u011fine do\u011frudan eri\u015febildikleri i\u00e7in WSL2 \u00fczerinde \u00e7ok daha verimli \u00e7al\u0131\u015f\u0131r. Geli\u015ftiriciler i\u00e7in, Linux tabanl\u0131 ara\u00e7lar\u0131 ve komut sat\u0131r\u0131 ortamlar\u0131n\u0131 Windows makinelerinde yerel performansla kullanma imkan\u0131 sunar.\n  <\/p>\n<p>\n    <strong>Docker: Konteynerizasyonun Temeli:<\/strong> Docker, uygulamalar\u0131 ve ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 &#8220;konteyner&#8221; ad\u0131 verilen hafif, ta\u015f\u0131nabilir ve izole edilmi\u015f birimler halinde paketlemek i\u00e7in kullan\u0131lan a\u00e7\u0131k kaynakl\u0131 bir platformdur. Geleneksel sanal makinelerin aksine, konteynerler i\u015fletim sistemini payla\u015f\u0131r ve bu da onlar\u0131 \u00e7ok daha h\u0131zl\u0131 ba\u015flat\u0131labilir ve kaynak a\u00e7\u0131s\u0131ndan daha verimli hale getirir. Her konteyner, kendi ba\u011f\u0131ml\u0131l\u0131klar\u0131na, k\u00fct\u00fcphanelerine ve yap\u0131land\u0131rmalar\u0131na sahip olsa da, ana i\u015fletim sisteminin \u00e7ekirde\u011fini kullan\u0131r. Bu izolasyon, &#8220;benim makinemde \u00e7al\u0131\u015f\u0131yordu&#8221; sendromunu ortadan kald\u0131r\u0131r ve geli\u015ftirme, test ve \u00fcretim ortamlar\u0131 aras\u0131nda tutarl\u0131l\u0131k sa\u011flar. Docker Engine, bu konteynerleri olu\u015fturmaktan, \u00e7al\u0131\u015ft\u0131rmaktan ve y\u00f6netmekten sorumlu ana bile\u015fendir.\n  <\/p>\n<p>\n    <strong>NAT (Network Address Translation): A\u011f Adresi \u00c7evirisi:<\/strong> NAT, \u00f6zel bir IP adres alan\u0131nda yer alan birden fazla cihaz\u0131n tek bir genel IP adresi kullanarak internete eri\u015fmesini sa\u011flayan bir a\u011f mekanizmas\u0131d\u0131r. Basit\u00e7e ifade etmek gerekirse, yerel a\u011f\u0131n\u0131zdaki cihazlar (\u00f6rne\u011fin WSL2 sanal makinesi) d\u0131\u015f d\u00fcnya ile ileti\u015fime ge\u00e7erken, a\u011f ge\u00e7idi (genellikle modem veya router) onlar\u0131n \u00f6zel IP adreslerini kendi genel IP adresine \u00e7evirir. Gelen paketler i\u00e7in de tersine \u00e7evirme i\u015flemi yaparak do\u011fru cihaza y\u00f6nlendirir. WSL2 \u00f6zelinde, her WSL2 da\u011f\u0131t\u0131m\u0131 dinamik bir IP adresi al\u0131r ve bu IP adresi, Windows&#8217;un i\u00e7 a\u011f\u0131nda bulunur. D\u0131\u015far\u0131dan (Windows ana makinesi \u00fczerinden) bu WSL2 IP adresine do\u011frudan eri\u015fmek veya belirli portlar\u0131 a\u00e7mak istedi\u011fimizde NAT yap\u0131land\u0131rmas\u0131 kritik hale gelir. Bu sayede, WSL2 i\u00e7indeki bir Docker konteynerinin a\u00e7t\u0131\u011f\u0131 bir porta, Windows \u00fczerinden &#8216;localhost&#8217; adresiyle eri\u015fim sa\u011flayabiliriz.\n  <\/p>\n<p>\n    <strong>Localhost Eri\u015fimi: \u0130\u00e7 A\u011f\u0131 D\u0131\u015far\u0131ya A\u00e7mak:<\/strong> &#8220;Localhost&#8221; terimi, genellikle yerel makinenin kendisini ifade eden standart bir ana bilgisayar ad\u0131d\u0131r (IP adresi olarak 127.0.0.1&#8217;e kar\u015f\u0131l\u0131k gelir). Geli\u015ftirme s\u00fcrecinde, uygulamalar\u0131n\u0131z\u0131 kendi makinenizde \u00e7al\u0131\u015ft\u0131r\u0131rken, taray\u0131c\u0131n\u0131z\u0131 &#8220;localhost:8080&#8221; gibi bir adrese y\u00f6nlendirerek bu uygulamalara eri\u015firsiniz. WSL2 ve Docker senaryomuzda, Docker konteynerleri WSL2 sanal makinesinin i\u00e7inde \u00e7al\u0131\u015f\u0131r ve bu sanal makinenin kendi \u00f6zel IP adresi vard\u0131r. Windows ana makinenizden &#8220;localhost&#8221; \u00fczerinden bu konteynerlere eri\u015fmek i\u00e7in, Windows \u00fczerinde bir &#8220;port y\u00f6nlendirme&#8221; kural\u0131 olu\u015fturmam\u0131z gerekir. Bu kural, belirli bir &#8220;localhost&#8221; portuna gelen trafi\u011fi, WSL2 VM&#8217;sinin belirli bir portuna y\u00f6nlendirir. Bu, Docker Desktop&#8217;\u0131n otomatik olarak yapt\u0131\u011f\u0131 bir i\u015flemdir ve biz bunu manuel olarak yap\u0131land\u0131rarak WSL2-Docker ortam\u0131m\u0131z\u0131n d\u0131\u015f d\u00fcnyadan (veya en az\u0131ndan Windows ana makinemizden) eri\u015filebilir olmas\u0131n\u0131 sa\u011flayaca\u011f\u0131z. Bu temel kavramlar\u0131 anlamak, sonraki ad\u0131mlarda yapaca\u011f\u0131m\u0131z her konfig\u00fcrasyonun neden gerekli oldu\u011funu kavraman\u0131za yard\u0131mc\u0131 olacakt\u0131r.\n  <\/p>\n<h2>Docker Desktop Olmadan WSL2 \u00dczerine Docker Kurulumu Nas\u0131l Yap\u0131l\u0131r?<\/h2>\n<p>\n    Bu b\u00f6l\u00fcmde, Docker Desktop&#8217;a ihtiya\u00e7 duymadan, s\u0131f\u0131rdan bir WSL2 ortam\u0131 \u00fczerine Docker Engine&#8217;i nas\u0131l kuraca\u011f\u0131m\u0131z\u0131 ad\u0131m ad\u0131m inceleyece\u011fiz. Bu s\u00fcre\u00e7, Windows makinenizde bir Linux da\u011f\u0131t\u0131m\u0131 kurmaktan, Docker servislerini yap\u0131land\u0131rmaya kadar temel ad\u0131mlar\u0131 i\u00e7erir.\n  <\/p>\n<h3>1. WSL2 Kurulumu ve Linux Da\u011f\u0131t\u0131m\u0131 Se\u00e7imi<\/h3>\n<p>\n    \u00d6ncelikle, WSL2&#8217;nin Windows sisteminizde etkinle\u015ftirildi\u011finden emin olman\u0131z gerekir. Windows 10 s\u00fcr\u00fcm 2004 ve \u00fczeri veya Windows 11 i\u00e7in bu ad\u0131mlar olduk\u00e7a basittir.\n  <\/p>\n<ol>\n<li><strong>Windows \u00d6zelliklerini Etkinle\u015ftirin:<\/strong> PowerShell&#8217;i y\u00f6netici olarak a\u00e7\u0131n ve a\u015fa\u011f\u0131daki komutlar\u0131 \u00e7al\u0131\u015ft\u0131r\u0131n:\n<pre><code>\ndism.exe \/online \/enable-feature \/featurename:Microsoft-Windows-Subsystem-Linux \/all \/norestart\ndism.exe \/online \/enable-feature \/featurename:VirtualMachinePlatform \/all \/norestart\n        <\/pre>\n<p><\/code><br \/>\n        Bu komutlar \"Linux i\u00e7in Windows Alt Sistemi\" ve \"Sanal Makine Platformu\" \u00f6zelliklerini etkinle\u015ftirir. Ard\u0131ndan bilgisayar\u0131n\u0131z\u0131 yeniden ba\u015flatman\u0131z gerekebilir.\n      <\/li>\n<li><strong>WSL2'yi Varsay\u0131lan Yap\u0131n:<\/strong> Yeniden ba\u015flatt\u0131ktan sonra tekrar PowerShell'i a\u00e7\u0131n ve WSL2'nin varsay\u0131lan s\u00fcr\u00fcm oldu\u011fundan emin olun:\n<pre><code>\nwsl --set-default-version 2\n        <\/pre>\n<p><\/code>\n      <\/li>\n<li><strong>Linux Da\u011f\u0131t\u0131m\u0131 Kurun:<\/strong> Microsoft Store'u a\u00e7\u0131n ve tercih etti\u011finiz bir Linux da\u011f\u0131t\u0131m\u0131n\u0131 (Ubuntu, Debian vb.) arat\u0131p kurun. Kurulum tamamland\u0131ktan sonra uygulamay\u0131 ilk kez \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda bir kullan\u0131c\u0131 ad\u0131 ve \u015fifre belirlemeniz istenecektir. Ubuntu, genellikle en pop\u00fcler ve iyi desteklenen se\u00e7enektir.<\/li>\n<\/ol>\n<p>\n      Bu ad\u0131mlar\u0131n ard\u0131ndan, Windows makinenizde \u00e7al\u0131\u015fan bir WSL2 ortam\u0131na sahip olacaks\u0131n\u0131z. Art\u0131k bu ortam\u0131n i\u00e7ine Docker Engine'i kurmaya haz\u0131r\u0131z.\n    <\/p>\n<h3>2. WSL2 Linux Da\u011f\u0131t\u0131m\u0131na Docker Engine Kurulumu<\/h3>\n<p>\n    WSL2 \u00fczerinden Linux da\u011f\u0131t\u0131m\u0131n\u0131za giri\u015f yap\u0131n (Ba\u015flat men\u00fcs\u00fcnden da\u011f\u0131t\u0131m\u0131n\u0131z\u0131n ad\u0131n\u0131 aratarak veya PowerShell'den <code>wsl -d <da\u011f\u0131t\u0131mad\u0131><\/code> komutuyla). A\u015fa\u011f\u0131daki ad\u0131mlar Ubuntu i\u00e7in ge\u00e7erlidir, ancak di\u011fer Debian tabanl\u0131 da\u011f\u0131t\u0131mlar i\u00e7in de benzerdir.\n  <\/p>\n<ol>\n<li><strong>Mevcut Paketleri G\u00fcncelleyin:<\/strong>\n<pre><code>\nsudo apt update\nsudo apt upgrade -y\n        <\/pre>\n<p><\/code>\n      <\/li>\n<li><strong>Docker'\u0131n Gerekli Ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 Kurun:<\/strong>\n<pre><code>\nsudo apt install apt-transport-https ca-certificates curl gnupg lsb-release -y\n        <\/pre>\n<p><\/code>\n      <\/li>\n<li><strong>Docker'\u0131n GPG Anahtar\u0131n\u0131 Ekleyin:<\/strong> Bu ad\u0131m, indirdi\u011fimiz Docker paketlerinin g\u00fcvenilirli\u011fini do\u011frulamak i\u00e7indir.\n<pre><code>\nsudo mkdir -p \/etc\/apt\/keyrings\ncurl -fsSL https:\/\/download.docker.com\/linux\/ubuntu\/gpg | sudo gpg --dearmor -o \/etc\/apt\/keyrings\/docker.gpg\n        <\/pre>\n<p><\/code>\n      <\/li>\n<li><strong>Docker Reposunu Ekleyin:<\/strong>\n<pre><code>\necho \\\n  \"deb [arch=$(dpkg --print-architecture) signed-by=\/etc\/apt\/keyrings\/docker.gpg] https:\/\/download.docker.com\/linux\/ubuntu \\\n  $(lsb_release -cs) stable\" | sudo tee \/etc\/apt\/sources.list.d\/docker.list > \/dev\/null\n        <\/pre>\n<p><\/code>\n      <\/li>\n<li><strong>Docker Engine'i Kurun:<\/strong> Repoyu ekledikten sonra, paket listesini g\u00fcncelleyin ve Docker Engine'i kurun.\n<pre><code>\nsudo apt update\nsudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y\n        <\/pre>\n<p><\/code>\n      <\/li>\n<li><strong>Docker Servisini Ba\u015flat\u0131n ve Kullan\u0131c\u0131y\u0131 Docker Grubuna Ekleyin:<\/strong>\n<p>Docker servisini elle ba\u015flatmak ve her seferinde <code>sudo<\/code> kullanmamak i\u00e7in kullan\u0131c\u0131n\u0131z\u0131 <code>docker<\/code> grubuna ekleyin:<\/p>\n<pre><code>\nsudo service docker start\nsudo usermod -aG docker $USER\n        <\/pre>\n<p><\/code><\/p>\n<p>Bu ad\u0131mdan sonra WSL penceresini kapat\u0131p tekrar a\u00e7man\u0131z gerekecektir. Yeniden giri\u015f yapt\u0131\u011f\u0131n\u0131zda, Docker komutlar\u0131n\u0131 <code>sudo<\/code> olmadan \u00e7al\u0131\u015ft\u0131rabileceksiniz.<\/p>\n<\/li>\n<li><strong>Docker Kurulumunu Test Edin:<\/strong>\n<pre><code>\ndocker run hello-world\n        <\/pre>\n<p><\/code><\/p>\n<p>E\u011fer \"Hello from Docker!\" mesaj\u0131n\u0131 g\u00f6r\u00fcyorsan\u0131z, Docker Engine ba\u015far\u0131l\u0131 bir \u015fekilde kurulmu\u015f demektir.<\/p>\n<\/li>\n<\/ol>\n<p>\n    Bu ad\u0131mlar\u0131 tamamlad\u0131ktan sonra, WSL2 ortam\u0131n\u0131zda \u00e7al\u0131\u015fan ba\u011f\u0131ms\u0131z bir Docker Engine'iniz olacakt\u0131r. Ancak \u015fu an i\u00e7in bu Docker konteynerlerine Windows ana makinenizden \"localhost\" \u00fczerinden eri\u015femezsiniz. Bu eri\u015fimi sa\u011flamak i\u00e7in bir sonraki b\u00f6l\u00fcmde NAT ve port y\u00f6nlendirme yap\u0131land\u0131rmalar\u0131na ge\u00e7ece\u011fiz. Bu kurulum, Docker Desktop'\u0131n sa\u011flad\u0131\u011f\u0131 entegrasyonu manuel olarak taklit etme yolculu\u011fumuzun ilk \u00f6nemli ad\u0131m\u0131d\u0131r ve sistem kaynaklar\u0131n\u0131z \u00fczerinde size daha fazla kontrol sa\u011flar.\n  <\/p>\n<div class=\"expert-tip\">\n<p>\n        Uzman \u0130pucu: WSL2 performans\u0131n\u0131 art\u0131rmak i\u00e7in, \u00f6zellikle disk I\/O yo\u011funlu\u011fu olan durumlarda, <code>.wslconfig<\/code> dosyas\u0131n\u0131 kullanarak WSL2 VM'nizin bellek ve i\u015flemci \u00e7ekirde\u011fi tahsisini \u00f6zelle\u015ftirebilirsiniz. Bu dosya, Windows kullan\u0131c\u0131n\u0131z\u0131n ana dizininde (<code>C:\\Users\\<kullan\u0131c\u0131ad\u0131>\\.wslconfig<\/code>) bulunur.\n      <\/p>\n<pre><code>\n[wsl2]\nmemory=4GB  # \u00d6rne\u011fin 4GB RAM\nprocessors=2 # \u00d6rne\u011fin 2 CPU \u00e7ekirde\u011fi\n      <\/pre>\n<p><\/code><\/p>\n<p>De\u011fi\u015fikliklerin etkili olmas\u0131 i\u00e7in <code>wsl --shutdown<\/code> komutunu \u00e7al\u0131\u015ft\u0131r\u0131p WSL'yi yeniden ba\u015flatman\u0131z gerekir.<\/p>\n<\/p><\/div>\n<h2>Manuel NAT Konfig\u00fcrasyonu: A\u011f Eri\u015fimi Nas\u0131l Sa\u011flan\u0131r?<\/h2>\n<p>\n    Docker Engine'i WSL2 \u00fczerine kurmu\u015f olsak da, Windows ana makinenizden \"localhost\" \u00fczerinden bu Docker konteynerlerine do\u011frudan eri\u015fim hen\u00fcz m\u00fcmk\u00fcn de\u011fildir. Bunun temel nedeni, WSL2 da\u011f\u0131t\u0131m\u0131n\u0131z\u0131n Windows'un dahili bir sanal a\u011f\u0131 i\u00e7inde dinamik olarak atanm\u0131\u015f bir IP adresine sahip olmas\u0131d\u0131r. Bu b\u00f6l\u00fcmde, bu eri\u015fimi sa\u011flamak i\u00e7in gerekli olan manuel NAT (Network Address Translation) yap\u0131land\u0131rmalar\u0131n\u0131 ve port y\u00f6nlendirme mekanizmalar\u0131n\u0131 ad\u0131m ad\u0131m inceleyece\u011fiz.\n  <\/p>\n<p>\n    WSL2'nin dinamik IP adresi sorunu, her WSL ba\u015flat\u0131ld\u0131\u011f\u0131nda farkl\u0131 bir IP alabilmesi anlam\u0131na gelir. Bu, sabit port y\u00f6nlendirme kurallar\u0131 olu\u015fturmay\u0131 zorla\u015ft\u0131r\u0131r. Bu sorunu a\u015fmak i\u00e7in bir sanal anahtar olu\u015fturacak, buna bir NAT a\u011f\u0131 atayacak ve ard\u0131ndan gerekli port y\u00f6nlendirmelerini yap\u0131land\u0131raca\u011f\u0131z.\n  <\/p>\n<h3>1. Windows'ta Sanal Anahtar Olu\u015fturma (Hyper-V Manager veya PowerShell)<\/h3>\n<p>\n    WSL2, asl\u0131nda bir Hyper-V sanal makinesi olarak \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan, Hyper-V y\u00f6netim ara\u00e7lar\u0131n\u0131 kullanarak WSL2'ye \u00f6zel bir sanal a\u011f olu\u015fturabiliriz.\n  <\/p>\n<ol>\n<li><strong>Hyper-V Y\u00f6netici Arac\u0131n\u0131 Etkinle\u015ftirin (Gerekliyse):<\/strong>\n<p>E\u011fer Hyper-V Y\u00f6netici arac\u0131n\u0131z kurulu de\u011filse, Denetim Masas\u0131 -> Programlar ve \u00d6zellikler -> Windows \u00f6zelliklerini a\u00e7 veya kapat yolunu izleyerek \"Hyper-V Y\u00f6netim Ara\u00e7lar\u0131\"n\u0131 etkinle\u015ftirin.<\/p>\n<\/li>\n<li><strong>Yeni Bir Sanal Anahtar Olu\u015fturun:<\/strong>\n<p>PowerShell'i y\u00f6netici olarak a\u00e7\u0131n ve a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131r\u0131n. Bu komut, sadece WSL2 ve Windows'un kendi i\u00e7inde ileti\u015fim kurabilece\u011fi harici olmayan bir sanal anahtar olu\u015fturur.<\/p>\n<pre><code>\nNew-VMSwitch -Name \"WSL2-NAT-Switch\" -SwitchType Internal\n        <\/pre>\n<p><\/code><\/p>\n<p><code>\"WSL2-NAT-Switch\"<\/code> yerine istedi\u011finiz bir isim verebilirsiniz.<\/p>\n<\/li>\n<\/ol>\n<h3>2. NAT A\u011f\u0131n\u0131 Yap\u0131land\u0131rma<\/h3>\n<p>\n    Olu\u015fturdu\u011fumuz sanal anahtar \u00fczerinden WSL2 da\u011f\u0131t\u0131m\u0131n\u0131z\u0131n internete \u00e7\u0131kabilmesini ve Windows ana makinenizden eri\u015filebilir olmas\u0131n\u0131 sa\u011flamak i\u00e7in bir NAT a\u011f\u0131 olu\u015fturmam\u0131z gerekiyor. Bu a\u011f, WSL2'nin i\u00e7indeki IP adreslerini, ana Windows makinenizin IP adreslerine \u00e7evirecektir.\n  <\/p>\n<ol>\n<li><strong>NAT IP Adresi Aral\u0131\u011f\u0131 Belirleme:<\/strong>\n<p>NAT a\u011f\u0131n\u0131z i\u00e7in bir IP adresi aral\u0131\u011f\u0131 belirlememiz gerekiyor. \u00d6rne\u011fin, <code>192.168.100.0\/24<\/code> aral\u0131\u011f\u0131n\u0131 kullanabiliriz. Bu, a\u011f ge\u00e7idinin <code>192.168.100.1<\/code> olaca\u011f\u0131 anlam\u0131na gelir.<\/p>\n<pre><code>\nNew-NetIPAddress -IPAddress 192.168.100.1 -PrefixLength 24 -InterfaceAlias \"vEthernet (WSL2-NAT-Switch)\"\n        <\/pre>\n<p><\/code><\/p>\n<p><code>\"vEthernet (WSL2-NAT-Switch)\"<\/code> ifadesi, bir \u00f6nceki ad\u0131mda olu\u015fturdu\u011fumuz sanal anahtar\u0131n a\u011f adapt\u00f6r\u00fc ad\u0131d\u0131r. Bu isim, sisteminizde farkl\u0131l\u0131k g\u00f6sterebilir. Do\u011fru ad\u0131 bulmak i\u00e7in <code>Get-NetAdapter<\/code> komutunu kullanabilirsiniz.<\/p>\n<\/li>\n<li><strong>NAT A\u011f\u0131n\u0131 Olu\u015fturma:<\/strong>\n<p>\u015eimdi belirledi\u011fimiz IP adresi aral\u0131\u011f\u0131n\u0131 kullanarak NAT a\u011f\u0131n\u0131 olu\u015fturuyoruz:<\/p>\n<pre><code>\nNew-NetNat -Name \"WSL2-NAT-Network\" -InternalIPInterfaceAddressPrefix 192.168.100.0\/24\n        <\/pre>\n<p><\/code><\/p>\n<p><code>\"WSL2-NAT-Network\"<\/code>, NAT a\u011f\u0131n\u0131za verdi\u011fimiz isimdir. Bu ad\u0131 istedi\u011finiz gibi de\u011fi\u015ftirebilirsiniz.<\/p>\n<\/li>\n<\/ol>\n<p>\n    Bu ad\u0131mlarla, Windows \u00fczerinde WSL2'niz i\u00e7in \u00f6zel bir sanal anahtar ve bir NAT a\u011f\u0131 olu\u015fturmu\u015f olursunuz. Ancak bu NAT a\u011f\u0131 hen\u00fcz WSL2 da\u011f\u0131t\u0131m\u0131n\u0131z taraf\u0131ndan kullan\u0131lm\u0131yor. WSL2'yi bu yeni a\u011fa ba\u011flamak i\u00e7in birka\u00e7 ek ad\u0131m daha gereklidir. WSL2'nin otomatik olarak bu yeni sanal anahtar\u0131 kullanmas\u0131 i\u00e7in <code>wsl --shutdown<\/code> komutunu \u00e7al\u0131\u015ft\u0131r\u0131p t\u00fcm WSL2 da\u011f\u0131t\u0131mlar\u0131n\u0131 kapat\u0131p tekrar a\u00e7man\u0131z gerekebilir. WSL yeniden ba\u015flat\u0131ld\u0131\u011f\u0131nda, yeni olu\u015fturulan <code>WSL2-NAT-Switch<\/code>'e ba\u011flanmaya \u00e7al\u0131\u015facakt\u0131r.\n  <\/p>\n<p>\n    Bu yap\u0131land\u0131rmalar biraz karma\u015f\u0131k g\u00f6r\u00fcnebilir ancak Windows'un a\u011f alt yap\u0131s\u0131yla WSL2'nin dinamik IP y\u00f6netimini bir araya getirmek i\u00e7in gereklidir. Do\u011fru yap\u0131ld\u0131\u011f\u0131nda, WSL2 i\u00e7indeki Docker konteynerlerinize Windows ana makinenizden belirlenmi\u015f portlar \u00fczerinden sorunsuz bir \u015fekilde eri\u015febileceksiniz. Bir sonraki b\u00f6l\u00fcmde, bu port y\u00f6nlendirme i\u015flemini nas\u0131l ger\u00e7ekle\u015ftirece\u011fimizi detayl\u0131ca ele alaca\u011f\u0131z.\n  <\/p>\n<div class=\"expert-tip\">\n<p>\n        Uzman \u0130pucu: Birden fazla WSL2 da\u011f\u0131t\u0131m\u0131n\u0131z varsa ve hepsi i\u00e7in ayn\u0131 NAT a\u011f\u0131n\u0131 kullanmak istiyorsan\u0131z, bu ad\u0131mlar\u0131 sadece bir kez yapman\u0131z yeterlidir. T\u00fcm WSL2 da\u011f\u0131t\u0131mlar\u0131 ayn\u0131 sanal anahtar ve NAT a\u011f\u0131 \u00fczerinden ileti\u015fim kurabilir. E\u011fer farkl\u0131 a\u011f yap\u0131land\u0131rmalar\u0131 gerektiren \u00f6zel durumlar\u0131n\u0131z varsa, her da\u011f\u0131t\u0131m i\u00e7in ayr\u0131 sanal anahtarlar ve NAT a\u011flar\u0131 olu\u015fturman\u0131z gerekebilir, ancak bu, karma\u015f\u0131kl\u0131\u011f\u0131 art\u0131racakt\u0131r.\n      <\/p>\n<\/p><\/div>\n<h2>Yerel Makineden Docker Servislerine Eri\u015fim: Port Y\u00f6nlendirme ve G\u00fcvenlik<\/h2>\n<p>\n    Art\u0131k WSL2 \u00fczerinde Docker Engine'i \u00e7al\u0131\u015f\u0131r durumda ve Windows taraf\u0131nda bir NAT a\u011f\u0131 yap\u0131land\u0131rm\u0131\u015f durumday\u0131z. Ancak bu haliyle, Windows ana makinemizdeki taray\u0131c\u0131dan veya di\u011fer uygulamalardan WSL2 i\u00e7indeki Docker konteynerlerine \"localhost\" \u00fczerinden do\u011frudan eri\u015femeyiz. \u0130\u015fte bu noktada \"port y\u00f6nlendirme\" devreye giriyor. Port y\u00f6nlendirme, Windows ana makinenizin belirli bir portuna gelen trafi\u011fi, WSL2'nin dinamik IP adresine ve oradaki Docker konteynerinin belirli bir portuna y\u00f6nlendirmemizi sa\u011flar.\n  <\/p>\n<h3>1. WSL2 IP Adresini Dinamik Olarak Bulma<\/h3>\n<p>\n    WSL2'nin dinamik IP adresi ald\u0131\u011f\u0131n\u0131 daha \u00f6nce belirtmi\u015ftik. Bu, her WSL2 yeniden ba\u015flat\u0131ld\u0131\u011f\u0131nda IP adresinin de\u011fi\u015febilece\u011fi anlam\u0131na gelir. Bu y\u00fczden, port y\u00f6nlendirme kurallar\u0131n\u0131 olu\u015fturmadan \u00f6nce g\u00fcncel WSL2 IP adresini bulmam\u0131z gerekiyor.\n  <\/p>\n<ol>\n<li><strong>WSL2 IP Adresini Tespit Etme:<\/strong>\n<p>WSL2 terminalinize gidin ve a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code>\nip a | grep eth0 | grep inet | awk '{print $2}' | cut -d '\/' -f 1\n        <\/pre>\n<p><\/code><\/p>\n<p>Bu komut, <code>eth0<\/code> aray\u00fcz\u00fcne atanm\u0131\u015f olan IPv4 adresini size verecektir. \u00d6rne\u011fin: <code>172.20.12.15<\/code>.<\/p>\n<\/li>\n<li><strong>PowerShell ile Otomatik IP Tespiti (Geli\u015fmi\u015f Y\u00f6ntem):<\/strong>\n<p>Port y\u00f6nlendirme kurallar\u0131n\u0131 otomatik hale getirmek i\u00e7in, bu IP adresini PowerShell \u00fczerinden dinamik olarak alabiliriz. Y\u00f6netici olarak a\u00e7\u0131lm\u0131\u015f PowerShell'de a\u015fa\u011f\u0131daki komutu kullan\u0131n:<\/p>\n<pre><code>\n$wsl_ip = (wsl hostname -I).Trim()\nWrite-Host \"WSL2 IP Adresi: $wsl_ip\"\n        <\/pre>\n<p><\/code><\/p>\n<p>Bu komut, size sadece IP adresini d\u00f6nd\u00fcr\u00fcr ve bir sonraki ad\u0131mda kullan\u0131ma haz\u0131rd\u0131r.<\/p>\n<\/li>\n<\/ol>\n<h3>2. Port Y\u00f6nlendirme Kurallar\u0131 Olu\u015fturma (<code>netsh interface portproxy<\/code>)<\/h3>\n<p>\n    Windows'ta port y\u00f6nlendirme i\u015flemleri i\u00e7in <code>netsh interface portproxy<\/code> komut setini kullan\u0131r\u0131z. Bu komut, belirli bir dinleme portuna gelen TCP veya UDP trafi\u011fini ba\u015fka bir IP adresinin belirli bir portuna y\u00f6nlendirir.\n  <\/p>\n<ol>\n<li><strong>\u00d6rnek Senaryo: Nginx Konteyneri<\/strong>\n<p>Diyelim ki WSL2 i\u00e7inde bir Nginx konteyneri \u00e7al\u0131\u015ft\u0131racaks\u0131n\u0131z ve bu konteyner 80 numaral\u0131 porttan yay\u0131n yap\u0131yor. Biz bu servise Windows'tan <code>localhost:8080<\/code> \u00fczerinden eri\u015fmek istiyoruz.<\/p>\n<p>\u00d6nce WSL2 i\u00e7inde Nginx'i \u00e7al\u0131\u015ft\u0131ral\u0131m:<\/p>\n<pre><code>\ndocker run --name my-nginx -p 80:80 -d nginx\n        <\/pre>\n<p><\/code><\/p>\n<p>\u015eimdi Windows PowerShell'i (y\u00f6netici olarak) a\u00e7\u0131n ve WSL2 IP adresinizi tespit ettikten sonra port y\u00f6nlendirme kural\u0131n\u0131 ekleyin:<\/p>\n<pre><code>\n# WSL2 IP adresini dinamik olarak al\u0131n (yukar\u0131daki komutu kullan\u0131n)\n$wsl_ip = (wsl hostname -I).Trim()\n\n# Port y\u00f6nlendirme kural\u0131n\u0131 ekle:\nnetsh interface portproxy add v4tov4 listenport=8080 listenaddress=0.0.0.0 connectport=80 connectaddress=$wsl_ip\n        <\/pre>\n<p><\/code><\/p>\n<p>Burada:<\/p>\n<ul>\n<li><code>listenport=8080<\/code>: Windows ana makinenizdeki dinlenecek port.<\/li>\n<li><code>listenaddress=0.0.0.0<\/code>: T\u00fcm a\u011f aray\u00fczlerinden gelen ba\u011flant\u0131lar\u0131 dinle.<\/li>\n<li><code>connectport=80<\/code>: WSL2 i\u00e7indeki Docker konteynerinin hedef portu.<\/li>\n<li><code>connectaddress=$wsl_ip<\/code>: WSL2 da\u011f\u0131t\u0131m\u0131n\u0131z\u0131n IP adresi.<\/li>\n<\/ul>\n<p>Art\u0131k Windows taray\u0131c\u0131n\u0131zdan <code>http:\/\/localhost:8080<\/code> adresine giderek WSL2 i\u00e7indeki Nginx konteynerine eri\u015febilirsiniz.<\/p>\n<\/li>\n<li><strong>Port Y\u00f6nlendirme Kurallar\u0131n\u0131 G\u00f6r\u00fcnt\u00fcleme ve Silme:<\/strong>\n<p>Mevcut t\u00fcm port y\u00f6nlendirme kurallar\u0131n\u0131 g\u00f6rmek i\u00e7in:<\/p>\n<pre><code>\nnetsh interface portproxy show v4tov4\n        <\/pre>\n<p><\/code><\/p>\n<p>Bir kural\u0131 silmek i\u00e7in:<\/p>\n<pre><code>\nnetsh interface portproxy delete v4tov4 listenport=8080 listenaddress=0.0.0.0\n        <\/pre>\n<p><\/code>\n      <\/li>\n<\/ol>\n<h3>3. G\u00fcvenlik ve En \u0130yi Pratikler<\/h3>\n<p>\n    Manuel port y\u00f6nlendirme yaparken g\u00fcvenlik \u00f6nemli bir husustur:\n  <\/p>\n<ul>\n<li><strong>Firewall Ayarlar\u0131:<\/strong> Windows Defender Firewall, varsay\u0131lan olarak gelen ba\u011flant\u0131lar\u0131 engelleyebilir. Port y\u00f6nlendirme kurallar\u0131n\u0131z\u0131n \u00e7al\u0131\u015fmas\u0131 i\u00e7in belirli portlar i\u00e7in (\u00f6rne\u011fin 8080) bir g\u00fcvenlik duvar\u0131 kural\u0131 olu\u015fturman\u0131z gerekebilir. Sadece ger\u00e7ekten ihtiya\u00e7 duydu\u011funuz portlar\u0131 a\u00e7\u0131n.<\/li>\n<li><strong><code>listenaddress<\/code> Kullan\u0131m\u0131:<\/strong> <code>listenaddress=0.0.0.0<\/code> kullanmak, y\u00f6nlendirmeyi t\u00fcm a\u011f aray\u00fczleri \u00fczerinden eri\u015filebilir k\u0131lar. E\u011fer sadece kendi makinenizden eri\u015fmek istiyorsan\u0131z, <code>listenaddress=127.0.0.1<\/code> kullanmak daha g\u00fcvenli olabilir. Ancak, baz\u0131 durumlarda a\u011f\u0131n\u0131zdaki di\u011fer cihazlardan da eri\u015fim sa\u011flamak isteyebilirsiniz (\u00f6rne\u011fin mobil cihaz\u0131n\u0131zdan).<\/li>\n<li><strong>Gereksiz Kurallar\u0131 Kald\u0131r\u0131n:<\/strong> Geli\u015ftirme s\u00fcrecinizde art\u0131k kullanmad\u0131\u011f\u0131n\u0131z port y\u00f6nlendirme kurallar\u0131n\u0131 d\u00fczenli olarak temizleyin. Bu, gereksiz a\u00e7\u0131k portlar\u0131 ve potansiyel g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 azalt\u0131r.<\/li>\n<li><strong>Otomasyon:<\/strong> WSL2 IP adresi dinamik oldu\u011fu i\u00e7in, her yeniden ba\u015flatmada bu ad\u0131mlar\u0131 tekrarlamak zahmetli olabilir. Bir PowerShell scripti yazarak bu i\u015flemi otomatik hale getirebilirsiniz. Bu script, WSL2'nin IP adresini bulacak, eski port y\u00f6nlendirme kurallar\u0131n\u0131 silecek ve yenilerini olu\u015fturacakt\u0131r.<\/li>\n<\/ul>\n<p>\n    Bu ad\u0131mlarla, WSL2 i\u00e7indeki Docker konteynerlerinize Windows ana makinenizden \"localhost\" \u00fczerinden sorunsuz bir \u015fekilde eri\u015fim sa\u011flam\u0131\u015f olursunuz. Bu, Docker Desktop'\u0131n sundu\u011fu temel bir \u00f6zelli\u011fi manuel olarak taklit etmenin ve geli\u015ftirme ortam\u0131n\u0131z \u00fczerinde tam kontrol sahibi olman\u0131n \u00f6nemli bir par\u00e7as\u0131d\u0131r.\n  <\/p>\n<div class=\"expert-tip\">\n<p>\n        Uzman \u0130pucu: Otomatik port y\u00f6nlendirme i\u00e7in bir ba\u015flang\u0131\u00e7 scripti olu\u015fturabilirsiniz. PowerShell'de bir <code>.ps1<\/code> dosyas\u0131 olu\u015fturun (\u00f6rne\u011fin <code>C:\\Scripts\\wsl-docker-port-forward.ps1<\/code>) ve Windows G\u00f6rev Zamanlay\u0131c\u0131'ya (Task Scheduler) sistem ba\u015flang\u0131c\u0131nda bu scripti \u00e7al\u0131\u015ft\u0131rmas\u0131n\u0131 s\u00f6yleyin. Scriptinizde mevcut kurallar\u0131 silmeyi ve yeni kurallar\u0131 eklemeyi unutmay\u0131n.\n      <\/p>\n<pre><code>\n# wsl-docker-port-forward.ps1\n# WSL2 IP'sini al\n$wsl_ip = (wsl hostname -I).Trim()\n\n# Mevcut t\u00fcm v4tov4 kurallar\u0131n\u0131 sil\nnetsh interface portproxy delete v4tov4\n\n# \u00d6rnek port y\u00f6nlendirme kurallar\u0131n\u0131 ekle\n# Docker'da 80 portunda \u00e7al\u0131\u015fan web uygulamas\u0131 i\u00e7in (Windows'ta 8080'den eri\u015fim)\nnetsh interface portproxy add v4tov4 listenport=8080 listenaddress=0.0.0.0 connectport=80 connectaddress=$wsl_ip\n\n# Docker'da 3000 portunda \u00e7al\u0131\u015fan Node.js uygulamas\u0131 i\u00e7in (Windows'ta 3000'den eri\u015fim)\nnetsh interface portproxy add v4tov4 listenport=3000 listenaddress=0.0.0.0 connectport=3000 connectaddress=$wsl_ip\n\nWrite-Host \"WSL2 IP: $wsl_ip, Port y\u00f6nlendirme kurallar\u0131 g\u00fcncellendi.\"\n      <\/pre>\n<p><\/code>\n    <\/div>\n<h2>Vaka Analizi: Geli\u015ftirme Ortam\u0131n\u0131z\u0131 Optimize Etmek<\/h2>\n<p>\n    \u015eimdiye kadar edindi\u011fimiz bilgileri somut bir senaryo \u00fczerinde uygulayarak, Docker Desktop olmadan manuel WSL2-Docker kurulumunun ger\u00e7ek bir geli\u015ftirme ortam\u0131nda nas\u0131l kullan\u0131labilece\u011fini g\u00f6relim. Bu vaka analizi, bir web geli\u015ftiricisinin pop\u00fcler teknolojilerle (Node.js ve PostgreSQL) nas\u0131l bir ortam kurabilece\u011fini g\u00f6stermektedir.\n  <\/p>\n<h3>Senaryo: Tam Y\u0131\u011f\u0131n Web Uygulamas\u0131 Geli\u015ftirme Ortam\u0131<\/h3>\n<p>\n    Ay\u015fe, modern bir React \u00f6n y\u00fcz\u00fc ve Node.js\/Express arka y\u00fcz\u00fc ile PostgreSQL veritaban\u0131 kullanan bir tam y\u0131\u011f\u0131n web uygulamas\u0131 geli\u015ftiriyor. Docker Desktop'\u0131n getirdi\u011fi kaynak t\u00fcketimi ve lisanslama maliyetlerinden ka\u00e7\u0131nmak isteyen Ay\u015fe, WSL2 \u00fczerinde manuel bir Docker kurulumu yapmaya karar verdi.\n  <\/p>\n<h4>Ad\u0131mlar:<\/h4>\n<ol>\n<li><strong>WSL2 ve Docker Engine Kurulumu:<\/strong>\n<p>Ay\u015fe, yukar\u0131daki \"Docker Desktop Olmadan WSL2 \u00dczerine Docker Kurulumu Nas\u0131l Yap\u0131l\u0131r?\" b\u00f6l\u00fcm\u00fcndeki ad\u0131mlar\u0131 takip ederek Ubuntu WSL2 da\u011f\u0131t\u0131m\u0131na Docker Engine'i kurdu. <code>docker run hello-world<\/code> komutuyla kurulumun ba\u015far\u0131l\u0131 oldu\u011funu do\u011frulad\u0131.<\/p>\n<\/li>\n<li><strong>Sanal Anahtar ve NAT A\u011f\u0131 Yap\u0131land\u0131rmas\u0131:<\/strong>\n<p>Ard\u0131ndan, \"Manuel NAT Konfig\u00fcrasyonu\" b\u00f6l\u00fcm\u00fcndeki ad\u0131mlar\u0131 uygulayarak Windows taraf\u0131nda <code>WSL2-NAT-Switch<\/code> ad\u0131nda bir sanal anahtar ve <code>WSL2-NAT-Network<\/code> ad\u0131nda bir NAT a\u011f\u0131 olu\u015fturdu. Bu, WSL2'sinin Windows a\u011f ortam\u0131yla entegre olmas\u0131n\u0131 sa\u011flad\u0131.<\/p>\n<\/li>\n<li><strong>Uygulama Bile\u015fenlerini Dockerize Etme:<\/strong>\n<p>Ay\u015fe, Node.js arka y\u00fcz\u00fc ve PostgreSQL veritaban\u0131 i\u00e7in iki ayr\u0131 Docker servisi tan\u0131mlayan bir <code>docker-compose.yml<\/code> dosyas\u0131 olu\u015fturdu:<\/p>\n<pre><code>\nversion: '3.8'\nservices:\n  app:\n    build: .\n    ports:\n      - \"3000:3000\"\n    environment:\n      DATABASE_URL: postgres:\/\/user:password@db:5432\/mydatabase\n    depends_on:\n      - db\n  db:\n    image: postgres:14\n    environment:\n      POSTGRES_DB: mydatabase\n      POSTGRES_USER: user\n      POSTGRES_PASSWORD: password\n    volumes:\n      - pgdata:\/var\/lib\/postgresql\/data\n\nvolumes:\n  pgdata:\n      <\/pre>\n<p><\/code><\/p>\n<p>Node.js uygulamas\u0131 i\u00e7in Dockerfile (<code>app<\/code> servisi i\u00e7in):<\/p>\n<pre><code>\nFROM node:18\nWORKDIR \/app\nCOPY package*.json .\/\nRUN npm install\nCOPY . .\nCMD [\"npm\", \"start\"]\n      <\/pre>\n<p><\/code>\n    <\/li>\n<li><strong>Docker Konteynerlerini Ba\u015flatma:<\/strong>\n<p>WSL2 terminalinde, <code>docker-compose.yml<\/code> dosyas\u0131n\u0131n bulundu\u011fu dizine giderek konteynerleri ba\u015flatt\u0131:<\/p>\n<pre><code>\ndocker compose up -d\n      <\/pre>\n<p><\/code><\/p>\n<p>Bu komut, PostgreSQL veritaban\u0131n\u0131 ve Node.js uygulamas\u0131n\u0131 WSL2 i\u00e7inde ayr\u0131 Docker konteynerlerinde \u00e7al\u0131\u015ft\u0131rd\u0131. Node.js uygulamas\u0131 3000 numaral\u0131 porttan, PostgreSQL ise 5432 numaral\u0131 porttan dinlemeye ba\u015flad\u0131 (sadece Docker i\u00e7indeki \u00f6zel a\u011fda).<\/p>\n<\/li>\n<li><strong>Port Y\u00f6nlendirme Kurallar\u0131n\u0131 Olu\u015fturma:<\/strong>\n<p>Ay\u015fe, \"Yerel Makineden Docker Servislerine Eri\u015fim\" b\u00f6l\u00fcm\u00fcndeki ad\u0131mlar\u0131 kullanarak, Windows ana makinesinden bu servislere eri\u015fmek i\u00e7in port y\u00f6nlendirme kurallar\u0131 olu\u015fturdu. \u0130lk olarak, g\u00fcncel WSL2 IP adresini buldu:<\/p>\n<pre><code>\n$wsl_ip = (wsl hostname -I).Trim()\n      <\/pre>\n<p><\/code><\/p>\n<p>Ard\u0131ndan, Node.js uygulamas\u0131 i\u00e7in 3000 numaral\u0131 portu ve PostgreSQL veritaban\u0131 i\u00e7in 5432 numaral\u0131 portu Windows ana makinesine y\u00f6nlendirdi:<\/p>\n<pre><code>\nnetsh interface portproxy add v4tov4 listenport=3000 listenaddress=0.0.0.0 connectport=3000 connectaddress=$wsl_ip\nnetsh interface portproxy add v4tov4 listenport=5432 listenaddress=0.0.0.0 connectport=5432 connectaddress=$wsl_ip\n      <\/pre>\n<p><\/code>\n    <\/li>\n<li><strong>Uygulamay\u0131 Test Etme:<\/strong>\n<p>Ay\u015fe \u015fimdi Windows taray\u0131c\u0131s\u0131n\u0131 a\u00e7\u0131p <code>http:\/\/localhost:3000<\/code> adresine giderek Node.js uygulamas\u0131n\u0131n API'lerine eri\u015febiliyordu. Ayr\u0131ca, DBeaver gibi bir veritaban\u0131 y\u00f6netim arac\u0131yla <code>localhost:5432<\/code> adresinden PostgreSQL veritaban\u0131na ba\u011flanabildi. Geli\u015ftirme ortam\u0131 art\u0131k eksiksiz ve h\u0131zl\u0131 bir \u015fekilde \u00e7al\u0131\u015f\u0131yordu.<\/p>\n<\/li>\n<\/ol>\n<p>\n    Bu vaka analizi, manuel WSL2-Docker kurulumunun ne kadar esnek ve g\u00fc\u00e7l\u00fc olabilece\u011fini g\u00f6stermektedir. Ay\u015fe, Docker Desktop'\u0131n ek y\u00fck\u00fc ve lisanslama endi\u015feleri olmadan, ihtiya\u00e7lar\u0131na g\u00f6re optimize edilmi\u015f bir geli\u015ftirme ortam\u0131 kurmay\u0131 ba\u015fard\u0131. Bu y\u00f6ntem, \u00f6zellikle kaynak k\u0131s\u0131tlamalar\u0131 olan makinelerde veya birden fazla geli\u015ftirme ortam\u0131n\u0131 e\u015f zamanl\u0131 olarak y\u00f6netmesi gereken profesyoneller i\u00e7in ideal bir \u00e7\u00f6z\u00fcmd\u00fcr. Ay\u015fe gibi bir\u00e7ok geli\u015ftirici, bu manuel konfig\u00fcrasyon sayesinde daha hafif, daha h\u0131zl\u0131 ve daha kontroll\u00fc bir geli\u015ftirme deneyimi elde edebilir.\n  <\/p>\n<h2>\u0130leri D\u00fczey \u0130pu\u00e7lar\u0131 ve Optimizasyonlar<\/h2>\n<p>\n    Manuel WSL2 ve Docker kurulumunuzu daha verimli hale getirmek ve kar\u015f\u0131la\u015fabilece\u011finiz baz\u0131 yayg\u0131n sorunlar\u0131 \u00e7\u00f6zmek i\u00e7in ileri d\u00fczey ipu\u00e7lar\u0131 ve optimizasyonlar\u0131 bu b\u00f6l\u00fcmde ele alaca\u011f\u0131z. Bu tavsiyeler, geli\u015ftirme i\u015f ak\u0131\u015f\u0131n\u0131z\u0131 iyile\u015ftirmeye ve sistem performans\u0131n\u0131 art\u0131rmaya yard\u0131mc\u0131 olacakt\u0131r.\n  <\/p>\n<h3>1. Otomatik Port Y\u00f6nlendirme Scriptleri<\/h3>\n<p>\n    WSL2'nin dinamik IP adresi sorunu nedeniyle, her WSL2 yeniden ba\u015flat\u0131ld\u0131\u011f\u0131nda port y\u00f6nlendirme kurallar\u0131n\u0131 manuel olarak yeniden olu\u015fturmak zahmetli olabilir. Bunu otomatikle\u015ftirmek i\u00e7in bir PowerShell scripti olu\u015fturabilir ve bunu Windows ba\u015flang\u0131c\u0131nda veya WSL2 ba\u015flat\u0131ld\u0131\u011f\u0131nda \u00e7al\u0131\u015ft\u0131rabilirsiniz.\n  <\/p>\n<pre><code>\n# C:\\Scripts\\Update-WslDockerPortForwarding.ps1\n# Y\u00f6netici olarak \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131 gerekmektedir\n\n# WSL2'nin g\u00fcncel IP adresini al\n$wsl_ip = (wsl hostname -I).Trim()\nif ([string]::IsNullOrWhiteSpace($wsl_ip)) {\n    Write-Warning \"WSL2 IP adresi al\u0131namad\u0131. WSL2 \u00e7al\u0131\u015f\u0131yor mu?\"\n    exit 1\n}\n\nWrite-Host \"WSL2 IP Adresi: $wsl_ip\"\n\n# Mevcut t\u00fcm v4tov4 port y\u00f6nlendirme kurallar\u0131n\u0131 sil (iste\u011fe ba\u011fl\u0131, sadece temiz bir ba\u015flang\u0131\u00e7 i\u00e7in)\n# Bu sat\u0131r, ayn\u0131 dinleme portu i\u00e7in birden fazla kural\u0131n olu\u015fmas\u0131n\u0131 engeller\nnetsh interface portproxy delete v4tov4 | Out-Null # Hatalar\u0131 bast\u0131rmak i\u00e7in Out-Null\n\n# Eklenecek port y\u00f6nlendirmelerinin bir listesini olu\u015ftur\n# [WindowsListenPort, DockerContainerPort]\n$portsToForward = @(\n    @{ ListenPort = 8080; ConnectPort = 80 },   # Nginx, Apache gibi web sunucular\u0131\n    @{ ListenPort = 3000; ConnectPort = 3000 }, # Node.js uygulamalar\u0131\n    @{ ListenPort = 5000; ConnectPort = 5000 }, # Python Flask\/Django uygulamalar\u0131\n    @{ ListenPort = 5432; ConnectPort = 5432 }, # PostgreSQL\n    @{ ListenPort = 3306; ConnectPort = 3306 }  # MySQL\n)\n\nforeach ($port in $portsToForward) {\n    $listenPort = $port.ListenPort\n    $connectPort = $port.ConnectPort\n    $command = \"netsh interface portproxy add v4tov4 listenport=$listenPort listenaddress=0.0.0.0 connectport=$connectPort connectaddress=$wsl_ip\"\n    \n    try {\n        Invoke-Expression $command\n        Write-Host \"Port y\u00f6nlendirme kural\u0131 eklendi: localhost:$listenPort -> $wsl_ip:$connectPort\"\n    } catch {\n        Write-Error \"Port y\u00f6nlendirme kural\u0131 eklenirken hata olu\u015ftu: $command. Hata: $_\"\n    }\n}\n\nWrite-Host \"T\u00fcm belirlenen port y\u00f6nlendirme kurallar\u0131 g\u00fcncellendi.\"\n    <\/pre>\n<p><\/code><\/p>\n<p>\n    Bu scripti Windows G\u00f6rev Zamanlay\u0131c\u0131 (Task Scheduler) ile her oturum a\u00e7\u0131l\u0131\u015f\u0131nda veya sistem ba\u015flang\u0131c\u0131nda otomatik olarak \u00e7al\u0131\u015facak \u015fekilde ayarlayabilirsiniz. G\u00f6rev Zamanlay\u0131c\u0131'da yeni bir g\u00f6rev olu\u015ftururken \"En y\u00fcksek ayr\u0131cal\u0131klarla \u00e7al\u0131\u015ft\u0131r\" se\u00e7ene\u011fini i\u015faretlemeyi unutmay\u0131n, \u00e7\u00fcnk\u00fc <code>netsh<\/code> komutlar\u0131 y\u00f6netici izni gerektirir.\n  <\/p>\n<h3>2. WSL2 Performans \u0130yile\u015ftirmeleri<\/h3>\n<p>\n    WSL2, varsay\u0131lan olarak sistem kaynaklar\u0131n\u0131n bir k\u0131sm\u0131n\u0131 kullan\u0131r. Performans\u0131n\u0131z\u0131 daha da optimize etmek i\u00e7in <code>.wslconfig<\/code> dosyas\u0131n\u0131 kullanabilirsiniz:\n  <\/p>\n<pre><code>\n# C:\\Users\\<kullan\u0131c\u0131ad\u0131n\u0131z>\\.wslconfig\n[wsl2]\nmemory=8GB           # WSL2'ye tahsis edilecek maksimum RAM. Daha b\u00fcy\u00fck projeler i\u00e7in art\u0131r\u0131labilir.\nprocessors=4         # WSL2'ye tahsis edilecek maksimum CPU \u00e7ekirdek say\u0131s\u0131.\nswap=2GB             # WSL2 i\u00e7in takas alan\u0131 (SWAP) boyutu.\nswapFile=C:\\temp\\wsl-swap.vhdx # Takas dosyas\u0131 konumu\nlocalhostforwarding=true # Docker Desktop'taki gibi otomatik localhost forwarding'i etkinle\u015ftirebilir.\nkernelCommandLine = \"systemd.unified_cgroup_hierarchy=0\" # systemd deste\u011fi i\u00e7in gerekli olabilir.\n    <\/pre>\n<p><\/code><\/p>\n<p>\n    De\u011fi\u015fikliklerin etkili olmas\u0131 i\u00e7in PowerShell'den <code>wsl --shutdown<\/code> komutunu \u00e7al\u0131\u015ft\u0131r\u0131p WSL'yi tamamen kapat\u0131p yeniden ba\u015flat\u0131n.\n  <\/p>\n<h3>3. WSL2 \u00dczerinde systemd Kullan\u0131m\u0131<\/h3>\n<p>\n    Baz\u0131 Linux servisleri (\u00f6rne\u011fin <code>docker<\/code> servisi, <code>systemd<\/code> ile y\u00f6netilir). WSL2'nin varsay\u0131lan yap\u0131land\u0131rmas\u0131 <code>systemd<\/code>'yi do\u011frudan desteklemez. Ancak son zamanlarda WSL2, <code>systemd<\/code>'yi deneysel olarak desteklemeye ba\u015flad\u0131. <code>.wslconfig<\/code> dosyas\u0131nda <code>systemd=true<\/code> ayar\u0131n\u0131 yaparak veya <code>\/etc\/wsl.conf<\/code> dosyas\u0131n\u0131 d\u00fczenleyerek <code>systemd<\/code>'yi etkinle\u015ftirebilirsiniz.\n  <\/p>\n<pre><code>\n# \/etc\/wsl.conf (WSL2 i\u00e7inden d\u00fczenlenir)\n[boot]\nsystemd=true\n    <\/pre>\n<p><\/code><\/p>\n<p>\n    Bu de\u011fi\u015fiklikleri yapt\u0131ktan sonra <code>wsl --shutdown<\/code> komutu ile WSL2'yi kapat\u0131p yeniden ba\u015flatman\u0131z gerekmektedir.\n  <\/p>\n<h3>4. \u00c7oklu WSL2 Da\u011f\u0131t\u0131mlar\u0131 ve A\u011f \u0130zolasyonu<\/h3>\n<p>\n    Birden fazla WSL2 da\u011f\u0131t\u0131m\u0131 kullan\u0131yorsan\u0131z (\u00f6rne\u011fin, Ubuntu ve Debian), hepsi ayn\u0131 sanal anahtar\u0131 ve NAT a\u011f\u0131n\u0131 kullanabilir. Ancak, her da\u011f\u0131t\u0131m\u0131n kendi Docker Engine'i ayr\u0131 birer ortam olarak \u00e7al\u0131\u015f\u0131r. E\u011fer farkl\u0131 projeler i\u00e7in tamamen izole a\u011flar veya farkl\u0131 IP aral\u0131klar\u0131 gerekiyorsa, her da\u011f\u0131t\u0131m veya proje grubu i\u00e7in ayr\u0131 sanal anahtarlar ve NAT a\u011flar\u0131 olu\u015fturman\u0131z gerekebilir. Bu, a\u011f karma\u015f\u0131kl\u0131\u011f\u0131n\u0131 art\u0131rsa da, tam bir izolasyon ve \u00f6zelle\u015ftirme sa\u011flar.\n  <\/p>\n<h3>5. WSL Dosya Sistemi Performans\u0131<\/h3>\n<p>\n    WSL2, Linux dosyalar\u0131na Windows'tan eri\u015firken veya tam tersi, performans sorunlar\u0131 ya\u015fayabilir. En iyi performans i\u00e7in, projelerinizi ve Docker dosyalar\u0131n\u0131z\u0131 (<code>docker-compose.yml<\/code>, uygulama kodlar\u0131) WSL2 Linux dosya sistemi i\u00e7inde (\u00f6rne\u011fin <code>\/home\/user\/myproject<\/code> alt\u0131nda) tutun. Windows taraf\u0131ndaki bir dizinden (<code>\/mnt\/c\/Users\/...<\/code>) Docker volume'lar\u0131n\u0131 ba\u011flamak veya kod \u00e7al\u0131\u015ft\u0131rmak, I\/O performans\u0131n\u0131 d\u00fc\u015f\u00fcrebilir.\n  <\/p>\n<p>\n    Bu ileri d\u00fczey ipu\u00e7lar\u0131 ve optimizasyonlar, manuel WSL2 ve Docker kurulumunuzdan en iyi \u015fekilde yararlanman\u0131za olanak tan\u0131yacak, geli\u015ftirme deneyiminizi daha ak\u0131c\u0131 ve verimli hale getirecektir. Unutmay\u0131n, her sistemin kendine \u00f6zg\u00fc ihtiya\u00e7lar\u0131 olabilir, bu nedenle bu ayarlar\u0131 kendi kullan\u0131m senaryonuza g\u00f6re uyarlamaktan \u00e7ekinmeyin.\n  <\/p>\n<h2>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular<\/h2>\n<p>\n    Bu kapsaml\u0131 rehber boyunca, Docker Desktop'\u0131n getirdi\u011fi s\u0131n\u0131rlamalar\u0131 a\u015farak, Windows Subsystem for Linux 2 (WSL2) \u00fczerinde tamamen manuel bir Docker geli\u015ftirme ortam\u0131 kurman\u0131n inceliklerini ke\u015ffettik. Ad\u0131m ad\u0131m, WSL2 kurulumundan Docker Engine entegrasyonuna, sanal a\u011f olu\u015fturmadan dinamik IP y\u00f6netimine ve port y\u00f6nlendirme kurallar\u0131na kadar t\u00fcm kritik s\u00fcre\u00e7leri ele ald\u0131k. Bir vaka analiziyle ger\u00e7ek d\u00fcnya senaryosunda bu bilgilerin nas\u0131l uygulanabilece\u011fini g\u00f6sterdik ve son olarak, ileri d\u00fczey ipu\u00e7lar\u0131 ve optimizasyonlarla sisteminizi daha da verimli hale getirme yollar\u0131n\u0131 inceledik.\n  <\/p>\n<p>\n    \u00d6zetle, Docker Desktop'a alternatif olarak manuel WSL2-Docker kurulumu, geli\u015ftiricilere a\u015fa\u011f\u0131daki \u00f6nemli avantajlar\u0131 sunar:\n  <\/p>\n<ul>\n<li><strong>Maliyet Etkinli\u011fi:<\/strong> Docker Desktop'\u0131n ticari kullan\u0131m lisans\u0131 olmadan konteynerizasyonun t\u00fcm g\u00fcc\u00fcnden faydalanma.<\/li>\n<li><strong>Y\u00fcksek Performans:<\/strong> WSL2'nin ger\u00e7ek Linux \u00e7ekirde\u011fi sayesinde neredeyse yerel Linux deneyimi ve daha d\u00fc\u015f\u00fck kaynak t\u00fcketimi.<\/li>\n<li><strong>Tam Kontrol:<\/strong> A\u011f yap\u0131land\u0131rmas\u0131ndan servis y\u00f6netimine kadar her detay \u00fczerinde daha fazla esneklik ve \u00f6zelle\u015ftirme imkan\u0131.<\/li>\n<li><strong>Esneklik:<\/strong> Belirli proje veya geli\u015ftirme ihtiya\u00e7lar\u0131na g\u00f6re \u00f6zelle\u015ftirilmi\u015f a\u011f ve kaynak tahsisleri.<\/li>\n<\/ul>\n<p>\n    Bu manuel yakla\u015f\u0131m, ba\u015flang\u0131\u00e7ta biraz daha fazla kurulum \u00e7abas\u0131 gerektirse de, uzun vadede daha hafif, daha h\u0131zl\u0131 ve daha g\u00fcvenli bir geli\u015ftirme ortam\u0131 sa\u011flayarak bu \u00e7abay\u0131 fazlas\u0131yla telafi eder. Geli\u015fen teknolojiler ve de\u011fi\u015fen ihtiya\u00e7lar kar\u015f\u0131s\u0131nda, bu t\u00fcr esnek ve kontrol odakl\u0131 \u00e7\u00f6z\u00fcmler, modern geli\u015ftiricilerin ara\u00e7 kutusunda \u00f6nemli bir yer tutmaktad\u0131r. Konteynerizasyonun gelece\u011fi parlak ve WSL2 ile Windows \u00fczerindeki potansiyeli giderek art\u0131yor.\n  <\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<dl>\n<dt><strong>S: WSL2 IP adresim s\u00fcrekli de\u011fi\u015fiyor, bu bir sorun mu?<\/strong><\/dt>\n<dd>\n      <strong>C:<\/strong> Evet, WSL2'nin dinamik IP adresi almas\u0131 yayg\u0131n bir durumdur ve port y\u00f6nlendirme kurallar\u0131n\u0131 etkileyebilir. Bu nedenle, makalede anlatt\u0131\u011f\u0131m\u0131z gibi PowerShell scriptleri kullanarak her a\u00e7\u0131l\u0131\u015fta veya WSL2 yeniden ba\u015flat\u0131ld\u0131\u011f\u0131nda IP adresini dinamik olarak tespit edip port y\u00f6nlendirme kurallar\u0131n\u0131 g\u00fcncellemek en iyi yakla\u015f\u0131md\u0131r.\n    <\/dd>\n<dt><strong>S: Docker Desktop'\u0131n \"Integrate with WSL2 distros\" \u00f6zelli\u011finin ayn\u0131s\u0131n\u0131 nas\u0131l yapabilirim?<\/strong><\/dt>\n<dd>\n      <strong>C:<\/strong> Docker Desktop'\u0131n bu \u00f6zelli\u011fi, Windows'taki Docker CLI'n\u0131n WSL2 i\u00e7indeki Docker Engine'e ba\u011flanmas\u0131n\u0131 sa\u011flar. Manuel kurulumda, Windows'a Docker CLI'y\u0131 kurup, WSL2 i\u00e7indeki Docker Engine'i uzaktan eri\u015fime a\u00e7arak benzer bir kurulum yapabilirsiniz. Ancak, bizim rehberimizdeki yakla\u015f\u0131m, Docker CLI'y\u0131 do\u011frudan WSL2 i\u00e7inden kullanmay\u0131 ve Windows'tan eri\u015fimi port y\u00f6nlendirmeyle sa\u011flamay\u0131 ama\u00e7lamaktad\u0131r. Bu, daha hafif ve Docker Desktop'a ba\u011f\u0131ml\u0131l\u0131\u011f\u0131 olmayan bir \u00e7\u00f6z\u00fcmd\u00fcr.\n    <\/dd>\n<dt><strong>S: Kurdu\u011fum Docker konteynerlerine a\u011fdaki ba\u015fka bir bilgisayardan eri\u015febilir miyim?<\/strong><\/dt>\n<dd>\n      <strong>C:<\/strong> Evet, e\u011fer port y\u00f6nlendirme kural\u0131n\u0131z\u0131 <code>listenaddress=0.0.0.0<\/code> ile olu\u015fturursan\u0131z, Windows ana makinenizin IP adresini veya a\u011f ad\u0131n\u0131 kullanarak a\u011f\u0131n\u0131zdaki di\u011fer bilgisayarlardan da eri\u015febilirsiniz. Ancak bu durumda, Windows g\u00fcvenlik duvar\u0131 ayarlar\u0131n\u0131z\u0131 kontrol etmeli ve ilgili port i\u00e7in gelen ba\u011flant\u0131lara izin vermelisiniz. G\u00fcvenlik a\u00e7\u0131s\u0131ndan sadece gerekli oldu\u011funda bu eri\u015fime izin vermeniz \u00f6nerilir.\n    <\/dd>\n<dt><strong>S: WSL2 i\u00e7indeki Docker performans\u0131n\u0131 nas\u0131l art\u0131rabilirim?<\/strong><\/dt>\n<dd>\n      <strong>C:<\/strong> Performans\u0131 art\u0131rmak i\u00e7in birka\u00e7 yol vard\u0131r:<\/p>\n<ul>\n<li>Projelerinizi WSL2 Linux dosya sistemi i\u00e7inde tutun (<code>\/home\/user\/...<\/code>), Windows taraf\u0131ndaki dosya sisteminden eri\u015fim (<code>\/mnt\/c\/...<\/code>) yava\u015f olabilir.<\/li>\n<li><code>.wslconfig<\/code> dosyas\u0131n\u0131 kullanarak WSL2'ye daha fazla RAM ve CPU \u00e7ekirde\u011fi tahsis edin.<\/li>\n<li>Gereksiz WSL2 da\u011f\u0131t\u0131mlar\u0131n\u0131 kapatmak i\u00e7in <code>wsl --shutdown<\/code> komutunu kullan\u0131n.<\/li>\n<\/ul>\n<\/dd>\n<dt><strong>S: Docker Compose kullanmak zorunda m\u0131y\u0131m?<\/strong><\/dt>\n<dd>\n      <strong>C:<\/strong> Hay\u0131r, Docker Compose kullanmak zorunda de\u011filsiniz. Tek tek <code>docker run<\/code> komutlar\u0131yla da konteynerlerinizi y\u00f6netebilirsiniz. Ancak birden fazla servis i\u00e7eren uygulamalar i\u00e7in Docker Compose, konfig\u00fcrasyonu basitle\u015ftiren ve servisleri tek bir komutla ba\u015flat\u0131p durdurmay\u0131 sa\u011flayan \u00e7ok kullan\u0131\u015fl\u0131 bir ara\u00e7t\u0131r. Geli\u015ftirme ortam\u0131n\u0131z\u0131n karma\u015f\u0131kl\u0131\u011f\u0131na ba\u011fl\u0131 olarak tercih edilebilir.\n    <\/dd>\n<\/dl>\n<style>\n    \/* Basit Mobil Uyumluluk i\u00e7in \u00d6rnek CSS *\/\n    body {\n      font-family: Arial, sans-serif;\n      line-height: 1.6;\n      color: #333;\n      max-width: 1200px;\n      margin: 0 auto;\n      padding: 20px;\n    }\n    h2, h3 {\n      color: #2c3e50;\n      margin-top: 30px;\n      margin-bottom: 15px;\n    }\n    pre {\n      background-color: #f4f4f4;\n      border: 1px solid #ddd;\n      border-left: 3px solid #f36d3a;\n      color: #666;\n      page-break-inside: avoid;\n      font-family: monospace;\n      font-size: 15px;\n      line-height: 1.6;\n      margin-bottom: 1.6em;\n      max-width: 100%;\n      overflow: auto;\n      padding: 1em 1.5em;\n      display: block;\n      word-wrap: break-word;\n    }\n    code {\n      font-family: monospace;\n      background-color: #f9f2f4;\n      color: #c7254e;\n      padding: 2px 4px;\n      border-radius: 4px;\n    }\n    ul, ol, dl {\n      margin-bottom: 1em;\n      padding-left: 20px;\n    }\n    li {\n      margin-bottom: 0.5em;\n    }\n    .expert-tip {\n      background-color: #e6f7ff;\n      border-left: 5px solid #3399ff;\n      padding: 15px;\n      margin: 20px 0;\n      color: #333;\n      font-style: italic;\n    }\n    .expert-tip p {\n      margin: 0;\n    }\n    table {\n        width: 100%;\n        border-collapse: collapse;\n        margin-bottom: 1em;\n    }\n    th, td {\n        border: 1px solid #ddd;\n        padding: 8px;\n        text-align: left;\n    }\n    th {\n        background-color: #f2f2f2;\n    }<\/p>\n<p>    \/* Mobil Cihazlar i\u00e7in Media Query *\/\n    @media only screen and (max-width: 768px) {\n      body {\n        padding: 10px;\n      }\n      h2 {\n        font-size: 1.8em;\n      }\n      h3 {\n        font-size: 1.4em;\n      }\n      pre {\n        font-size: 13px;\n        padding: 0.8em 1em;\n      }\n      table, thead, tbody, th, td, tr {\n        display: block;\n      }\n      thead tr {\n        position: absolute;\n        top: -9999px;\n        left: -9999px;\n      }\n      tr { border: 1px solid #ccc; }\n      td {\n        border: none;\n        border-bottom: 1px solid #eee;\n        position: relative;\n        padding-left: 50%;\n      }\n      td:before {\n        position: absolute;\n        top: 6px;\n        left: 6px;\n        width: 45%;\n        padding-right: 10px;\n        white-space: nowrap;\n        content: attr(data-label);\n        font-weight: bold;\n      }\n    }\n  <\/style>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Docker Desktop&#8217;\u0131n sundu\u011fu kolayl\u0131klar tart\u0131\u015f\u0131lmaz olsa da, bazen lisanslama k\u0131s\u0131tlamalar\u0131, kaynak t\u00fcketimi veya daha fazla kontrol iste\u011fi gibi&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1407],"tags":[],"class_list":{"0":"post-33615","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-docker","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>WSL2 ve Docker: Docker Desktop Olmadan Manuel Konfig\u00fcrasyon Rehberi<\/title>\n<meta name=\"description\" content=\"Docker Desktop&#039;\u0131n sundu\u011fu kolayl\u0131klar tart\u0131\u015f\u0131lmaz olsa da, bazen lisanslama k\u0131s\u0131tlamalar\u0131, kaynak t\u00fcketimi veya daha fazla kontrol iste\u011fi gibi nedenlerle alternatif \u00e7\u00f6z\u00fcmlere y\u00f6nelmek gerekebilir. Bu makale, Windows Subsystem for Linux (WSL2) kullanarak Docker Desktop&#039;a ba\u011f\u0131ml\u0131 kalmadan, tamamen manuel y\u00f6ntemlerle Docker&#039;\u0131 kurmay\u0131, NAT a\u011f\u0131n\u0131 yap\u0131land\u0131rmay\u0131 ve uygulamalar\u0131n\u0131za yerel makinenizden sorunsuz bir \u015fekilde eri\u015fmeyi ad\u0131m ad\u0131m a\u00e7\u0131klamaktad\u0131r.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/wsl2-ve-docker-docker-desktop-olmadan-manuel-konfigurasyon-rehberi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"WSL2 ve Docker: Docker Desktop Olmadan Manuel Konfig\u00fcrasyon Rehberi\" \/>\n<meta property=\"og:description\" content=\"Docker Desktop&#039;\u0131n sundu\u011fu kolayl\u0131klar tart\u0131\u015f\u0131lmaz olsa da, bazen lisanslama k\u0131s\u0131tlamalar\u0131, kaynak t\u00fcketimi veya daha fazla kontrol iste\u011fi gibi nedenlerle alternatif \u00e7\u00f6z\u00fcmlere y\u00f6nelmek gerekebilir. Bu makale, Windows Subsystem for Linux (WSL2) kullanarak Docker Desktop&#039;a ba\u011f\u0131ml\u0131 kalmadan, tamamen manuel y\u00f6ntemlerle Docker&#039;\u0131 kurmay\u0131, NAT a\u011f\u0131n\u0131 yap\u0131land\u0131rmay\u0131 ve uygulamalar\u0131n\u0131za yerel makinenizden sorunsuz bir \u015fekilde eri\u015fmeyi ad\u0131m ad\u0131m a\u00e7\u0131klamaktad\u0131r.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/wsl2-ve-docker-docker-desktop-olmadan-manuel-konfigurasyon-rehberi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-05T01:31:18+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"29 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/wsl2-ve-docker-docker-desktop-olmadan-manuel-konfigurasyon-rehberi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/wsl2-ve-docker-docker-desktop-olmadan-manuel-konfigurasyon-rehberi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"WSL2 ve Docker: Docker Desktop Olmadan Manuel Konfig\u00fcrasyon Rehberi\",\"datePublished\":\"2025-11-05T01:31:18+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/wsl2-ve-docker-docker-desktop-olmadan-manuel-konfigurasyon-rehberi\/\"},\"wordCount\":4929,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Docker\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/wsl2-ve-docker-docker-desktop-olmadan-manuel-konfigurasyon-rehberi\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/wsl2-ve-docker-docker-desktop-olmadan-manuel-konfigurasyon-rehberi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wsl2-ve-docker-docker-desktop-olmadan-manuel-konfigurasyon-rehberi\/\",\"name\":\"WSL2 ve Docker: Docker Desktop Olmadan Manuel Konfig\u00fcrasyon Rehberi\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-05T01:31:18+00:00\",\"description\":\"Docker Desktop'\u0131n sundu\u011fu kolayl\u0131klar tart\u0131\u015f\u0131lmaz olsa da, bazen lisanslama k\u0131s\u0131tlamalar\u0131, kaynak t\u00fcketimi veya daha fazla kontrol iste\u011fi gibi nedenlerle alternatif \u00e7\u00f6z\u00fcmlere y\u00f6nelmek gerekebilir. Bu makale, Windows Subsystem for Linux (WSL2) kullanarak Docker Desktop'a ba\u011f\u0131ml\u0131 kalmadan, tamamen manuel y\u00f6ntemlerle Docker'\u0131 kurmay\u0131, NAT a\u011f\u0131n\u0131 yap\u0131land\u0131rmay\u0131 ve uygulamalar\u0131n\u0131za yerel makinenizden sorunsuz bir \u015fekilde eri\u015fmeyi ad\u0131m ad\u0131m a\u00e7\u0131klamaktad\u0131r.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/wsl2-ve-docker-docker-desktop-olmadan-manuel-konfigurasyon-rehberi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/wsl2-ve-docker-docker-desktop-olmadan-manuel-konfigurasyon-rehberi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/wsl2-ve-docker-docker-desktop-olmadan-manuel-konfigurasyon-rehberi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"WSL2 ve Docker: Docker Desktop Olmadan Manuel Konfig\u00fcrasyon Rehberi\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"WSL2 ve Docker: Docker Desktop Olmadan Manuel Konfig\u00fcrasyon Rehberi","description":"Docker Desktop'\u0131n sundu\u011fu kolayl\u0131klar tart\u0131\u015f\u0131lmaz olsa da, bazen lisanslama k\u0131s\u0131tlamalar\u0131, kaynak t\u00fcketimi veya daha fazla kontrol iste\u011fi gibi nedenlerle alternatif \u00e7\u00f6z\u00fcmlere y\u00f6nelmek gerekebilir. Bu makale, Windows Subsystem for Linux (WSL2) kullanarak Docker Desktop'a ba\u011f\u0131ml\u0131 kalmadan, tamamen manuel y\u00f6ntemlerle Docker'\u0131 kurmay\u0131, NAT a\u011f\u0131n\u0131 yap\u0131land\u0131rmay\u0131 ve uygulamalar\u0131n\u0131za yerel makinenizden sorunsuz bir \u015fekilde eri\u015fmeyi ad\u0131m ad\u0131m a\u00e7\u0131klamaktad\u0131r.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/wsl2-ve-docker-docker-desktop-olmadan-manuel-konfigurasyon-rehberi\/","og_locale":"tr_TR","og_type":"article","og_title":"WSL2 ve Docker: Docker Desktop Olmadan Manuel Konfig\u00fcrasyon Rehberi","og_description":"Docker Desktop'\u0131n sundu\u011fu kolayl\u0131klar tart\u0131\u015f\u0131lmaz olsa da, bazen lisanslama k\u0131s\u0131tlamalar\u0131, kaynak t\u00fcketimi veya daha fazla kontrol iste\u011fi gibi nedenlerle alternatif \u00e7\u00f6z\u00fcmlere y\u00f6nelmek gerekebilir. Bu makale, Windows Subsystem for Linux (WSL2) kullanarak Docker Desktop'a ba\u011f\u0131ml\u0131 kalmadan, tamamen manuel y\u00f6ntemlerle Docker'\u0131 kurmay\u0131, NAT a\u011f\u0131n\u0131 yap\u0131land\u0131rmay\u0131 ve uygulamalar\u0131n\u0131za yerel makinenizden sorunsuz bir \u015fekilde eri\u015fmeyi ad\u0131m ad\u0131m a\u00e7\u0131klamaktad\u0131r.","og_url":"https:\/\/fatihsoysal.com\/blog\/wsl2-ve-docker-docker-desktop-olmadan-manuel-konfigurasyon-rehberi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-05T01:31:18+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"29 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/wsl2-ve-docker-docker-desktop-olmadan-manuel-konfigurasyon-rehberi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/wsl2-ve-docker-docker-desktop-olmadan-manuel-konfigurasyon-rehberi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"WSL2 ve Docker: Docker Desktop Olmadan Manuel Konfig\u00fcrasyon Rehberi","datePublished":"2025-11-05T01:31:18+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/wsl2-ve-docker-docker-desktop-olmadan-manuel-konfigurasyon-rehberi\/"},"wordCount":4929,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Docker"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/wsl2-ve-docker-docker-desktop-olmadan-manuel-konfigurasyon-rehberi\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/wsl2-ve-docker-docker-desktop-olmadan-manuel-konfigurasyon-rehberi\/","url":"https:\/\/fatihsoysal.com\/blog\/wsl2-ve-docker-docker-desktop-olmadan-manuel-konfigurasyon-rehberi\/","name":"WSL2 ve Docker: Docker Desktop Olmadan Manuel Konfig\u00fcrasyon Rehberi","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-05T01:31:18+00:00","description":"Docker Desktop'\u0131n sundu\u011fu kolayl\u0131klar tart\u0131\u015f\u0131lmaz olsa da, bazen lisanslama k\u0131s\u0131tlamalar\u0131, kaynak t\u00fcketimi veya daha fazla kontrol iste\u011fi gibi nedenlerle alternatif \u00e7\u00f6z\u00fcmlere y\u00f6nelmek gerekebilir. Bu makale, Windows Subsystem for Linux (WSL2) kullanarak Docker Desktop'a ba\u011f\u0131ml\u0131 kalmadan, tamamen manuel y\u00f6ntemlerle Docker'\u0131 kurmay\u0131, NAT a\u011f\u0131n\u0131 yap\u0131land\u0131rmay\u0131 ve uygulamalar\u0131n\u0131za yerel makinenizden sorunsuz bir \u015fekilde eri\u015fmeyi ad\u0131m ad\u0131m a\u00e7\u0131klamaktad\u0131r.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/wsl2-ve-docker-docker-desktop-olmadan-manuel-konfigurasyon-rehberi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/wsl2-ve-docker-docker-desktop-olmadan-manuel-konfigurasyon-rehberi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/wsl2-ve-docker-docker-desktop-olmadan-manuel-konfigurasyon-rehberi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"WSL2 ve Docker: Docker Desktop Olmadan Manuel Konfig\u00fcrasyon Rehberi"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33615","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=33615"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/33615\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=33615"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=33615"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=33615"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}