{"id":30557,"date":"2025-09-29T07:01:14","date_gmt":"2025-09-29T04:01:14","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/docker-ile-benim-makinemde-calisiyor-problemini-cozmek\/"},"modified":"2025-09-29T07:01:14","modified_gmt":"2025-09-29T04:01:14","slug":"docker-ile-benim-makinemde-calisiyor-problemini-cozmek","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/docker-ile-benim-makinemde-calisiyor-problemini-cozmek\/","title":{"rendered":"Docker ile &#8216;Benim Makinemde \u00c7al\u0131\u015f\u0131yor&#8217; Problemini \u00c7\u00f6zmek"},"content":{"rendered":"<p><body><\/p>\n<p>Geli\u015ftirme d\u00fcnyas\u0131n\u0131n en sinir bozucu c\u00fcmlelerinden biriyle tan\u0131\u015f\u0131n: &#8220;Ama benim makinemde \u00e7al\u0131\u015f\u0131yordu!&#8221; Bu durum, \u00e7o\u011fu yaz\u0131l\u0131m geli\u015ftiricinin ve operasyon ekibinin kar\u015f\u0131la\u015ft\u0131\u011f\u0131, zaman kaybettiren ve moral bozan bir sorundur. Uygulamalar geli\u015ftirilirken farkl\u0131 i\u015fletim sistemleri, k\u00fct\u00fcphane versiyonlar\u0131 ve ba\u011f\u0131ml\u0131l\u0131klar nedeniyle olu\u015fan tutars\u0131zl\u0131klar, projelerin gecikmesine ve gereksiz efor sarf edilmesine yol a\u00e7abilir. Neyse ki, bu &#8220;canavar\u0131&#8221; ehlile\u015ftirmenin g\u00fc\u00e7l\u00fc bir yolu var: Docker. Bu makale, Docker&#8217;\u0131n ne oldu\u011funu, bu problemi nas\u0131l k\u00f6k\u00fcnden \u00e7\u00f6zd\u00fc\u011f\u00fcn\u00fc ve geli\u015ftirme s\u00fcre\u00e7lerinizi nas\u0131l daha verimli hale getirebilece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131klayacak. Haz\u0131r m\u0131s\u0131n\u0131z? Gelin bu k\u00e2busa bir son verelim!<\/p>\n<p>Yaz\u0131l\u0131m geli\u015ftirme s\u00fcreci, genellikle bir dizi a\u015famadan olu\u015fur: geli\u015ftirme, test etme, entegrasyon ve da\u011f\u0131t\u0131m. Ancak bu a\u015famalar aras\u0131nda s\u0131kl\u0131kla kar\u015f\u0131la\u015f\u0131lan ve geli\u015ftirici ekiplerinin ba\u015f\u0131n\u0131 a\u011fr\u0131tan bir engel vard\u0131r: &#8220;Benim makinemde \u00e7al\u0131\u015f\u0131yor ama seninkinde \u00e7al\u0131\u015fm\u0131yor&#8221; problemi. Bu sendrom, uygulaman\u0131n bir geli\u015ftiricinin bilgisayar\u0131nda sorunsuz \u00e7al\u0131\u015f\u0131rken, ba\u015fka bir geli\u015ftiricinin bilgisayar\u0131nda, test ortam\u0131nda veya canl\u0131 sistemde beklenen performans\u0131 sergilememesi ya da hi\u00e7 \u00e7al\u0131\u015fmamas\u0131 durumunu ifade eder. Peki, bu durumun ard\u0131ndaki nedenler nelerdir ve neden bu kadar yayg\u0131nd\u0131r?<\/p>\n<p>\u00d6ncelikle, her geli\u015ftiricinin bilgisayar\u0131nda farkl\u0131 bir i\u015fletim sistemi (Windows, macOS, Linux da\u011f\u0131t\u0131mlar\u0131), farkl\u0131 versiyonlarda k\u00fct\u00fcphaneler, farkl\u0131 ba\u011f\u0131ml\u0131l\u0131klar ve farkl\u0131 yap\u0131land\u0131rmalar bulunabilir. \u00d6rne\u011fin, bir geli\u015ftirici <\/p>\n<pre><code>Node.js<\/pre>\n<p><\/code> uygulamas\u0131n\u0131 <\/p>\n<pre><code>Node.js v14<\/pre>\n<p><\/code> ile geli\u015ftirirken, di\u011fer bir geli\u015ftirici <\/p>\n<pre><code>v16<\/pre>\n<p><\/code> kullan\u0131yor olabilir. Bu k\u00fc\u00e7\u00fck versiyon farklar\u0131 bile, uygulaman\u0131n davran\u0131\u015f\u0131nda beklenmedik de\u011fi\u015fikliklere yol a\u00e7abilir. Ayn\u0131 durum, veritabanlar\u0131 (MySQL, PostgreSQL), \u00f6nbellekleme sistemleri (Redis), mesaj kuyruklar\u0131 (RabbitMQ) ve di\u011fer t\u00fcm harici ba\u011f\u0131ml\u0131l\u0131klar i\u00e7in ge\u00e7erlidir. Bir geli\u015ftirici yerelinde <\/p>\n<pre><code>MySQL 5.7<\/pre>\n<p><\/code> kullan\u0131rken, test ortam\u0131nda <\/p>\n<pre><code>MySQL 8.0<\/pre>\n<p><\/code> bulunmas\u0131, SQL sorgular\u0131n\u0131n veya ba\u011flant\u0131 mekanizmalar\u0131n\u0131n farkl\u0131 yorumlanmas\u0131na neden olabilir.<\/p>\n<p>\u0130kincisi, geli\u015ftirme ortam\u0131ndaki gizli ba\u011f\u0131ml\u0131l\u0131klar da \u00f6nemli bir fakt\u00f6rd\u00fcr. Geli\u015ftiricinin sistemine elle kurdu\u011fu veya fark\u0131nda olmadan kulland\u0131\u011f\u0131 bir sistem arac\u0131 veya ortam de\u011fi\u015fkeni, uygulaman\u0131n \u00e7al\u0131\u015fmas\u0131 i\u00e7in kritik olabilir. Ancak bu ba\u011f\u0131ml\u0131l\u0131k, projenin kaynak koduna dahil edilmedi\u011fi veya a\u00e7\u0131k\u00e7a belgelenmedi\u011fi i\u00e7in di\u011fer ortamlarda eksik kal\u0131r. Bu durum, \"Benim makinemde \u00e7al\u0131\u015f\u0131yor\" derken, asl\u0131nda \"Benim makinemdeki rastgele bir sistem yap\u0131land\u0131rmas\u0131 sayesinde \u00e7al\u0131\u015f\u0131yor\" anlam\u0131na gelebilir. Bu t\u00fcr durumlar, \u00f6zellikle b\u00fcy\u00fck ve karma\u015f\u0131k projelerde, hatalar\u0131n ay\u0131klanmas\u0131n\u0131 son derece zorla\u015ft\u0131r\u0131r ve saatlerce s\u00fcren anlams\u0131z aramalara neden olur.<\/p>\n<p>Son olarak, test ve da\u011f\u0131t\u0131m s\u00fcre\u00e7lerinde de benzer sorunlar ya\u015fan\u0131r. Bir uygulama geli\u015ftiricinin yerelinde d\u00fczg\u00fcn \u00e7al\u0131\u015fsa bile, test sunucusunda veya canl\u0131 ortama da\u011f\u0131t\u0131ld\u0131\u011f\u0131nda \u00e7e\u015fitli uyumluluk sorunlar\u0131yla kar\u015f\u0131la\u015fabilir. G\u00fcvenlik yamalar\u0131, i\u015fletim sistemi g\u00fcncellemeleri veya sunucu yap\u0131land\u0131rmas\u0131ndaki farkl\u0131l\u0131klar, uygulaman\u0131n beklenen \u015fekilde \u00e7al\u0131\u015fmas\u0131n\u0131 engelleyebilir. Bu da geli\u015ftirme s\u00fcresini uzat\u0131r, ekipler aras\u0131nda gerilime neden olur ve \u00fcr\u00fcn\u00fcn piyasaya s\u00fcr\u00fclmesini geciktirir. Dolay\u0131s\u0131yla, bu problemin sadece teknik bir sorun olmaktan \u00f6te, proje y\u00f6netimi ve ekip verimlili\u011fi \u00fczerinde de ciddi etkileri vard\u0131r. Peki, bu karma\u015f\u0131k ve can s\u0131k\u0131c\u0131 durumu kal\u0131c\u0131 olarak nas\u0131l \u00e7\u00f6zebiliriz? \u0130\u015fte tam da bu noktada Docker devreye giriyor.<\/p>\n<h2>Konteynerle\u015fme ve Docker: Temelleri Anlamak<\/h2>\n<p>\u201cBenim makinemde \u00e7al\u0131\u015f\u0131yor\u201d sendromunun temelinde yatan tutars\u0131zl\u0131k sorununu \u00e7\u00f6zmek i\u00e7in, uygulamalar\u0131m\u0131z\u0131 ve onlar\u0131n t\u00fcm ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 izole edilmi\u015f, ta\u015f\u0131nabilir ve tutarl\u0131 bir ortamda \u00e7al\u0131\u015ft\u0131rma ihtiyac\u0131m\u0131z do\u011far. \u0130\u015fte burada konteynerle\u015fme kavram\u0131 ve onun en pop\u00fcler arac\u0131 olan Docker sahneye \u00e7\u0131k\u0131yor. Docker, uygulamalar\u0131 bir konteyner i\u00e7inde paketleyerek, geli\u015ftirme, test ve da\u011f\u0131t\u0131m ortamlar\u0131 aras\u0131ndaki farkl\u0131l\u0131klar\u0131 ortadan kald\u0131ran devrim niteli\u011finde bir teknolojidir.<\/p>\n<p>Peki, konteyner nedir? Konteyner, bir uygulaman\u0131n kodunu, \u00e7al\u0131\u015fma zaman\u0131n\u0131, sistem ara\u00e7lar\u0131n\u0131, k\u00fct\u00fcphanelerini ve ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 i\u00e7eren hafif, ta\u015f\u0131nabilir ve kendi ba\u015f\u0131na \u00e7al\u0131\u015fabilen bir yaz\u0131l\u0131m birimidir. Bir konteyneri, bir gemi konteyneri gibi d\u00fc\u015f\u00fcnebilirsiniz: \u0130\u00e7inde ne oldu\u011fu \u00f6nemli olmaks\u0131z\u0131n, her yere ayn\u0131 \u015fekilde ta\u015f\u0131nabilir ve standart bir aray\u00fczle kolayca y\u00f6netilebilir. Bu, uygulaman\u0131n ve ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131n her zaman ve her yerde ayn\u0131 \u015fekilde davranmas\u0131n\u0131 garanti eder. Geleneksel sanal makinelerin aksine, konteynerler t\u00fcm i\u015fletim sistemini kopyalamaz; bunun yerine ana bilgisayar\u0131n i\u015fletim sistemi \u00e7ekirde\u011fini payla\u015f\u0131r. Bu durum, konteynerlerin \u00e7ok daha hafif, h\u0131zl\u0131 ve kaynak a\u00e7\u0131s\u0131ndan verimli olmas\u0131n\u0131 sa\u011flar. Sanal makineler gigabaytlarca yer kaplarken, konteynerler genellikle megabaytlarla ifade edilir.<\/p>\n<p>Docker, bu konteynerle\u015ftirme teknolojisini demokratikle\u015ftiren ve kullan\u0131m\u0131n\u0131 son derece kolayla\u015ft\u0131ran a\u00e7\u0131k kaynakl\u0131 bir platformdur. Docker sayesinde, uygulamalar\u0131n\u0131z\u0131 ve ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131z\u0131 tan\u0131mlayan bir <\/p>\n<pre><code>Dockerfile<\/pre>\n<p><\/code> olu\u015fturur, bu dosyadan bir <\/p>\n<pre><code>Docker Image<\/pre>\n<p><\/code> (Docker g\u00f6r\u00fcnt\u00fcs\u00fc) in\u015fa eder ve bu g\u00f6r\u00fcnt\u00fcy\u00fc temel alarak <\/p>\n<pre><code>Docker Container<\/pre>\n<p><\/code> (Docker konteyneri) ad\u0131 verilen izole edilmi\u015f ortamlar\u0131 \u00e7al\u0131\u015ft\u0131r\u0131rs\u0131n\u0131z. Bu s\u00fcre\u00e7, uygulama ortam\u0131n\u0131n tamamen a\u00e7\u0131klay\u0131c\u0131 (declarative) olmas\u0131n\u0131 sa\u011flar: ortam\u0131n nas\u0131l olmas\u0131 gerekti\u011fini bir kod dosyas\u0131 (<\/p>\n<pre><code>Dockerfile<\/pre>\n<p><\/code>) ile tan\u0131mlar ve her seferinde bu tan\u0131mlamaya g\u00f6re yeniden olu\u015fturulmas\u0131n\u0131 sa\u011flars\u0131n\u0131z.<\/p>\n<p>Docker'\u0131n temel bile\u015fenleri \u015funlard\u0131r:<\/p>\n<ul>\n<li><strong>Dockerfile:<\/strong> Bir Docker g\u00f6r\u00fcnt\u00fcs\u00fcn\u00fcn nas\u0131l olu\u015fturulaca\u011f\u0131n\u0131 a\u00e7\u0131klayan basit bir metin dosyas\u0131d\u0131r. Temel bir i\u015fletim sistemi g\u00f6r\u00fcnt\u00fcs\u00fc (\n<pre><code>FROM<\/pre>\n<p><\/code>), dosyalar\u0131n kopyalanmas\u0131 (<\/p>\n<pre><code>COPY<\/pre>\n<p><\/code>), ba\u011f\u0131ml\u0131l\u0131klar\u0131n y\u00fcklenmesi (<\/p>\n<pre><code>RUN<\/pre>\n<p><\/code>) ve uygulaman\u0131n nas\u0131l ba\u015flat\u0131laca\u011f\u0131 (<\/p>\n<pre><code>CMD<\/pre>\n<p><\/code>) gibi ad\u0131mlar\u0131 i\u00e7erir.<\/li>\n<li><strong>Docker Image (G\u00f6r\u00fcnt\u00fc):<\/strong> Dockerfile'dan olu\u015fturulan, uygulaman\u0131z\u0131n ve t\u00fcm ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131n anl\u0131k g\u00f6r\u00fcnt\u00fcs\u00fcd\u00fcr. De\u011fi\u015ftirilemez (immutable) bir yap\u0131ya sahiptir; yani bir kez olu\u015fturulduktan sonra i\u00e7eri\u011fi de\u011fi\u015fmez. Bu g\u00f6r\u00fcnt\u00fcler,\n<pre><code>Docker Hub<\/pre>\n<p><\/code> gibi merkezi depolama alanlar\u0131nda payla\u015f\u0131labilir.<\/li>\n<li><strong>Docker Container (Konteyner):<\/strong> Bir Docker g\u00f6r\u00fcnt\u00fcs\u00fcnden t\u00fcretilmi\u015f, \u00e7al\u0131\u015fan bir uygulama \u00f6rne\u011fidir. \u0130zole edilmi\u015f bir ortamda \u00e7al\u0131\u015f\u0131r ve ana bilgisayar sisteminden ba\u011f\u0131ms\u0131zd\u0131r. Birden fazla konteyneri ayn\u0131 g\u00f6r\u00fcnt\u00fcden ayn\u0131 anda \u00e7al\u0131\u015ft\u0131rabilirsiniz.<\/li>\n<li><strong>Docker Engine:<\/strong> Docker g\u00f6r\u00fcnt\u00fclerini olu\u015fturan ve konteynerleri \u00e7al\u0131\u015ft\u0131ran temel yaz\u0131l\u0131md\u0131r.<\/li>\n<\/ul>\n<p>Bu yap\u0131s\u0131 sayesinde Docker, \"Benim makinemde \u00e7al\u0131\u015f\u0131yor\" problemini k\u00f6kten \u00e7\u00f6z\u00fcyor. Bir geli\u015ftirici, uygulamas\u0131n\u0131 Docker konteynerinde geli\u015ftirir ve bu konteyner, ayn\u0131 konfig\u00fcrasyonla di\u011fer t\u00fcm geli\u015ftiriciler, test ortamlar\u0131 ve canl\u0131 sistemler i\u00e7in de kullan\u0131l\u0131r. Art\u0131k \"\u00e7al\u0131\u015fm\u0131yor\" denildi\u011finde sorun, ortam farkl\u0131l\u0131klar\u0131nda de\u011fil, do\u011frudan uygulaman\u0131n kendisinde aran\u0131r. Bu durum, hata ay\u0131klama s\u00fcre\u00e7lerini h\u0131zland\u0131r\u0131r, tutarl\u0131l\u0131\u011f\u0131 art\u0131r\u0131r ve ekipler aras\u0131 i\u015fbirli\u011fini g\u00fc\u00e7lendirir. Dahas\u0131, yeni bir geli\u015ftiricinin projeye ba\u015flamas\u0131 da son derece kolayla\u015f\u0131r; sadece Docker'\u0131 kurar, projenin konteynerini \u00e7al\u0131\u015ft\u0131r\u0131r ve geli\u015ftirme ortam\u0131 dakikalar i\u00e7inde haz\u0131r olur. Bu, geleneksel y\u00f6ntemlerle saatler s\u00fcren ortam kurulum s\u00fcre\u00e7lerinin aksine b\u00fcy\u00fck bir avantajd\u0131r. Art\u0131k bu teorik bilgiyi prati\u011fe d\u00f6kme zaman\u0131!<\/p>\n<h2>Ad\u0131m Ad\u0131m Docker ile Ortam Olu\u015fturma: Bir Web Uygulamas\u0131 \u00d6rne\u011fi<\/h2>\n<p>\u015eimdi teoriden prati\u011fe ge\u00e7elim ve basit bir Node.js web uygulamas\u0131n\u0131 Docker kullanarak nas\u0131l kaps\u00fclleyece\u011fimizi ve \u00e7al\u0131\u015ft\u0131raca\u011f\u0131m\u0131z\u0131 ad\u0131m ad\u0131m g\u00f6relim. Bu \u00f6rnek, Docker'\u0131n temel bile\u015fenlerini ve i\u015f ak\u0131\u015f\u0131n\u0131 net bir \u015fekilde anlaman\u0131za yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n<h3>Dockerfile Nedir ve Nas\u0131l Olu\u015fturulur?<\/h3>\n<p>Her Docker projesinin kalbi, <\/p>\n<pre><code>Dockerfile<\/pre>\n<p><\/code> ad\u0131 verilen metin dosyas\u0131d\u0131r. Bu dosya, Docker'a uygulaman\u0131z i\u00e7in bir g\u00f6r\u00fcnt\u00fc olu\u015fturmak \u00fczere hangi ad\u0131mlar\u0131 izlemesi gerekti\u011fini s\u00f6yler. Gelin, basit bir Node.js uygulamas\u0131n\u0131 i\u00e7eren bir <\/p>\n<pre><code>Dockerfile<\/pre>\n<p><\/code> olu\u015ftural\u0131m. \u0130lk olarak, projeniz i\u00e7in bir klas\u00f6r olu\u015fturun ve i\u00e7ine <\/p>\n<pre><code>app.js<\/pre>\n<p><\/code> ve <\/p>\n<pre><code>package.json<\/pre>\n<p><\/code> dosyalar\u0131n\u0131 ekleyin:<\/p>\n<pre><code>\n\/\/ app.js\nconst express = require('express');\nconst app = express();\nconst port = 3000;\n\napp.get('\/', (req, res) => {\n  res.send('Merhaba Docker! Benim Makinemde de Senin Makinemde de \u00c7al\u0131\u015f\u0131yor!');\n});\n\napp.listen(port, () => {\n  console.log(<code>Uygulama http:\/\/localhost:${port} adresinde \u00e7al\u0131\u015f\u0131yor<\/code>);\n});\n    <\/pre>\n<p><\/code><\/p>\n<pre><code>\n\/\/ package.json\n{\n  \"name\": \"docker-node-app\",\n  \"version\": \"1.0.0\",\n  \"description\": \"Simple Node.js app for Docker demo\",\n  \"main\": \"app.js\",\n  \"scripts\": {\n    \"start\": \"node app.js\"\n  },\n  \"dependencies\": {\n    \"express\": \"^4.17.1\"\n  }\n}\n    <\/pre>\n<p><\/code><\/p>\n<p>\u015eimdi ayn\u0131 klas\u00f6rde <\/p>\n<pre><code>Dockerfile<\/pre>\n<p><\/code> ad\u0131nda bir dosya olu\u015ftural\u0131m ve i\u00e7eri\u011fini a\u015fa\u011f\u0131daki gibi doldural\u0131m:<\/p>\n<pre><code>\n# app.js ve package.json dosyalar\u0131n\u0131n bulundu\u011fu klas\u00f6rde \"Dockerfile\" ad\u0131nda bir dosya olu\u015fturun\n\n# 1. Ad\u0131m: Temel bir Node.js g\u00f6r\u00fcnt\u00fcs\u00fc se\u00e7in\n# Bu, uygulamam\u0131z i\u00e7in gerekli Node.js \u00e7al\u0131\u015fma ortam\u0131n\u0131 sa\u011flar.\nFROM node:16-alpine\n\n# 2. Ad\u0131m: \u00c7al\u0131\u015fma dizinini ayarlay\u0131n\n# Konteyner i\u00e7inde uygulaman\u0131z\u0131n dosyalar\u0131n\u0131n bulunaca\u011f\u0131 dizini belirtir.\nWORKDIR \/app\n\n# 3. Ad\u0131m: Ba\u011f\u0131ml\u0131l\u0131klar\u0131 kopyalay\u0131n ve kurun\n# package.json ve package-lock.json dosyalar\u0131n\u0131 kopyalay\u0131p npm install komutunu \u00e7al\u0131\u015ft\u0131r\u0131r.\n# Bu ad\u0131m\u0131 ayr\u0131 yapmak, Docker'\u0131n katmanlama sisteminden faydalanarak\n# ba\u011f\u0131ml\u0131l\u0131klar de\u011fi\u015fmedi\u011finde tekrar indirmesini engeller.\nCOPY package*.json .\/\nRUN npm install\n\n# 4. Ad\u0131m: Uygulama dosyalar\u0131n\u0131 kopyalay\u0131n\n# Geri kalan t\u00fcm uygulama dosyalar\u0131n\u0131 \u00e7al\u0131\u015fma dizinine kopyalar.\nCOPY . .\n\n# 5. Ad\u0131m: Uygulaman\u0131n \u00e7al\u0131\u015faca\u011f\u0131 portu belirtin\n# Bu, Docker'a uygulaman\u0131n hangi porttan eri\u015filebilir oldu\u011funu bildirir.\nEXPOSE 3000\n\n# 6. Ad\u0131m: Uygulamay\u0131 ba\u015flatmak i\u00e7in komutu tan\u0131mlay\u0131n\n# Konteyner ba\u015flat\u0131ld\u0131\u011f\u0131nda \u00e7al\u0131\u015ft\u0131r\u0131lacak varsay\u0131lan komutu belirtir.\nCMD [\"npm\", \"start\"]\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu <\/p>\n<pre><code>Dockerfile<\/pre>\n<p><\/code> ad\u0131mlar\u0131 s\u0131ras\u0131yla Node.js'nin Alpine tabanl\u0131 hafif bir s\u00fcr\u00fcm\u00fcn\u00fc temel al\u0131r, uygulaman\u0131n dosyalar\u0131n\u0131 kopyalar, ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 kurar, 3000 numaral\u0131 portu a\u00e7\u0131\u011fa \u00e7\u0131kar\u0131r ve son olarak uygulamay\u0131 ba\u015flat\u0131r. <\/p>\n<pre><code>WORKDIR<\/pre>\n<p><\/code> komutu, t\u00fcm sonraki komutlar\u0131n konteyner i\u00e7indeki <\/p>\n<pre><code>\/app<\/pre>\n<p><\/code> dizininde \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar.<\/p>\n<h3>Docker Konteynerleri Nas\u0131l \u00c7al\u0131\u015ft\u0131r\u0131l\u0131r?<\/h3>\n<p>\u015eimdi <\/p>\n<pre><code>Dockerfile<\/pre>\n<p><\/code>'\u0131m\u0131z haz\u0131r oldu\u011funa g\u00f6re, bundan bir Docker g\u00f6r\u00fcnt\u00fcs\u00fc (Image) olu\u015ftural\u0131m ve ard\u0131ndan bu g\u00f6r\u00fcnt\u00fcden bir konteyner \u00e7al\u0131\u015ft\u0131ral\u0131m. Komut sat\u0131r\u0131n\u0131z\u0131 a\u00e7\u0131n ve <\/p>\n<pre><code>Dockerfile<\/pre>\n<p><\/code>'\u0131n bulundu\u011fu klas\u00f6re gidin.<\/p>\n<ol>\n<li><strong>Docker G\u00f6r\u00fcnt\u00fcs\u00fc Olu\u015fturma:<\/strong>\n<p>A\u015fa\u011f\u0131daki komutu kullanarak bir Docker g\u00f6r\u00fcnt\u00fcs\u00fc olu\u015fturun. <\/p>\n<pre><code>-t<\/pre>\n<p><\/code> bayra\u011f\u0131 g\u00f6r\u00fcnt\u00fcn\u00fcze bir isim (<\/p>\n<pre><code>node-web-app<\/pre>\n<p><\/code>) ve etiket (<\/p>\n<pre><code>.<\/pre>\n<p><\/code> mevcut dizini ifade eder) vermenizi sa\u011flar:<\/p>\n<pre><code>\ndocker build -t node-web-app .\n            <\/pre>\n<p><\/code><\/p>\n<p>Bu komut, <\/p>\n<pre><code>Dockerfile<\/pre>\n<p><\/code>'daki ad\u0131mlar\u0131 takip ederek bir g\u00f6r\u00fcnt\u00fc olu\u015fturacak ve bu g\u00f6r\u00fcnt\u00fcy\u00fc yerel Docker depolama alan\u0131n\u0131za kaydedecektir. \u00c7\u0131kt\u0131da her ad\u0131m\u0131n i\u015flendi\u011fini ve katmanlar\u0131n nas\u0131l olu\u015fturuldu\u011funu g\u00f6receksiniz. Ba\u015far\u0131l\u0131 oldu\u011funda, son sat\u0131rda g\u00f6r\u00fcnt\u00fcn\u00fcn kimli\u011fi (ID) ve ad\u0131 g\u00f6r\u00fcnecektir.<\/p>\n<\/li>\n<li><strong>Docker Konteyneri \u00c7al\u0131\u015ft\u0131rma:<\/strong>\n<p>\u015eimdi olu\u015fturdu\u011funuz g\u00f6r\u00fcnt\u00fcden bir konteyner \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code>\ndocker run -p 4000:3000 node-web-app\n            <\/pre>\n<p><\/code><\/p>\n<p><pre><code>-p 4000:3000<\/pre>\n<p><\/code> bayra\u011f\u0131, ana makinenizin 4000 numaral\u0131 portunu, konteyner i\u00e7indeki 3000 numaral\u0131 porta y\u00f6nlendirir. B\u00f6ylece uygulaman\u0131za web taray\u0131c\u0131n\u0131zdan <\/p>\n<pre><code>http:\/\/localhost:4000<\/pre>\n<p><\/code> adresinden eri\u015febilirsiniz. Komutu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda, uygulaman\u0131z\u0131n ba\u015flama mesaj\u0131n\u0131 konsolda g\u00f6rmelisiniz: <\/p>\n<pre><code>Uygulama http:\/\/localhost:3000 adresinde \u00e7al\u0131\u015f\u0131yor<\/pre>\n<p><\/code> (bu, konteynerin i\u00e7indeki porttur).<\/p>\n<\/li>\n<li><strong>Konteynerin \u00c7al\u0131\u015ft\u0131\u011f\u0131n\u0131 Do\u011frulama:<\/strong>\n<p>Ba\u015fka bir terminal penceresi a\u00e7\u0131n ve \u00e7al\u0131\u015fan konteynerlerinizi listeleyin:<\/p>\n<pre><code>\ndocker ps\n            <\/pre>\n<p><\/code><\/p>\n<p>\u00c7\u0131kt\u0131da <\/p>\n<pre><code>node-web-app<\/pre>\n<p><\/code> g\u00f6r\u00fcnt\u00fcs\u00fcnden olu\u015fturulmu\u015f, \u00e7al\u0131\u015fan bir konteyner g\u00f6rmelisiniz. Ayr\u0131ca taray\u0131c\u0131n\u0131zdan <\/p>\n<pre><code>http:\/\/localhost:4000<\/pre>\n<p><\/code> adresine giderek uygulaman\u0131z\u0131n yan\u0131t\u0131n\u0131 kontrol edebilirsiniz.<\/p>\n<\/li>\n<li><strong>Konteyner Loglar\u0131n\u0131 G\u00f6r\u00fcnt\u00fcleme:<\/strong>\n<p>\u00c7al\u0131\u015fan bir konteynerin loglar\u0131n\u0131 g\u00f6rmek i\u00e7in:<\/p>\n<pre><code>\ndocker logs <konteyner_ad\u0131_veya_id>\n            <\/pre>\n<p><\/code><\/p>\n<p>\u00d6rne\u011fin, <\/p>\n<pre><code>docker logs fantastic_bhaskara<\/pre>\n<p><\/code> gibi (konteyner ad\u0131n\u0131z <\/p>\n<pre><code>docker ps<\/pre>\n<p><\/code> \u00e7\u0131kt\u0131s\u0131nda g\u00f6r\u00fcnecektir). Bu komut, uygulaman\u0131z\u0131n konsola yazd\u0131\u011f\u0131 t\u00fcm \u00e7\u0131kt\u0131lar\u0131 g\u00f6sterir.<\/p>\n<li><strong>Konteyneri Durdurma ve Silme:<\/strong>\n<p>Konteyneri durdurmak i\u00e7in:<\/p>\n<pre><code>\ndocker stop <konteyner_ad\u0131_veya_id>\n            <\/pre>\n<p><\/code><\/p>\n<p>Durdurduktan sonra silmek i\u00e7in:<\/p>\n<pre><code>\ndocker rm <konteyner_ad\u0131_veya_id>\n            <\/pre>\n<p><\/code><\/p>\n<p>E\u011fer t\u00fcm konteynerleri ve g\u00f6r\u00fcnt\u00fcleri temizlemek isterseniz, dikkatli bir \u015fekilde <\/p>\n<pre><code>docker system prune<\/pre>\n<p><\/code> komutunu kullanabilirsiniz (\u00e7al\u0131\u015fmayan konteynerler, a\u011flar, g\u00f6r\u00fcnt\u00fcler vb. siler). Ancak bunu sadece ne yapt\u0131\u011f\u0131n\u0131zdan eminseniz kullan\u0131n.<\/p>\n<\/li>\n<\/ol>\n<div class=\"expert-tip\">\n        Uzman \u0130pucu: <\/p>\n<pre><code>docker run<\/pre>\n<p><\/code> komutuna <\/p>\n<pre><code>-d<\/pre>\n<p><\/code> (detach) bayra\u011f\u0131n\u0131 ekleyerek konteyneri arka planda \u00e7al\u0131\u015ft\u0131rabilirsiniz. B\u00f6ylece terminaliniz serbest kal\u0131r ve di\u011fer komutlar\u0131 \u00e7al\u0131\u015ft\u0131rabilirsiniz. \u00d6rnek: <\/p>\n<pre><code>docker run -d -p 4000:3000 node-web-app<\/pre>\n<p><\/code>\n    <\/div>\n<p>G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi, bu basit ad\u0131mlarla Node.js uygulaman\u0131z\u0131 Docker i\u00e7inde ba\u015far\u0131yla \u00e7al\u0131\u015ft\u0131rd\u0131k. Art\u0131k bu konteyner g\u00f6r\u00fcnt\u00fcs\u00fcn\u00fc kimin \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131 fark etmeksizin, uygulama her zaman ayn\u0131 ortamda, ayn\u0131 ba\u011f\u0131ml\u0131l\u0131klarla ve ayn\u0131 sonu\u00e7lar\u0131 vererek \u00e7al\u0131\u015facakt\u0131r. \"Benim makinemde \u00e7al\u0131\u015f\u0131yor\" canavar\u0131n\u0131 yola getirmeye ba\u015flad\u0131k bile!<\/p>\n<h2>\u00c7oklu Konteyner Ortamlar\u0131n\u0131 Y\u00f6netmek: Docker Compose<\/h2>\n<p>Tek bir web uygulamas\u0131n\u0131 Docker ile \u00e7al\u0131\u015ft\u0131rmak harikayken, ger\u00e7ek d\u00fcnya projeleri genellikle birden fazla hizmetten olu\u015fur. \u00d6rne\u011fin, bir web uygulamas\u0131 i\u00e7in bir \u00f6n u\u00e7, bir arka u\u00e7 API'si ve bir veritaban\u0131 gerekebilir. Bu hizmetlerin her birini ayr\u0131 ayr\u0131 <\/p>\n<pre><code>docker run<\/pre>\n<p><\/code> komutlar\u0131yla y\u00f6netmek, \u00f6zellikle karma\u015f\u0131k ba\u011f\u0131ml\u0131l\u0131klar\u0131 ve a\u011f yap\u0131land\u0131rmalar\u0131n\u0131 ele al\u0131rken h\u0131zla zorla\u015fabilir. \u0130\u015fte tam da bu noktada Docker Compose devreye girer. Docker Compose, \u00e7oklu konteynerli Docker uygulamalar\u0131n\u0131 tan\u0131mlamak ve \u00e7al\u0131\u015ft\u0131rmak i\u00e7in bir ara\u00e7t\u0131r.<\/p>\n<p>Docker Compose kullanarak, uygulaman\u0131z\u0131n t\u00fcm hizmetlerini, a\u011flar\u0131n\u0131 ve depolama birimlerini tek bir <\/p>\n<pre><code>YAML<\/pre>\n<p><\/code> dosyas\u0131 ile tan\u0131mlayabilirsiniz. Bu <\/p>\n<pre><code>docker-compose.yml<\/pre>\n<p><\/code> dosyas\u0131, projenizin t\u00fcm altyap\u0131s\u0131n\u0131n bir tasla\u011f\u0131n\u0131 sunar ve bu tasla\u011f\u0131 kullanarak tek bir komutla t\u00fcm ortam\u0131 yukar\u0131 kald\u0131rabilir, durdurabilir veya yeniden ba\u015flatabilirsiniz. Bu, geli\u015ftirme ortamlar\u0131n\u0131n kurulmas\u0131n\u0131, test edilmesini ve da\u011f\u0131t\u0131m\u0131n\u0131 inan\u0131lmaz derecede kolayla\u015ft\u0131r\u0131r ve \"benim makinemde \u00e7al\u0131\u015f\u0131yor\" sorununu daha da kapsaml\u0131 bir \u015fekilde \u00e7\u00f6zer, \u00e7\u00fcnk\u00fc art\u0131k sadece uygulaman\u0131z de\u011fil, uygulaman\u0131z\u0131n t\u00fcm ba\u011f\u0131ml\u0131l\u0131klar\u0131 da tutarl\u0131 bir \u015fekilde y\u00f6netilir.<\/p>\n<h3>\n<pre><code>docker-compose.yml<\/pre>\n<p><\/code> Nedir ve Nas\u0131l Olu\u015fturulur?<\/h3>\n<p>Gelin, \u00f6nceki Node.js uygulamam\u0131z\u0131 bir veritaban\u0131 (\u00f6rne\u011fin MongoDB) ile birle\u015ftirerek \u00e7oklu konteynerli bir ortam olu\u015ftural\u0131m. Proje klas\u00f6r\u00fcn\u00fczde yeni bir <\/p>\n<pre><code>docker-compose.yml<\/pre>\n<p><\/code> dosyas\u0131 olu\u015fturun:<\/p>\n<pre><code>\n# docker-compose.yml\nversion: '3.8' # Docker Compose dosya format\u0131n\u0131n versiyonu\n\nservices:\n  # Node.js web uygulamas\u0131 servisi\n  web:\n    build: . # Mevcut dizindeki Dockerfile'dan bir g\u00f6r\u00fcnt\u00fc olu\u015ftur\n    ports:\n      - \"4000:3000\" # Host 4000 portunu konteyner 3000 portuna ba\u011fla\n    environment:\n      # Ortam de\u011fi\u015fkenleri tan\u0131mla, uygulama i\u00e7inde eri\u015filebilir olacak\n      NODE_ENV: development\n      MONGO_URI: mongodb:\/\/db:27017\/mydatabase # Veritaban\u0131 ba\u011flant\u0131 URI'\u0131\n    depends_on:\n      # Bu servisin 'db' servisi ba\u015flamadan \u00f6nce ba\u015flamamas\u0131n\u0131 sa\u011fla\n      - db\n    # Geli\u015ftirme s\u00fcrecinde kaynak kod de\u011fi\u015fikliklerini an\u0131nda yans\u0131tmak i\u00e7in\n    # yerel dizini konteynerin i\u00e7indeki \/app dizinine ba\u011fla (bind mount)\n    volumes:\n      - .:\/app # Mevcut dizini \/app'e ba\u011fla\n      - \/app\/node_modules # node_modules'in host'tan ba\u011flanmamas\u0131n\u0131 sa\u011fla\n    networks:\n      - app-network\n\n  # MongoDB veritaban\u0131 servisi\n  db:\n    image: mongo:4.4 # Docker Hub'dan MongoDB 4.4 g\u00f6r\u00fcnt\u00fcs\u00fcn\u00fc kullan\n    volumes:\n      - mongo-data:\/data\/db # Kal\u0131c\u0131 veri depolamas\u0131 i\u00e7in bir volume kullan\n    networks:\n      - app-network\n\n# A\u011f tan\u0131mlamalar\u0131\nnetworks:\n  app-network:\n    driver: bridge # Varsay\u0131lan a\u011f tipi\n\n# Volume tan\u0131mlamalar\u0131 (kal\u0131c\u0131 veri depolamas\u0131 i\u00e7in)\nvolumes:\n  mongo-data: # MongoDB verileri i\u00e7in isimlendirilmi\u015f bir volume olu\u015ftur\n    driver: local\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu <\/p>\n<pre><code>docker-compose.yml<\/pre>\n<p><\/code> dosyas\u0131, iki ana hizmeti tan\u0131mlar:<\/p>\n<ul>\n<li><strong>\n<pre><code>web<\/pre>\n<p><\/code> (Node.js uygulamas\u0131):<\/strong> Mevcut dizindeki <\/p>\n<pre><code>Dockerfile<\/pre>\n<p><\/code>'dan olu\u015fturulur, 4000:3000 port e\u015flemesi yapar ve bir <\/p>\n<pre><code>MONGO_URI<\/pre>\n<p><\/code> ortam de\u011fi\u015fkeni tan\u0131mlar. <\/p>\n<pre><code>depends_on: - db<\/pre>\n<p><\/code> ile veritaban\u0131 servisi ba\u015flamadan \u00f6nce bu servisin ba\u015flamamas\u0131n\u0131 sa\u011flar\u0131z. <\/p>\n<pre><code>volumes<\/pre>\n<p><\/code> k\u0131sm\u0131, yerel kodunuzdaki de\u011fi\u015fikliklerin konteyner i\u00e7inde an\u0131nda yans\u0131mas\u0131n\u0131 sa\u011flar; bu, geli\u015ftirme i\u00e7in kritik bir \u00f6zelliktir.<\/li>\n<li><strong>\n<pre><code>db<\/pre>\n<p><\/code> (MongoDB veritaban\u0131):<\/strong> Docker Hub'dan resmi <\/p>\n<pre><code>mongo:4.4<\/pre>\n<p><\/code> g\u00f6r\u00fcnt\u00fcs\u00fcn\u00fc kullan\u0131r. <\/p>\n<pre><code>mongo-data<\/pre>\n<p><\/code> ad\u0131nda bir volume kullanarak veritaban\u0131 verilerinin konteyner silinse bile kal\u0131c\u0131 olmas\u0131n\u0131 sa\u011flar.<\/li>\n<\/ul>\n<p>Her iki servis de <\/p>\n<pre><code>app-network<\/pre>\n<p><\/code> ad\u0131 verilen ortak bir a\u011fa ba\u011flan\u0131r, bu da birbirleriyle servis adlar\u0131 (<\/p>\n<pre><code>db<\/pre>\n<p><\/code> gibi) \u00fczerinden ileti\u015fim kurmalar\u0131n\u0131 sa\u011flar. Art\u0131k <\/p>\n<pre><code>app.js<\/pre>\n<p><\/code> dosyan\u0131z\u0131 MongoDB ile ba\u011flant\u0131 kuracak \u015fekilde g\u00fcncelleyebilirsiniz (\u00f6rne\u011fin <\/p>\n<pre><code>mongoose<\/pre>\n<p><\/code> kullanarak). Ancak bu \u00f6rnekte temel odaklanma <\/p>\n<pre><code>docker-compose.yml<\/pre>\n<p><\/code> yap\u0131s\u0131 oldu\u011fundan, bu detaya girmiyoruz.<\/p>\n<h3>Docker Compose ile Ortam\u0131 Y\u00f6netme<\/h3>\n<p>\u015eimdi projenizi <\/p>\n<pre><code>docker-compose.yml<\/pre>\n<p><\/code> dosyas\u0131yla tek bir komutla aya\u011fa kald\u0131rabiliriz:<\/p>\n<ol>\n<li><strong>Ortam\u0131 Ba\u015flatma:<\/strong>\n<p>Proje klas\u00f6r\u00fcn\u00fczde, a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code>\ndocker compose up -d\n            <\/pre>\n<p><\/code><\/p>\n<p><pre><code>-d<\/pre>\n<p><\/code> bayra\u011f\u0131, t\u00fcm servisleri arka planda (detached mode) ba\u015flat\u0131r. Bu komut:<\/p>\n<ul>\n<li>\n<pre><code>web<\/pre>\n<p><\/code> servisi i\u00e7in bir Docker g\u00f6r\u00fcnt\u00fcs\u00fc olu\u015fturacak (veya zaten varsa kullanacak).<\/li>\n<li>\n<pre><code>db<\/pre>\n<p><\/code> servisi i\u00e7in <\/p>\n<pre><code>mongo:4.4<\/pre>\n<p><\/code> g\u00f6r\u00fcnt\u00fcs\u00fcn\u00fc indirecek (hen\u00fcz yoksa).<\/li>\n<li>Gerekli a\u011flar\u0131 ve volume'leri olu\u015fturacak.<\/li>\n<li>Hem\n<pre><code>db<\/pre>\n<p><\/code> hem de <\/p>\n<pre><code>web<\/pre>\n<p><\/code> konteynerlerini ba\u015flatacak.<\/li>\n<\/ul>\n<p>T\u00fcm servisler ba\u015far\u0131yla ba\u015flad\u0131\u011f\u0131nda, terminalinizde \u00e7al\u0131\u015fan konteynerlerin adlar\u0131n\u0131 g\u00f6receksiniz. Art\u0131k <\/p>\n<pre><code>http:\/\/localhost:4000<\/pre>\n<p><\/code> adresinden Node.js uygulaman\u0131za eri\u015febilirken, uygulaman\u0131z arka planda \u00e7al\u0131\u015fan MongoDB servisi ile ileti\u015fim kurabilir.<\/p>\n<\/li>\n<li><strong>\u00c7al\u0131\u015fan Servisleri G\u00f6r\u00fcnt\u00fcleme:<\/strong>\n<p>\u00c7al\u0131\u015fan Docker Compose servislerini g\u00f6rmek i\u00e7in:<\/p>\n<pre><code>\ndocker compose ps\n            <\/pre>\n<p><\/code><\/p>\n<p>Bu komut, <\/p>\n<pre><code>docker-compose.yml<\/pre>\n<p><\/code> dosyan\u0131zda tan\u0131mlanan t\u00fcm servislerin durumunu g\u00f6sterecektir.<\/p>\n<\/li>\n<li><strong>Servis Loglar\u0131n\u0131 Takip Etme:<\/strong>\n<p>T\u00fcm servislerin loglar\u0131n\u0131 tek bir yerde g\u00f6rmek i\u00e7in:<\/p>\n<pre><code>\ndocker compose logs -f\n            <\/pre>\n<p><\/code><\/p>\n<p><pre><code>-f<\/pre>\n<p><\/code> (follow) bayra\u011f\u0131, yeni loglar\u0131n geldik\u00e7e g\u00f6sterilmesini sa\u011flar.<\/p>\n<\/li>\n<li><strong>Ortam\u0131 Durdurma ve Temizleme:<\/strong>\n<p>T\u00fcm servisleri durdurmak ve konteynerleri kald\u0131rmak i\u00e7in:<\/p>\n<pre><code>\ndocker compose down\n            <\/pre>\n<p><\/code><\/p>\n<p>E\u011fer t\u00fcm volume'leri ve a\u011flar\u0131 da kald\u0131rmak isterseniz (bu, veritaban\u0131 verilerinizi silecektir):<\/p>\n<pre><code>\ndocker compose down --volumes --remove-orphans\n            <\/pre>\n<p><\/code>\n        <\/li>\n<\/ol>\n<p>Docker Compose sayesinde, karma\u015f\u0131k geli\u015ftirme ortamlar\u0131n\u0131 bile tek bir komutla aya\u011fa kald\u0131r\u0131p y\u00f6netebiliriz. Bu, ekip \u00fcyelerinin, test sunucular\u0131n\u0131n ve hatta canl\u0131 sistemlerin ayn\u0131, tutarl\u0131 ortamda \u00e7al\u0131\u015fmas\u0131n\u0131 garantiler. Art\u0131k \"benim makinemde \u00e7al\u0131\u015f\u0131yor\" canavar\u0131 i\u00e7in saklanacak hi\u00e7bir yer kalmad\u0131!<\/p>\n<h2>\u0130leri D\u00fczey Docker Kullan\u0131m\u0131 ve En \u0130yi Uygulamalar<\/h2>\n<p>Docker'\u0131n temellerini ve Docker Compose ile \u00e7oklu hizmet y\u00f6netimini anlad\u0131\u011f\u0131m\u0131za g\u00f6re, \u015fimdi daha ileri seviye konulara ve en iyi uygulamalara de\u011finelim. Bu ipu\u00e7lar\u0131, Docker deneyiminizi daha verimli, g\u00fcvenli ve performansl\u0131 hale getirecektir.<\/p>\n<h3>Veri Kal\u0131c\u0131l\u0131\u011f\u0131: Volume'lar ve Bind Mount'lar<\/h3>\n<p>Docker konteynerleri do\u011fas\u0131 gere\u011fi ge\u00e7icidir; yani bir konteyner silindi\u011finde, i\u00e7indeki t\u00fcm veriler de kaybolur. Ancak \u00e7o\u011fu uygulama, veritabanlar\u0131 veya kullan\u0131c\u0131 taraf\u0131ndan y\u00fcklenen dosyalar gibi kal\u0131c\u0131 verilere ihtiya\u00e7 duyar. Docker, bu sorunu <\/p>\n<pre><code>volume<\/pre>\n<p><\/code> ve <\/p>\n<pre><code>bind mount<\/pre>\n<p><\/code> olmak \u00fczere iki ana mekanizma ile \u00e7\u00f6zer.<\/p>\n<ul>\n<li><strong>Docker Volume'lar:<\/strong> Docker taraf\u0131ndan y\u00f6netilen veri depolama alanlar\u0131d\u0131r. Konteynerlerden ba\u011f\u0131ms\u0131z olarak ya\u015farlar ve konteynerler silinse bile veriler g\u00fcvende kal\u0131r. \u00d6zellikle veritabanlar\u0131 gibi kritik uygulamalar i\u00e7in \u00f6nerilen y\u00f6ntemdir.\n<pre><code>docker-compose.yml<\/pre>\n<p><\/code> dosyas\u0131nda <\/p>\n<pre><code>volumes:<\/pre>\n<p><\/code> alt\u0131nda tan\u0131mlan\u0131r ve servisler taraf\u0131ndan <\/p>\n<pre><code><volume_ad\u0131>:\/path\/in\/container<\/pre>\n<p><\/code> \u015feklinde kullan\u0131l\u0131r.<\/li>\n<li><strong>Bind Mount'lar:<\/strong> Ana makine \u00fczerindeki belirli bir dizini do\u011frudan bir konteynerin i\u00e7ine ba\u011flaman\u0131za olanak tan\u0131r. Genellikle geli\u015ftirme s\u00fcrecinde, kaynak kodunuzdaki de\u011fi\u015fiklikleri an\u0131nda konteyner i\u00e7inde test etmek i\u00e7in kullan\u0131l\u0131r. \u00d6rne\u011fin,\n<pre><code>-v .\/src:\/app\/src<\/pre>\n<p><\/code> komutu, ana makinenizdeki <\/p>\n<pre><code>src<\/pre>\n<p><\/code> klas\u00f6r\u00fcn\u00fc konteynerin <\/p>\n<pre><code>\/app\/src<\/pre>\n<p><\/code> klas\u00f6r\u00fcne ba\u011flar. <\/p>\n<pre><code>docker-compose.yml<\/pre>\n<p><\/code> i\u00e7inde de benzer \u015fekilde tan\u0131mlan\u0131r.<\/li>\n<\/ul>\n<p>Her iki y\u00f6ntem de verilerin kal\u0131c\u0131l\u0131\u011f\u0131n\u0131 sa\u011flarken, kullan\u0131m senaryolar\u0131na g\u00f6re tercih edilmelidir. Geli\u015ftirme i\u00e7in <\/p>\n<pre><code>bind mount<\/pre>\n<p><\/code> kullan\u0131\u015fl\u0131yken, \u00fcretim ortamlar\u0131nda <\/p>\n<pre><code>volume<\/pre>\n<p><\/code> daha g\u00fcvenli ve y\u00f6netilebilir bir se\u00e7enektir.<\/p>\n<h3>A\u011f Yap\u0131land\u0131rmas\u0131: Konteynerler Aras\u0131 \u0130leti\u015fim<\/h3>\n<p>\u00c7oklu konteynerli uygulamalarda, farkl\u0131 servislerin birbiriyle ileti\u015fim kurmas\u0131 gerekir. Docker, varsay\u0131lan olarak bir a\u011f k\u00f6pr\u00fcs\u00fc (bridge network) olu\u015fturur ve konteynerler bu a\u011f \u00fczerinde birbirleriyle IP adresleri \u00fczerinden ileti\u015fim kurabilir. Ancak Docker Compose ile \u00e7al\u0131\u015f\u0131rken, servisler varsay\u0131lan olarak ayn\u0131 a\u011fa dahil edilir ve servis adlar\u0131 \u00fczerinden (\u00f6rne\u011fin, <\/p>\n<pre><code>web<\/pre>\n<p><\/code> servisi <\/p>\n<pre><code>db<\/pre>\n<p><\/code> servisine <\/p>\n<pre><code>db<\/pre>\n<p><\/code> ad\u0131yla eri\u015febilir) birbirlerini bulabilirler. Bu, servis ke\u015ffini son derece kolayla\u015ft\u0131r\u0131r.<\/p>\n<pre><code>\n# docker-compose.yml i\u00e7inde a\u011f tan\u0131mlamas\u0131\nnetworks:\n  app-network:\n    driver: bridge # Varsay\u0131lan olarak bridge tipi a\u011f kullan\u0131l\u0131r\n    <\/pre>\n<p><\/code><\/p>\n<p>Daha karma\u015f\u0131k senaryolar i\u00e7in, birden fazla \u00f6zel a\u011f olu\u015fturabilir ve farkl\u0131 servisleri farkl\u0131 a\u011flara ba\u011flayarak daha iyi izolasyon ve g\u00fcvenlik sa\u011flayabilirsiniz. \u00d6rne\u011fin, veritaban\u0131 servislerini yaln\u0131zca arka u\u00e7 servislerinin eri\u015febilece\u011fi \u00f6zel bir a\u011fa koyabilirsiniz.<\/p>\n<h3>Performans ve G\u00fcvenlik \u0130pu\u00e7lar\u0131<\/h3>\n<p>Docker kullan\u0131m\u0131n\u0131z\u0131 optimize etmek i\u00e7in g\u00f6z \u00f6n\u00fcnde bulundurman\u0131z gereken baz\u0131 \u00f6nemli ipu\u00e7lar\u0131:<\/p>\n<ul>\n<li><strong>Multi-stage Builds (\u00c7ok A\u015famal\u0131 Yap\u0131lar):<\/strong> G\u00f6r\u00fcnt\u00fc boyutunu k\u00fc\u00e7\u00fcltmek ve gereksiz ba\u011f\u0131ml\u0131l\u0131klar\u0131 ortadan kald\u0131rmak i\u00e7in kullan\u0131l\u0131r. Birinci a\u015famada uygulaman\u0131z\u0131 derler veya ba\u011f\u0131ml\u0131l\u0131klar\u0131 kurars\u0131n\u0131z, ikinci a\u015famada ise sadece uygulaman\u0131n \u00e7al\u0131\u015fmas\u0131 i\u00e7in gerekli olan \u00e7\u0131kt\u0131lar\u0131 kopyalars\u0131n\u0131z.<\/li>\n<pre><code>\n# \u00d6rnek Multi-stage Dockerfile\nFROM node:16-alpine as builder\nWORKDIR \/app\nCOPY package*.json .\/\nRUN npm install\nCOPY . .\nRUN npm run build # React, Angular vb. i\u00e7in\n\nFROM node:16-alpine\nWORKDIR \/app\nCOPY --from=builder \/app\/build .\/build # Build \u00e7\u0131kt\u0131s\u0131n\u0131 kopyala\nCOPY --from=builder \/app\/node_modules .\/node_modules\nCOPY --from=builder \/app\/package*.json .\/\nCMD [\"npm\", \"start\"]\n        <\/pre>\n<p><\/code><\/p>\n<li><strong>Daha K\u00fc\u00e7\u00fck Temel G\u00f6r\u00fcnt\u00fcler:<\/strong>\n<pre><code>alpine<\/pre>\n<p><\/code> gibi k\u00fc\u00e7\u00fck boyutlu Linux da\u011f\u0131t\u0131mlar\u0131n\u0131 temel alan g\u00f6r\u00fcnt\u00fcleri tercih edin (<\/p>\n<pre><code>node:16-alpine<\/pre>\n<p><\/code> \u00f6rne\u011findeki gibi). Bu, indirme s\u00fcrelerini k\u0131salt\u0131r ve g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 azalt\u0131r.<\/li>\n<li><strong>\n<pre><code>.dockerignore<\/pre>\n<p><\/code> Dosyas\u0131:<\/strong> Git'teki <\/p>\n<pre><code>.gitignore<\/pre>\n<p><\/code> dosyas\u0131na benzer. Docker g\u00f6r\u00fcnt\u00fcs\u00fc olu\u015fturulurken hangi dosyalar\u0131n kopyalanmayaca\u011f\u0131n\u0131 belirtir. \u00d6rne\u011fin, <\/p>\n<pre><code>node_modules<\/pre>\n<p><\/code>, <\/p>\n<pre><code>.git<\/pre>\n<p><\/code>, <\/p>\n<pre><code>tmp<\/pre>\n<p><\/code> gibi klas\u00f6rleri hari\u00e7 tutarak g\u00f6r\u00fcnt\u00fc boyutunu k\u00fc\u00e7\u00fclt\u00fcr.<\/li>\n<li><strong>Root Olmayan Kullan\u0131c\u0131lar:<\/strong> Konteynerleri\n<pre><code>root<\/pre>\n<p><\/code> kullan\u0131c\u0131 olarak \u00e7al\u0131\u015ft\u0131rmaktan ka\u00e7\u0131n\u0131n. <\/p>\n<pre><code>USER<\/pre>\n<p><\/code> komutu ile daha az yetkili bir kullan\u0131c\u0131 tan\u0131mlayarak g\u00fcvenlik risklerini azalt\u0131n.<\/li>\n<li><strong>Ba\u011f\u0131ml\u0131l\u0131k Katmanlar\u0131n\u0131 \u00d6nbelle\u011fe Al\u0131n:<\/strong>\n<pre><code>Dockerfile<\/pre>\n<p><\/code>'da <\/p>\n<pre><code>COPY package*.json .\/<\/pre>\n<p><\/code> ve <\/p>\n<pre><code>RUN npm install<\/pre>\n<p><\/code> ad\u0131mlar\u0131n\u0131 ayr\u0131 tutarak, ba\u011f\u0131ml\u0131l\u0131klar de\u011fi\u015fmedi\u011fi s\u00fcrece bu katman\u0131n yeniden olu\u015fturulmas\u0131n\u0131 \u00f6nler ve yap\u0131land\u0131rma s\u00fcrelerini h\u0131zland\u0131r\u0131rs\u0131n\u0131z.<\/li>\n<\/ul>\n<div class=\"expert-tip\">\n        Uzman \u0130pucu: Bu tekniklerle sadece Docker g\u00f6r\u00fcnt\u00fclerinizin boyutunu k\u00fc\u00e7\u00fcltmekle kalmaz, ayn\u0131 zamanda g\u00fcvenlik duru\u015funuzu g\u00fc\u00e7lendirir ve <\/p>\n<pre><code>CI\/CD<\/pre>\n<p><\/code> s\u00fcre\u00e7lerinizde build s\u00fcrelerini %30-50 oran\u0131nda azaltabilirsiniz!\n    <\/div>\n<h3>Modern Web Geli\u015ftirmede Mobil Uyumlu HTML \u00d6rnekleri<\/h3>\n<p>Docker, uygulamalar\u0131n da\u011f\u0131t\u0131m ortam\u0131n\u0131 standartla\u015ft\u0131r\u0131rken, modern web uygulamalar\u0131n\u0131n kendisi de farkl\u0131 cihazlarda uyumlu \u00e7al\u0131\u015fmak zorundad\u0131r. Mobil uyumluluk, g\u00fcn\u00fcm\u00fcz web geli\u015ftiricileri i\u00e7in olmazsa olmazd\u0131r. Docker konteynerleri, responsive web tasar\u0131m\u0131n\u0131 etkilemez, ancak uygulaman\u0131z\u0131n taray\u0131c\u0131da nas\u0131l g\u00f6r\u00fcnd\u00fc\u011f\u00fcn\u00fc tasarlarken <\/p>\n<pre><code>media query<\/pre>\n<p><\/code>'ler gibi responsive design tekniklerini kullanman\u0131z \u00f6nemlidir. \u0130\u015fte basit bir <\/p>\n<pre><code>media query<\/pre>\n<p><\/code> \u00f6rne\u011fi:<\/p>\n<pre><code>\n<style>\n  \/* Varsay\u0131lan stil: K\u00fc\u00e7\u00fck ekranlar i\u00e7in (mobil \u00f6ncelikli) *\/\n  .responsive-card {\n    width: 90%;\n    margin: 10px auto;\n    padding: 15px;\n    background-color: #f8f8f8;\n    border: 1px solid #ddd;\n    box-shadow: 2px 2px 8px rgba(0,0,0,0.1);\n    text-align: center;\n  }\n\n  \/* Orta boy ekranlar (tabletler) i\u00e7in medya sorgusu *\/\n  @media (min-width: 768px) {\n    .responsive-card {\n      width: 60%; \/* Daha geni\u015f ekranlarda kutu %60 geni\u015flikte *\/\n      padding: 20px;\n    }\n  }\n\n  \/* B\u00fcy\u00fck ekranlar (masa\u00fcst\u00fc) i\u00e7in medya sorgusu *\/\n  @media (min-width: 1024px) {\n    .responsive-card {\n      width: 40%; \/* En geni\u015f ekranlarda %40 geni\u015flikte *\/\n      padding: 25px;\n      background-color: #eaf2f8; \/* Farkl\u0131 arka plan rengi *\/\n    }\n  }\n<\/style>\n\n<div class=\"responsive-card\">\n  <h3>Responsive \u0130\u00e7erik Kart\u0131<\/h3>\n  <p>Bu kart, ekran boyutuna g\u00f6re otomatik olarak \u015fekil de\u011fi\u015ftirir. Web uygulaman\u0131z, Docker konteynerinde \u00e7al\u0131\u015f\u0131rken de bu t\u00fcr responsive tasar\u0131mlar\u0131 destekler.<\/p>\n<\/div>\n    <\/pre>\n<p><\/code><\/p>\n<p>Yukar\u0131daki HTML ve CSS \u00f6rne\u011finde, <\/p>\n<pre><code>.responsive-card<\/pre>\n<p><\/code> s\u0131n\u0131f\u0131na sahip bir kart\u0131n ekran geni\u015fli\u011fine g\u00f6re nas\u0131l farkl\u0131 stiller uygulad\u0131\u011f\u0131n\u0131 g\u00f6rebilirsiniz. K\u00fc\u00e7\u00fck ekranlar i\u00e7in varsay\u0131lan stil belirlenirken, <\/p>\n<pre><code>@media (min-width: 768px)<\/pre>\n<p><\/code> ve <\/p>\n<pre><code>@media (min-width: 1024px)<\/pre>\n<p><\/code> kurallar\u0131, belirli geni\u015fliklerin \u00fczerindeki ekranlarda kart\u0131n g\u00f6r\u00fcn\u00fcm\u00fcn\u00fc de\u011fi\u015ftirir. Bu sayede, web uygulaman\u0131z Docker konteynerinde \u00e7al\u0131\u015f\u0131rken bile kullan\u0131c\u0131lar farkl\u0131 cihazlarda tutarl\u0131 ve optimize edilmi\u015f bir deneyim ya\u015far.<\/p>\n<h2>Sonu\u00e7: Docker ile Tutarl\u0131 Geli\u015ftirme Ortamlar\u0131 Olu\u015fturmak<\/h2>\n<p>\"Benim makinemde \u00e7al\u0131\u015f\u0131yor\" sendromu, uzun y\u0131llard\u0131r yaz\u0131l\u0131m geli\u015ftirme d\u00fcnyas\u0131n\u0131n en b\u00fcy\u00fck ve en sinir bozucu sorunlar\u0131ndan biri olmu\u015ftur. Geli\u015ftirme ekipleri i\u00e7in zaman kayb\u0131na, hayal k\u0131r\u0131kl\u0131\u011f\u0131na ve gereksiz maliyetlere yol a\u00e7an bu sorun, karma\u015f\u0131k ba\u011f\u0131ml\u0131l\u0131klar, farkl\u0131 ortam yap\u0131land\u0131rmalar\u0131 ve tutars\u0131z kurulumlar nedeniyle ortaya \u00e7\u0131k\u0131yordu. Ancak bu makalede g\u00f6rd\u00fc\u011f\u00fcm\u00fcz gibi, Docker ve konteynerle\u015fme teknolojisi, bu \"canavar\u0131\" ehlile\u015ftirmek i\u00e7in g\u00fc\u00e7l\u00fc ve etkili bir \u00e7\u00f6z\u00fcm sunuyor.<\/p>\n<p>Docker, uygulamalar\u0131 ve onlar\u0131n t\u00fcm ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 izole edilmi\u015f, ta\u015f\u0131nabilir ve kendi ba\u015f\u0131na \u00e7al\u0131\u015fabilen konteynerler i\u00e7inde paketleyerek, ortamdan ba\u011f\u0131ms\u0131z bir \u00e7al\u0131\u015fma garantisi verir. <\/p>\n<pre><code>Dockerfile<\/pre>\n<p><\/code> ile ortam\u0131n nas\u0131l olmas\u0131 gerekti\u011fini kodla tan\u0131mlamak, <\/p>\n<pre><code>Docker Image<\/pre>\n<p><\/code> ile bu tan\u0131m\u0131n de\u011fi\u015ftirilemez bir kopyas\u0131n\u0131 olu\u015fturmak ve <\/p>\n<pre><code>Docker Container<\/pre>\n<p><\/code> ile bu g\u00f6r\u00fcnt\u00fcy\u00fc tutarl\u0131 bir \u015fekilde \u00e7al\u0131\u015ft\u0131rmak, tutars\u0131zl\u0131k sorununu k\u00f6kten \u00e7\u00f6z\u00fcyor. Dahas\u0131, Docker Compose ile \u00e7oklu hizmetli karma\u015f\u0131k uygulamalar\u0131 bile tek bir <\/p>\n<pre><code>YAML<\/pre>\n<p><\/code> dosyas\u0131 ile y\u00f6netebilme yetene\u011fi, geli\u015ftirme, test ve da\u011f\u0131t\u0131m s\u00fcre\u00e7lerini basitle\u015ftirerek ekiplerin daha verimli ve i\u015fbirli\u011fine dayal\u0131 \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011fl\u0131yor. Art\u0131k yeni bir geli\u015ftirici ekibe kat\u0131ld\u0131\u011f\u0131nda, saatler s\u00fcren ortam kurulumlar\u0131 yerine dakikalar i\u00e7inde geli\u015ftirme yapmaya ba\u015flayabilir. Test ortamlar\u0131 canl\u0131 sistemin tam bir kopyas\u0131 haline gelirken, da\u011f\u0131t\u0131m s\u00fcre\u00e7leri de \u00e7ok daha g\u00fcvenilir hale gelir.<\/p>\n<p>Geli\u015ftiricilere sadece kod yazmaya odaklanma \u00f6zg\u00fcrl\u00fc\u011f\u00fc veren Docker, altyap\u0131 y\u00f6netiminin karma\u015f\u0131kl\u0131\u011f\u0131n\u0131 azaltarak, \"\u00e7al\u0131\u015ft\u0131 ama neden?\" veya \"\u00e7al\u0131\u015fmad\u0131 ama neden?\" gibi sorular\u0131n yerine \"kodum do\u011fru \u00e7al\u0131\u015f\u0131yor mu?\" sorusuna odaklanmalar\u0131n\u0131 sa\u011flar. Veri kal\u0131c\u0131l\u0131\u011f\u0131 i\u00e7in volume'lar, servisler aras\u0131 ileti\u015fim i\u00e7in a\u011flar, performans i\u00e7in multi-stage build'ler ve g\u00fcvenlik i\u00e7in en iyi uygulamalarla Docker, modern yaz\u0131l\u0131m geli\u015ftirme ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fcn vazge\u00e7ilmez bir par\u00e7as\u0131 haline gelmi\u015ftir. Gelecekte mikroservis mimarilerinin ve bulut tabanl\u0131 da\u011f\u0131t\u0131mlar\u0131n daha da yayg\u0131nla\u015fmas\u0131yla, Docker ve konteyner teknolojilerinin \u00f6nemi artmaya devam edecektir. Bu g\u00fc\u00e7l\u00fc arac\u0131 benimseyerek, siz de geli\u015ftirme s\u00fcre\u00e7lerinizi d\u00f6n\u00fc\u015ft\u00fcrebilir ve yaz\u0131l\u0131m projelerinizi ba\u015far\u0131ya ula\u015ft\u0131rabilirsiniz.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<dl>\n<dt>Docker \u00fccretsiz mi?<\/dt>\n<dd>Evet, Docker'\u0131n temel s\u00fcr\u00fcm\u00fc (Docker Community Edition - Docker Desktop) ki\u015fisel ve k\u00fc\u00e7\u00fck \u00f6l\u00e7ekli ticari kullan\u0131m i\u00e7in \u00fccretsizdir. Daha b\u00fcy\u00fck i\u015fletmeler veya kurumsal kullan\u0131m i\u00e7in \u00fccretli abonelik planlar\u0131 bulunmaktad\u0131r.<\/dd>\n<dt>Docker bir sanal makine (VM) midir?<\/dt>\n<dd>Hay\u0131r, Docker bir sanal makine de\u011fildir. Sanal makineler, kendi i\u015fletim sistemlerini i\u00e7eren tam te\u015fekk\u00fcll\u00fc sanal donan\u0131mlard\u0131r ve a\u011f\u0131r kaynak t\u00fcketirler. Konteynerler ise ana makinenin i\u015fletim sistemi \u00e7ekirde\u011fini payla\u015f\u0131r, bu y\u00fczden \u00e7ok daha hafif, h\u0131zl\u0131 ve kaynak verimlidirler.<\/dd>\n<dt>Docker'\u0131 ne zaman kullanmal\u0131y\u0131m?<\/dt>\n<dd>Docker'\u0131, geli\u015ftirme, test ve \u00fcretim ortamlar\u0131 aras\u0131nda tutarl\u0131l\u0131\u011f\u0131 sa\u011flamak, ba\u011f\u0131ml\u0131l\u0131k sorunlar\u0131n\u0131 \u00e7\u00f6zmek, mikroservis tabanl\u0131 uygulamalar geli\u015ftirmek, CI\/CD (S\u00fcrekli Entegrasyon\/S\u00fcrekli Da\u011f\u0131t\u0131m) s\u00fcre\u00e7lerini otomatikle\u015ftirmek ve uygulamalar\u0131n\u0131z\u0131 kolayca \u00f6l\u00e7eklendirmek istedi\u011finizde kullanmal\u0131s\u0131n\u0131z.<\/dd>\n<dt>Docker'\u0131n dezavantajlar\u0131 var m\u0131?<\/dt>\n<dd>Her teknoloji gibi Docker'\u0131n da baz\u0131 dezavantajlar\u0131 olabilir. \u00d6\u011frenme e\u011frisi, \u00f6zellikle yeni ba\u015flayanlar i\u00e7in biraz dik olabilir. Ayr\u0131ca, konteynerler izolasyon sa\u011flasa da, ana makine \u00e7ekirde\u011fini payla\u015ft\u0131klar\u0131 i\u00e7in sanal makineler kadar g\u00fc\u00e7l\u00fc bir izolasyon sunmazlar. Depolama (volume'lar) ve a\u011f y\u00f6netimi ba\u015flang\u0131\u00e7ta karma\u015f\u0131k gelebilir.<\/dd>\n<dt>Konteynerler g\u00fcvenli mi?<\/dt>\n<dd>Konteynerler do\u011falar\u0131 gere\u011fi izolasyon sa\u011flad\u0131klar\u0131 i\u00e7in g\u00fcvenli\u011fi art\u0131r\u0131r. Ancak, k\u00f6t\u00fc yap\u0131land\u0131r\u0131lm\u0131\u015f Dockerfile'lar, root olarak \u00e7al\u0131\u015fan konteynerler, eski ve g\u00fcvenlik a\u00e7\u0131\u011f\u0131 i\u00e7eren temel g\u00f6r\u00fcnt\u00fcler veya gereksiz portlar\u0131n a\u00e7\u0131\u011fa \u00e7\u0131kar\u0131lmas\u0131 g\u00fcvenlik riskleri olu\u015fturabilir. G\u00fcvenli Docker uygulamalar\u0131 i\u00e7in en iyi uygulamalar\u0131n takip edilmesi kritik \u00f6neme sahiptir.<\/dd>\n<\/dl>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Geli\u015ftirme d\u00fcnyas\u0131n\u0131n en sinir bozucu c\u00fcmlelerinden biriyle tan\u0131\u015f\u0131n: &#8220;Ama benim makinemde \u00e7al\u0131\u015f\u0131yordu!&#8221; Bu durum, \u00e7o\u011fu yaz\u0131l\u0131m geli\u015ftiricinin ve&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-30557","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>Docker ile &#039;Benim Makinemde \u00c7al\u0131\u015f\u0131yor&#039; Problemini \u00c7\u00f6zmek<\/title>\n<meta name=\"description\" content=\"Geli\u015ftirme d\u00fcnyas\u0131n\u0131n en sinir bozucu c\u00fcmlelerinden biriyle tan\u0131\u015f\u0131n: &quot;Ama benim makinemde \u00e7al\u0131\u015f\u0131yordu!&quot; Bu durum, \u00e7o\u011fu yaz\u0131l\u0131m geli\u015ftiricinin ve operasyon ekibinin kar\u015f\u0131la\u015ft\u0131\u011f\u0131, zaman kaybettiren ve moral bozan bir sorundur. Uygulamalar geli\u015ftirilirken farkl\u0131 i\u015fletim sistemleri, k\u00fct\u00fcphane versiyonlar\u0131 ve ba\u011f\u0131ml\u0131l\u0131klar nedeniyle olu\u015fan tutars\u0131zl\u0131klar, projelerin gecikmesine ve gereksiz efor sarf edilmesine yol a\u00e7abilir. Neyse ki, bu &quot;canavar\u0131&quot; ehlile\u015ftirmenin g\u00fc\u00e7l\u00fc bir yolu var: Docker. Bu makale, Docker&#039;\u0131n ne oldu\u011funu, bu problemi nas\u0131l k\u00f6k\u00fcnden \u00e7\u00f6zd\u00fc\u011f\u00fcn\u00fc ve geli\u015ftirme s\u00fcre\u00e7lerinizi nas\u0131l daha verimli hale getirebilece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131klayacak. Haz\u0131r m\u0131s\u0131n\u0131z? Gelin bu k\u00e2busa bir son verelim!\" \/>\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\/docker-ile-benim-makinemde-calisiyor-problemini-cozmek\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Docker ile &#039;Benim Makinemde \u00c7al\u0131\u015f\u0131yor&#039; Problemini \u00c7\u00f6zmek\" \/>\n<meta property=\"og:description\" content=\"Geli\u015ftirme d\u00fcnyas\u0131n\u0131n en sinir bozucu c\u00fcmlelerinden biriyle tan\u0131\u015f\u0131n: &quot;Ama benim makinemde \u00e7al\u0131\u015f\u0131yordu!&quot; Bu durum, \u00e7o\u011fu yaz\u0131l\u0131m geli\u015ftiricinin ve operasyon ekibinin kar\u015f\u0131la\u015ft\u0131\u011f\u0131, zaman kaybettiren ve moral bozan bir sorundur. Uygulamalar geli\u015ftirilirken farkl\u0131 i\u015fletim sistemleri, k\u00fct\u00fcphane versiyonlar\u0131 ve ba\u011f\u0131ml\u0131l\u0131klar nedeniyle olu\u015fan tutars\u0131zl\u0131klar, projelerin gecikmesine ve gereksiz efor sarf edilmesine yol a\u00e7abilir. Neyse ki, bu &quot;canavar\u0131&quot; ehlile\u015ftirmenin g\u00fc\u00e7l\u00fc bir yolu var: Docker. Bu makale, Docker&#039;\u0131n ne oldu\u011funu, bu problemi nas\u0131l k\u00f6k\u00fcnden \u00e7\u00f6zd\u00fc\u011f\u00fcn\u00fc ve geli\u015ftirme s\u00fcre\u00e7lerinizi nas\u0131l daha verimli hale getirebilece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131klayacak. Haz\u0131r m\u0131s\u0131n\u0131z? Gelin bu k\u00e2busa bir son verelim!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/docker-ile-benim-makinemde-calisiyor-problemini-cozmek\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-09-29T04:01:14+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=\"25 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-ile-benim-makinemde-calisiyor-problemini-cozmek\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-ile-benim-makinemde-calisiyor-problemini-cozmek\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Docker ile &#8216;Benim Makinemde \u00c7al\u0131\u015f\u0131yor&#8217; Problemini \u00c7\u00f6zmek\",\"datePublished\":\"2025-09-29T04:01:14+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-ile-benim-makinemde-calisiyor-problemini-cozmek\/\"},\"wordCount\":4220,\"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\/docker-ile-benim-makinemde-calisiyor-problemini-cozmek\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-ile-benim-makinemde-calisiyor-problemini-cozmek\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/docker-ile-benim-makinemde-calisiyor-problemini-cozmek\/\",\"name\":\"Docker ile 'Benim Makinemde \u00c7al\u0131\u015f\u0131yor' Problemini \u00c7\u00f6zmek\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-09-29T04:01:14+00:00\",\"description\":\"Geli\u015ftirme d\u00fcnyas\u0131n\u0131n en sinir bozucu c\u00fcmlelerinden biriyle tan\u0131\u015f\u0131n: \\\"Ama benim makinemde \u00e7al\u0131\u015f\u0131yordu!\\\" Bu durum, \u00e7o\u011fu yaz\u0131l\u0131m geli\u015ftiricinin ve operasyon ekibinin kar\u015f\u0131la\u015ft\u0131\u011f\u0131, zaman kaybettiren ve moral bozan bir sorundur. Uygulamalar geli\u015ftirilirken farkl\u0131 i\u015fletim sistemleri, k\u00fct\u00fcphane versiyonlar\u0131 ve ba\u011f\u0131ml\u0131l\u0131klar nedeniyle olu\u015fan tutars\u0131zl\u0131klar, projelerin gecikmesine ve gereksiz efor sarf edilmesine yol a\u00e7abilir. Neyse ki, bu \\\"canavar\u0131\\\" ehlile\u015ftirmenin g\u00fc\u00e7l\u00fc bir yolu var: Docker. Bu makale, Docker'\u0131n ne oldu\u011funu, bu problemi nas\u0131l k\u00f6k\u00fcnden \u00e7\u00f6zd\u00fc\u011f\u00fcn\u00fc ve geli\u015ftirme s\u00fcre\u00e7lerinizi nas\u0131l daha verimli hale getirebilece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131klayacak. Haz\u0131r m\u0131s\u0131n\u0131z? Gelin bu k\u00e2busa bir son verelim!\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-ile-benim-makinemde-calisiyor-problemini-cozmek\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/docker-ile-benim-makinemde-calisiyor-problemini-cozmek\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/docker-ile-benim-makinemde-calisiyor-problemini-cozmek\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Docker ile &#8216;Benim Makinemde \u00c7al\u0131\u015f\u0131yor&#8217; Problemini \u00c7\u00f6zmek\"}]},{\"@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":"Docker ile 'Benim Makinemde \u00c7al\u0131\u015f\u0131yor' Problemini \u00c7\u00f6zmek","description":"Geli\u015ftirme d\u00fcnyas\u0131n\u0131n en sinir bozucu c\u00fcmlelerinden biriyle tan\u0131\u015f\u0131n: \"Ama benim makinemde \u00e7al\u0131\u015f\u0131yordu!\" Bu durum, \u00e7o\u011fu yaz\u0131l\u0131m geli\u015ftiricinin ve operasyon ekibinin kar\u015f\u0131la\u015ft\u0131\u011f\u0131, zaman kaybettiren ve moral bozan bir sorundur. Uygulamalar geli\u015ftirilirken farkl\u0131 i\u015fletim sistemleri, k\u00fct\u00fcphane versiyonlar\u0131 ve ba\u011f\u0131ml\u0131l\u0131klar nedeniyle olu\u015fan tutars\u0131zl\u0131klar, projelerin gecikmesine ve gereksiz efor sarf edilmesine yol a\u00e7abilir. Neyse ki, bu \"canavar\u0131\" ehlile\u015ftirmenin g\u00fc\u00e7l\u00fc bir yolu var: Docker. Bu makale, Docker'\u0131n ne oldu\u011funu, bu problemi nas\u0131l k\u00f6k\u00fcnden \u00e7\u00f6zd\u00fc\u011f\u00fcn\u00fc ve geli\u015ftirme s\u00fcre\u00e7lerinizi nas\u0131l daha verimli hale getirebilece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131klayacak. Haz\u0131r m\u0131s\u0131n\u0131z? Gelin bu k\u00e2busa bir son verelim!","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\/docker-ile-benim-makinemde-calisiyor-problemini-cozmek\/","og_locale":"tr_TR","og_type":"article","og_title":"Docker ile 'Benim Makinemde \u00c7al\u0131\u015f\u0131yor' Problemini \u00c7\u00f6zmek","og_description":"Geli\u015ftirme d\u00fcnyas\u0131n\u0131n en sinir bozucu c\u00fcmlelerinden biriyle tan\u0131\u015f\u0131n: \"Ama benim makinemde \u00e7al\u0131\u015f\u0131yordu!\" Bu durum, \u00e7o\u011fu yaz\u0131l\u0131m geli\u015ftiricinin ve operasyon ekibinin kar\u015f\u0131la\u015ft\u0131\u011f\u0131, zaman kaybettiren ve moral bozan bir sorundur. Uygulamalar geli\u015ftirilirken farkl\u0131 i\u015fletim sistemleri, k\u00fct\u00fcphane versiyonlar\u0131 ve ba\u011f\u0131ml\u0131l\u0131klar nedeniyle olu\u015fan tutars\u0131zl\u0131klar, projelerin gecikmesine ve gereksiz efor sarf edilmesine yol a\u00e7abilir. Neyse ki, bu \"canavar\u0131\" ehlile\u015ftirmenin g\u00fc\u00e7l\u00fc bir yolu var: Docker. Bu makale, Docker'\u0131n ne oldu\u011funu, bu problemi nas\u0131l k\u00f6k\u00fcnden \u00e7\u00f6zd\u00fc\u011f\u00fcn\u00fc ve geli\u015ftirme s\u00fcre\u00e7lerinizi nas\u0131l daha verimli hale getirebilece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131klayacak. Haz\u0131r m\u0131s\u0131n\u0131z? Gelin bu k\u00e2busa bir son verelim!","og_url":"https:\/\/fatihsoysal.com\/blog\/docker-ile-benim-makinemde-calisiyor-problemini-cozmek\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-09-29T04:01:14+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"25 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/docker-ile-benim-makinemde-calisiyor-problemini-cozmek\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/docker-ile-benim-makinemde-calisiyor-problemini-cozmek\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Docker ile &#8216;Benim Makinemde \u00c7al\u0131\u015f\u0131yor&#8217; Problemini \u00c7\u00f6zmek","datePublished":"2025-09-29T04:01:14+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/docker-ile-benim-makinemde-calisiyor-problemini-cozmek\/"},"wordCount":4220,"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\/docker-ile-benim-makinemde-calisiyor-problemini-cozmek\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/docker-ile-benim-makinemde-calisiyor-problemini-cozmek\/","url":"https:\/\/fatihsoysal.com\/blog\/docker-ile-benim-makinemde-calisiyor-problemini-cozmek\/","name":"Docker ile 'Benim Makinemde \u00c7al\u0131\u015f\u0131yor' Problemini \u00c7\u00f6zmek","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-09-29T04:01:14+00:00","description":"Geli\u015ftirme d\u00fcnyas\u0131n\u0131n en sinir bozucu c\u00fcmlelerinden biriyle tan\u0131\u015f\u0131n: \"Ama benim makinemde \u00e7al\u0131\u015f\u0131yordu!\" Bu durum, \u00e7o\u011fu yaz\u0131l\u0131m geli\u015ftiricinin ve operasyon ekibinin kar\u015f\u0131la\u015ft\u0131\u011f\u0131, zaman kaybettiren ve moral bozan bir sorundur. Uygulamalar geli\u015ftirilirken farkl\u0131 i\u015fletim sistemleri, k\u00fct\u00fcphane versiyonlar\u0131 ve ba\u011f\u0131ml\u0131l\u0131klar nedeniyle olu\u015fan tutars\u0131zl\u0131klar, projelerin gecikmesine ve gereksiz efor sarf edilmesine yol a\u00e7abilir. Neyse ki, bu \"canavar\u0131\" ehlile\u015ftirmenin g\u00fc\u00e7l\u00fc bir yolu var: Docker. Bu makale, Docker'\u0131n ne oldu\u011funu, bu problemi nas\u0131l k\u00f6k\u00fcnden \u00e7\u00f6zd\u00fc\u011f\u00fcn\u00fc ve geli\u015ftirme s\u00fcre\u00e7lerinizi nas\u0131l daha verimli hale getirebilece\u011finizi ad\u0131m ad\u0131m a\u00e7\u0131klayacak. Haz\u0131r m\u0131s\u0131n\u0131z? Gelin bu k\u00e2busa bir son verelim!","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/docker-ile-benim-makinemde-calisiyor-problemini-cozmek\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/docker-ile-benim-makinemde-calisiyor-problemini-cozmek\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/docker-ile-benim-makinemde-calisiyor-problemini-cozmek\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Docker ile &#8216;Benim Makinemde \u00c7al\u0131\u015f\u0131yor&#8217; Problemini \u00c7\u00f6zmek"}]},{"@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\/30557","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=30557"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/30557\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=30557"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=30557"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=30557"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}